FPGA內嵌收發器相當於以太網中的PHY芯片,但更靈活更高效,線速率也在隨着FPGA芯片的發展升級。本文對7系列FPGA內部高速收發器GTP IP核的配置和使用做些簡單的總結,以備后續回顧重用。本文是我在讀ug482 pg168 官方文檔和一些網絡資源后的一些個人見解,希望對有需要的朋友有所幫助。我們來逐頁分析下IP核配置先導中內容:
1 GT Selection:
我用的是Atrix-7系列FPGA芯片,只能使用速率較低的GTP 收發器,所以類型無法選擇。GTP收發器在我這個芯片中最高線速率可達6.6Gbps,具體最大數值會根據器件速度等級和封裝有所不同,讀者可自行查閱Data Sheet。很多Xilinx IP核都有Shared Logic,我理解是一些重用的部分,當多個地方需要用到這些資源時,將其放置在example design中可以節約硬件資源。
2 Line Rate,RefClk Selection
這一頁比較重要。高速收發器支持多種標准協議,可以選擇一個標准協議,這樣后續的選項均已配置好了,然后根據自己的需求改動。此處選擇Aurora 8b10b single lane 4byte。收發器發送和接收通道相互獨立,可以選擇不同的線速率和編碼格式,此處均選擇一個常見的較低速率3.125Gbps用於功能驗證,參考時鍾為125M。注意參考時鍾為收發器輸入時鍾,頻率必須與開發板上為GTP提供時鍾的晶振一致。官方文檔中關於外部參考時鍾使用示意圖如下:
GTP有兩個參考時鍾輸入端口,經差分-單端轉換后通過兩個PLL產生收發器發送和接收時鍾。若TX和RX線速率一致使用同一個PLL產生時鍾,否則需要使用兩個不同的PLL。開發板中差分晶振連接GTPREFCLK0,且收發速率相同,故PLL Selection TX和RX均選擇PLL0,TX Clock Source選擇REFCLK0。這里我使用到兩個收發器,根據開發板原理圖和數據手冊選擇GTP_X0Y4和GTP_X0Y5.最后使能收發器內部的PRBS生成器和檢測器,便於測試了鏈路性能。
3 Encoding and Clocking
GTP收發器內部處理帶寬只有2byte,而GTX等速率更高的收發器是4byte,此處外部數據接口位寬選擇32bit確保后期收發器使用部分的經驗也適用於GTX等收發器。編碼方式采樣8B/10B編碼,這是個比較重要的概念。這一編碼方式最主要的目的是“直流平衡”,即根據特定的編碼表實現數據傳輸過程中比特“0”和比特“1”的數量基本一致,且減少連0和連1的情況。編碼后的數據流具有較多的跳變,有助於接收端時鍾數據恢復(CDR)。DRP/System Clock Frequency是動態重配置或系統工作時鍾,通過DRP可以讓設計者根據所選線速率和定義的協議實時調整收發器參數,本人沒有用到,新手就不要碰了。系統時鍾選擇100MHz,可通過外部PLL IP核產生。
第二個重要的部分就是Synchronization and Clocking。查看ug482相關部分:
發送通道有兩個並行時鍾域:XCLK和TXUSRCLK。根據文檔說明要保證數據正確傳輸,必須使用TX Buffer或者TX Phase Alignment。缺省情況下使用TX Buffer較為穩定且簡單,但相比后者延遲較高。簡單應用中使用Buffer即可,因此本例中TX Buffer和RX Buffer均選中。
TXUSERCLK的時鍾源只能是由參考時鍾驅動的TXOUTCLK,而RXUSERCLK的時鍾源選擇根據具體情況而定:
總之就是,當使用同一個晶振作為發送器和接收器參考時鍾源時,TXOUTCLK可以驅動RXUSRCLK;當使用不同晶振時,若使能clock correction才可以用TXOUTCLK驅動RXUSRCLK,否則要使用RXOUTCLK驅動。這里保持默認均使用TXOUTCLK驅動TXUSRCLK和RXUSRCLK。
4 Comma Alignment and Equalization
這里要引入comma碼的概念。8B/10B編碼表中有12個控制字符,以大寫字母K開頭,用於一些控制功能。K碼中的comma碼用於接收端時鍾校准和數據對齊,K28.5(對應用戶數據為16'hbc)最為常見。因為數據在鏈路中以串行方式傳輸,所以接收端必須對其進行串並轉換。在這一過程中,由於無法直接找到串行比特流中的每個數據的最高位或最低位比特,即使已知並行數據位寬也不能順利轉換成與發送端一致的並行數據。看下user guide中示意圖你就明白了:
下邊的RX Equalization是收發器自帶的接收均衡器,用來補償由於物理信道中的高頻衰減引起的信號損傷,可以通過DRP動態調整,保持默認。
5 PCIE,SATA,PRBS
這一頁的功能就比較高級了,說實話我不會。有需要用到PCIE的朋友可以關注下,這個雖然比較復雜,但找工作還是很有優勢的,很多招聘要求中都有寫!此處只把最下邊的PRBS相關端口選擇上,便於測試用途。
6 CB and CC Sequence
Xilinx收發器IP核支持通道綁定,將多個收發器通道“綁定”成一個速率更高的傳輸通道,利用FIFO消除其間的延時不確定性。Clock correction是最后一個重要的點。先來看看RX通道的結構和彈性緩存概念。
接收通道中同樣有兩個時鍾域:從CDR恢復出的XCLK和接收通道工作時鍾RXUSRCLK。RX通道使用RX Elastic Buffer來橋接兩時鍾域,但由於兩者細微的差異會使緩存變空或溢出。為此引入時鍾矯正,在發送端周期性發送一些特殊字符,接收端在彈性緩存快滿時刪除這些字符,快空時復制這些字符從而保證緩存內數據維持動態平衡的狀態。
本例只使用一個數據通道,此頁保持默認配置,不做修改。
7 Summary
只想說一句:終於結束了!這是我見過最麻煩的IP核,沒有之一!看下總結頁,USRCLK的時鍾頻率是USRCLK2的2倍,這是因為收發器內部通道數據位寬僅是外部接口位寬的二分之一,因此頻率必須增大一倍才能保證數據來得及處理。可以點OK了。本文對GTP IP核的配置做了簡單分析和總結,僅適用於新手。本人也在學習中,有不妥之處請在評論中指教。