xilinx IP核配置,一步一步驗證Xilinx Serdes GTX最高8.0Gbps

原文鏈接:https://blog.csdn.net/u010161493/article/details/77658599

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。


之前用serdes一直都是跑的比較低速的應用,3.125Gbps,按照官方文檔一步一步來都沒出過什麼問題,這次想驗證一下K7系列GTX最高線速8Gbps,看看xilinx的FPGA是不是如官方文檔所說。

GTX速度到底可以跑到多少
關於器件速度的問題首先找到 ds182->Kintex-7 FPGAs Data Sheet:DC and AC Switching Characteristics,可以自己對應的器件去找,不過這個在設計電路板器件選型的時候就應該考慮到,除非是買的開發部學習用。這裏麪包括所有的FPGA各個器件能跑到的最高頻率和器件延時,建立時間,保持時間等,對高速設計有很大的參考價值。
找到GTX Transceiver Switching Characteristics

這裏寫圖片描述
可以看到,雖然K7系列GTX最高可以跑到12.5Gbps,但這跟速度等級和封裝都有關係,是在-3的速度等級,FF封裝下才有的最高速度12.5Gbps。而現在手頭的芯片型號是K7480TFFG901-1,所以最高支持8.0Gbps。其實這在配置IP核的時候就會發現了,線速範圍是(0.5-8.0)。所以IP核都是嚴格和工程的器件相關聯的,這點Vivado越做越好了。

一步一步配置IP核
下面一步步配置IP核,可以作爲初學者參考。(第一次用的話,會被生成的一大堆文件和巨多的IO口嚇到的。)包括怎麼查找手冊和原理圖,走一遍流程,發現其實xilinx的IP核都是一個套路。

1
首先在IP核搜索GT,選擇7 Series FPGAs TransceiversWizard,

這裏寫圖片描述
沒得選的,取個名字。順便提一下,下面的shared logic選項,最好選include shared logic in example design。在有些特殊資源需要共享時,曾經遇到過這裏的問題。當然不是GTX模塊,是以太網的RGMII的模塊,其中的IDELAY要用到IODELAY_CTRL,一個IOB就一個,同一個IOB其它地方要用到的時候必須選下面一個選項。所以最好都選下面一個,沒毛病。

2
接下來就比較重要了

這裏寫圖片描述

首先是協議,最簡單的strat from cratch,就是沒有協議。然後是線速,可以看到範圍是(0.5-8.0)。參考時鐘,這個可以根據需要選個合適的。軟件都根據你的線速把參考時鐘的可選項計算好了。接收端同樣設置,當然可以不一樣的。這是全雙工,收發鏈路沒有什麼關係,也可以關掉其中一個Tx off 或Rx off。然後是PLL選擇,到底選哪個呢?我們回到剛開始提到的ds182,同樣一個表格下部分

這裏寫圖片描述

其實線速決定了沒得選,已經變成灰色了。
然後是比較重要的,選擇用哪個收發器,這當然不是拍腦袋決定的,跟設計有關,可以查找原理圖。

這裏寫圖片描述

比如說這樣的,然後去查手冊UG476-> 7 Series FPGAsGTX/GTH Transceivers 找到 Placement Information by Package如下

這裏寫圖片描述

這樣就知道用的是X0Y8,輸入時鐘在上面的原理圖可以找到,是同一組的clk0。
最後,把vivado lab tools勾上,這樣纔可以生產example工程可以參考。

3
繼續

這裏寫圖片描述

之前一直用的是8b10b,這次嘗試一下64b66b,後者本來就是高帶寬下的一個編碼協議,效率更高。爲什麼要用8b10b,64b66b包括後面的擾碼一句話概括就是增加頻率分量有利於CDR(時鐘數據恢復)和減少直流,兩個是不同的原因。具體的可以百度。最下面的可選端口爲了簡單,全部去掉。

4

這裏寫圖片描述

由於沒有選擇8b10b,這一頁也沒什麼可選的,依然把下面的可選端口全部去掉。

5

這裏寫圖片描述

好了,pcie留着下次研究,太複雜了。可選端口其實有的挺有用的,增加了可控性,比如說環回控制,LOOPBACK。順便說一下內部環回有四種,
1.“000”:正常模式不環回
2.“001”:近端PCS環回
3.“010”:近端PMA環回
4.“100”:遠端PMA環回
5.“110”:遠端PCS環回)

6
接下來是通道綁定和時鐘校正

通道綁定的作用是把多個物理通道對齊,綁定成一個的邏輯通道。其實就是用FIFO消除通道間的延時不確定性。由於只有一個通道,沒有綁定可言。

6
最後看一下確定對不對,注意收發時鐘是250M。可以算一下,8000M/32=250M。

這裏寫圖片描述
到這裏完成一大半了。

利用IP核生成example工程
接下來生成example工程

這裏寫圖片描述

把剛剛配置的IP右鍵,如圖選擇。
生成好後稍微改一下約束文件XDC,把DRC時鐘的輸入時鐘約束一下。其他的不用管。

## LOC constrain for DRP_CLK_P/N 
set_property LOC G27 [get_ports  DRP_CLK_IN_P]
set_property LOC F27 [get_ports  DRP_CLK_IN_N]
set_property IOSTANDARD LVDS_25 [get_ports  DRP_CLK_IN_P]
set_property IOSTANDARD LVDS_25 [get_ports  DRP_CLK_IN_N]

可以發現直接在這兒可以改具體使用的哪個收發器。注意:在這裏改的效果和上面第2步裏面設置的效果一樣。

set_property LOC GTXE2_CHANNEL_X0Y4 [get_cells gtx_8g_support_i/gtx_8g_init_i/inst/gtx_8g_i/gt0_gtx_8g_i/gtxe2_i]

要改的話,當然同時GTX的時鐘也得改

set_property LOC AD5 [get_ports  Q1_CLK0_GTREFCLK_PAD_N_IN ] 
set_property LOC AD6 [get_ports  Q1_CLK0_GTREFCLK_PAD_P_IN ]
再修改一個地方,原來的ILA核抓的是解擾碼前的數據,替換成解擾碼後的數據可以更清楚的看到接收到的數據。

上板調試驗證
好了,生成bit下進去,可以用連接線接上連個serdes的一收一發換回,或者設置內部環回,或者在兩片FPGA上做實驗。

這裏寫圖片描述
可以看到error_count一直是0,說明收發正確,很穩定。
收到的數據依次是00000fb,3020100,7060504…依次遞增,打開發送文件如下,和發送的一樣。

00000000000000fb0100
00000000030201000000
00000000070605040000
000000000b0a09080000

實驗成功證明了GTX可以跑到最高8.0Gbps。
生成的example工程可以好好研究學習一下,裏面有加擾碼和解擾碼的過程,自己修改一下把解擾碼後的數據抓出來對比一下,可以很清楚的看到收到了什麼數據。包括校驗模塊是怎麼校驗的,還是值得一學的。
 

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