XILINX FPGA 高速收發器 GTP設計初探

XILINX 高速收發器GTP之配置

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
這裏寫圖片描述
  看下總結頁,USRCLK的時鐘頻率是USRCLK2的2倍,這是因爲收發器內部通道數據位寬僅是外部接口位寬的二分之一,因此頻率必須增大一倍才能保證數據來得及處理。可以點OK了。本文對GTP IP核的配置做了簡單分析和總結,僅適用於新手。本人也在學習中,有不妥之處請在評論中指教。

XILINX 高速收發器GTP之運用
  
生成IP核後打開example design,先看看工程中包含的文件結構。

這裏寫圖片描述
  頂層文件下包含了gtp ip核系統頂層文件、frame_gen以及frame_check三類模塊。frame_gen和frame_check用於測試過程中的數據包產生和接收檢測(由於我在配置IP核時使能了兩個通道,因此工程中有兩組frame_gen和frame_check模塊),gen模塊讀發送樣式,check模塊則將接收到數據與本地存儲樣式對比,從而判斷數據傳輸是否正確。下面截取一段gen模塊內代碼:
  這裏寫圖片描述
  發現gen模塊是通過系統函數readmemgtrominittx.datromrom readmem和initial是不可綜合語句,但其功能與.mif文件初始化ROM IP核是類似的。check模塊與gen模塊類似,但有一點比較值得借鑑。
    這裏寫圖片描述
  根據上邊的註釋可以看出,這個IP核在使用32bit用戶數據位寬時,會發生錯位現象。因此發送數據時所有comma碼要放在32bit數據四個字節的同一字節中,最常見的是均放在最低字節,這樣接收端可以根據控制字指示信號爲1的位置找出錯位情況,進而讀數據進行重新對齊。比如當rxctrl == 4’b1000,則錯誤情況和重對齊方式如下:
      這裏寫圖片描述
  d0’代表上一個數據的最低字節部分。其他錯位情況的重對齊方式同理,現在看下check模塊中根據sel信號對接收數據重對齊的邏輯。
      這裏寫圖片描述
  可以看出重對齊方式與剛纔講的方法一致。因此當測試完畢後,去除frame_gen和frame_check模塊並將gt數據端口開放到頂層後,接收端用戶側也要有類似的邏輯防止數據錯位。

  再來看下頂層文件中關於原語的使用:
  IBUFDS是差分信號輸入緩衝器,用來將差分信號變爲單端信號。而BUFG是全局緩衝,其輸出到達FPGA內部CLB IOB RAM的時鐘延遲和抖動是最小的,從而使系統工作穩定。

  最後,爲保證最基本的通信功能,還需做三件事:
1. 去除gen和check邏輯塊,並將用戶數據端口開放到工程頂層;
2. 接收端用戶側例化數據重對齊模塊保證接收正確;
3. 例化PLL產生100MHz時鐘信號作爲GTP子系統工作時鐘;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章