分三個模塊介紹GTX收發器的原理
首先是時鍾篇
GTX收發器主要的時鍾輸入有四個
①input wireQ2_CLK1_GTREFCLK_PAD_N_IN,
②
input wireQ2_CLK1_GTREFCLK_PAD_P_IN,
③
input wire DRP_CLK_IN_P,
④
input wire DRP_CLK_IN_N,
前兩個是125M的GMII時鍾,用來gtx_common生成QPLLOUTCLK_OUT 和QPLLOUTREFCLK_OUT(后文的2---GMII時鍾)
后兩個是200M系統時鍾用來控制gtx_gt_usrclk_source.v文件生成TXUSRCLK和TXUSRCLK2(后文的1---系統時鍾)
我們使用的開發板為FPGA:XC7K325T-2FFG900
這個板子的時鍾資源有四個
1.系統時鍾
XC7K325具有16個GTX的通道,按照bank進行划分,一個bank中有4個獨立的GTX通道,每個bank (Quad)擁有兩個參考時鍾Pin,也可以從上下兩個Quad中獲得參考時鍾。(以bank117舉例,其可用時鍾為MGTREFCLK0--SGMII時鍾,MGTREFCLK1--SMA時鍾,還可以時鍾上下bank116\118的時鍾,116的成為南向時鍾,118成為北向時鍾)
XC7K325的GTX時鍾如下所示,
紅色方框部分是兩個差分參考時鍾輸入,每個外部參考時鍾的輸入必須經過IBUFDS_GTE2源語之后才能使用。綠色方框是來自其他Quad的參考時鍾輸入,7系列FPGA支持使用相鄰(南北方向)Quad的參考時鍾作為當前Quad的參考時鍾,多路參考時鍾源經過一個選擇器之后,分兩路進入QPLL和CPLL,
路參考時鍾源如何經過一個選擇器進入CPLL和QPLL呢?主要利用一個多路選擇器,QPLLREFCLKSEL,如3b'001為選擇GEREFCLK0進入QPLL
CPLL同理不做介紹
QPLL和CPLL的區別,在於兩者支持的線速率不同,對於CPLL來說,支持的線速率位1.6GHz到3.3GHZ之間,而對於QPLL來說,GTX支持的線速率分兩檔,Lower Baud支持5.93GHz~8.0GHz,Upper Baud支持9.8GHz~12.5GHz
輸入信號為125mhz,但是QPLL支持輸出的線速率為12.5GHZ,那么信號的頻率是如何改變的呢?信號通過多路選擇器,經過分頻器M和倍頻器N進行倍頻。然后根據官網手冊的計算公式得到相關的線速度。表2-3說明了如何通過代碼控制M\N和D。
這樣,我們的時鍾就從GMII那個固定的時鍾,擴展到了支持的線速率,這個線速率如何進入TX和RX端呢?主要通過TXSYSCLKSEL來進行選擇,為1時,進入QPLL。為0時,進入CPLL,如下圖所示。這樣時鍾基本配置的原理就說清楚了!
GTX發射端的各個模塊如下圖所示
①
用戶數據的輸入接口
②
PCIe
物理層接口,如果使能了
PCIE
接口,則該通道是
PCIE
的數據通道。
③
GTX
除了支持
8B / 10B
編碼外還支持
64B / 66B
和
64B / 67B
編碼方式,以此來提高有效數據的傳輸效率,支持這些通過對該模塊的配置實現。
④
產生偽隨機序列,用於高速串行通信通道傳輸的誤碼率測試
⑤
8B/10B
編碼
⑥
TX
相位插值器控制器模塊,對
TX PMA
中的數據進行微調。
⑦
為了保證數據傳輸速率一致,
XCLK
必須和
TXUSERCLK
時鍾的速率匹配,並且要解決
2
個時鍾域之間的相位差異。
⑧
串口硬盤
⑨
提供
PCIE
的喚醒功能
⑩
從
PSC
子層輸出的編碼數據,在發送端的串行化處理之前進行極性翻轉(為了兼容不同板卡間極性的不同或是
PCB
搞錯的了情況。)
⑪
並行輸入串行輸出,實現數據的串並轉換功能
⑫
發器
TX
驅動器是高速電流模式差分輸出緩沖器
⑬
這個主要是當
GTX
作為
PCIE
或
SATA
接口時所需要的功能
⑭
CLK:
用戶接口的數據輸入到串行數據的輸出要跨四個時鍾域
⑮
MUX:
多路選擇器
介紹了模塊的作用后,還需要了解GTX發射端的時鍾,才可以了解他的工作方式。
①
其中紅框部分和黃底部分的內容是我們需要重點了解的地方,圖中的
MGTREFCLK
是前面提到的
GTX
的參考時鍾,經過一個
IBUFDS_GTE2
源語之后進入
GTX
,用以驅動
CPLL
或者
QPLL
。對於
TX PMA
來說,主要實現的功能是並串轉換,其並串轉換的時鍾可以由
CPLL
提供,也可以由
QPLL
提供,由
TXSYSCLKSEL
選擇,
TX PMA
子層里面有三個紅色方框部分是串行和並行時鍾分頻器,作用是產生並行數據的驅動時鍾。
②
D
分頻器主要用於將
PLL
的輸出分頻,以支持更低的線速率。
③
÷2/÷4
這個選項由
TX_INT_DATAWIDTH
決定,如果
TX_INT_DATAWIDTH
為“
0”
,則選擇
÷2
,反之選擇
÷4
。
④
對於
÷4/÷5
,則由
TX_DATA_WIDTH
決定,如果是位寬是
16/32/64
,則選擇
÷4
,如果位寬是
20/40/80
,則選擇
÷5
。
然后紅框的1是通過QPLL或者CPLL的時鍾輸出,由圖所知,分別負責PISO的時鍾。和GTX的發射域時鍾,紅框2為具體控制發射域時鍾的數據方法。
數據域時鍾又是什么呢?我們回到剛剛的圖。框框所示。
根據這個公式還有我們上面計算的線速度,我們可以計算出TXUSERCLK的時鍾
根據這個表格,我們可以計算出
TXUSERCLK2的時鍾。具體的控制方式如下圖,通過TXOUTCLK和位寬來控制這兩個時鍾的速度
①
模擬前端
②
OOB
信號
③
均衡器
④
CDR
時鍾數據恢復
⑤
串並行轉換
⑥
極性翻轉
⑦
偽隨機序列碼檢查其
⑧
字節、字的對齊功能
⑨
8/10bit
解碼
⑩
接收彈性緩沖區
⑪
變速器
⑫
用戶數據的輸入接口
具體各個模塊的功能介紹如下:
OOB信號:帶外信號,為了發送這些數據,協議一般不使用與普通數據相同的通道,而是使用另外的通道。
DFE均衡器:RX信號從AFE(模擬前端)進來之后,首先經過RX均衡器,均衡器的主要作用是用於補償信號在信道傳輸過程中的高頻損失,因為信道是帶寬受限的,所以信號經過它必將造成衰減甚至遭到破壞。RX接收端的均衡器有兩種,分別是LPM和DFE,兩者功耗和性能有所不同,其中LPM功耗較低,DFE能提供更精確的濾波器參數,從而可以更好的補償傳輸信道損失,因此性能更好。
RX CDR:RX的時鍾數據恢復電路是圖1的綠色圓圈部分,因為GTX傳輸不帶隨路時鍾,因此在接收端必須自己做時鍾恢復和數據恢復,時鍾數據恢復電路如圖所示:
具體過程如圖2所示,首先外部數據進來之后經過均衡器,緊接着均衡器出來的數據就進入時鍾數據恢復電路。GTX使用相位旋轉CDR結構,從DFE進來的數據分別被邊緣采樣器和數據采樣器捕獲,然后CDR狀態機根據兩者決定數據流的相位並反饋控制相位內插器(PI),當數據采樣器的位置位於眼圖中央的時候邊緣采樣器鎖定到數據流的傳輸域。其中CPLL或者QPLL為相位內插器提供基礎時鍾,使CDR狀態機能很好進行相位控制。
GTP收發器接收器包括一個內置的PRBS檢查器:可以將此檢查器設置為檢查四種行業標准PRBS模式之一。檢查器是自同步的,並在K碼對齊或解碼之前處理傳入的數據。此功能可用於測試通道的信號完整性。
GTX RX端接收的串行數據在進行解串(並行化)之前,需要進行特征邊界對齊,使得並行數據得到正確的恢復。GTX進行對齊操作的方式是通過檢測K碼實現的。RX接收器從輸入的串行數據流中搜索comma,若RX接收器檢測到K碼則將K碼移動到字節邊界,使得接收端接收的並行數據與發送端發送的數據一致。為實現該功能,
8/10bit的解碼不做介紹
接收彈性緩沖區:GTX收發器RX數據通路的PCS部分有兩個內部並行時鍾域:PMA並行時鍾域(XCLK)和RXUSRCLK域。要保證數據的正確接收,不僅要求速率一致,也要解決兩個時鍾域之間的相位差異。
變速器是處理64B / 66B編的
FPGA RX接口與TX端類似
綜上,信號回到了數據輸入輸出接口,可以繼續從發送端發射數據
PS關於時鍾域的問題
RX接收端的時鍾結構和TX發送端的很類似,如圖所示,圖中紅色方框的CDR部分是和TX端最大的區別。