之前用serdes一直都是跑的比較低速的應用,3.125Gbps,按照官方文檔一步一步來都沒出過什么問題,這次想驗證一下K7系列GTX最高線速8Gbps,看看xilinx的FPGA是不是如官方文檔所說。
GTX速度到底可以跑到多少
關于器件速度的問題首先找到 ds182->Kintex-7 FPGAs Data Sheet:DC and AC Switching Characteristics,可以自己對應的器件去找,不過這個在設計電路板器件選型的時候就應該考慮到,除非是買的開發(fā)部學習用。這里面包括所有的FPGA各個器件能跑到的最高頻率和器件延時,建立時間,保持時間等,對高速設計有很大的參考價值。
找到GTX Transceiver Switching Characteristics
可以看到,雖然K7系列GTX最高可以跑到12.5Gbps,但這跟速度等級和封裝都有關系,是在-3的速度等級,F(xiàn)F封裝下才有的最高速度12.5Gbps。而現(xiàn)在手頭的芯片型號是K7480TFFG901-1,所以最高支持8.0Gbps。其實這在配置IP核的時候就會發(fā)現(xiàn)了,線速范圍是(0.5-8.0)。所以IP核都是嚴格和工程的器件相關聯(lián)的,這點Vivado越做越好了。
一步一步配置IP核
下面一步步配置IP核,可以作為初學者參考。(第一次用的話,會被生成的一大堆文件和巨多的IO口嚇到的。)包括怎么查找手冊和原理圖,走一遍流程,發(fā)現(xiàn)其實xilinx的IP核都是一個套路。
1. 首先在IP核搜索GT,選擇7 Series FPGAs TransceiversWizard,
沒得選的,取個名字。順便提一下,下面的shared logic選項,最好選include shared logic in example design。在有些特殊資源需要共享時,曾經(jīng)遇到過這里的問題。當然不是GTX模塊,是以太網(wǎng)的RGMII的模塊,其中的IDELAY要用到IODELAY_CTRL,一個IOB就一個,同一個IOB其它地方要用到的時候必須選下面一個選項。所以最好都選下面一個,沒毛病。
2. 接下來就比較重要了
首先是協(xié)議,最簡單的strat from cratch,就是沒有協(xié)議。然后是線速,可以看到范圍是(0.5-8.0)。參考時鐘,這個可以根據(jù)需要選個合適的。軟件都根據(jù)你的線速把參考時鐘的可選項計算好了。接收端同樣設置,當然可以不一樣的。這是全雙工,收發(fā)鏈路沒有什么關系,也可以關掉其中一個Tx off 或Rx off。然后是PLL選擇,到底選哪個呢?我們回到剛開始提到的ds182,同樣一個表格下部分
其實線速決定了沒得選,已經(jīng)變成灰色了。
然后是比較重要的,選擇用哪個收發(fā)器,這當然不是拍腦袋決定的,跟設計有關,可以查找原理圖。
比如說這樣的,然后去查手冊UG476-> 7 Series FPGAsGTX/GTH Transceivers 找到 Placement Information by Package如下
這樣就知道用的是X0Y8,輸入時鐘在上面的原理圖可以找到,是同一組的clk0。
最后,把vivado lab tools勾上,這樣才可以生產(chǎn)example工程可以參考。
3. 繼續(xù)
之前一直用的是8b10b,這次嘗試一下64b66b,后者本來就是高帶寬下的一個編碼協(xié)議,效率更高。為什么要用8b10b,64b66b包括后面的擾碼一句話概括就是增加頻率分量有利于CDR(時鐘數(shù)據(jù)恢復)和減少直流,兩個是不同的原因。具體的可以百度。最下面的可選端口為了簡單,全部去掉。
4.
由于沒有選擇8b10b,這一頁也沒什么可選的,依然把下面的可選端口全部去掉。
5.
好了,pcie留著下次研究,太復雜了??蛇x端口其實有的挺有用的,增加了可控性,比如說環(huán)回控制,LOOPBACK。順便說一下內(nèi)部環(huán)回有四種,
1.“000”:正常模式不環(huán)回
2.“001”:近端PCS環(huán)回
3.“010”:近端PMA環(huán)回
4.“100”:遠端PMA環(huán)回
5.“110”:遠端PCS環(huán)回)
6.接下來是通道綁定和時鐘校正
通道綁定的作用是把多個物理通道對齊,綁定成一個的邏輯通道。其實就是用FIFO消除通道間的延時不確定性。由于只有一個通道,沒有綁定可言。
7. 最后看一下確定對不對,注意收發(fā)時鐘是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]
可以發(fā)現(xiàn)直接在這兒可以改具體使用的哪個收發(fā)器。注意:在這里改的效果和上面第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核抓的是解擾碼前的數(shù)據(jù),替換成解擾碼后的數(shù)據(jù)可以更清楚的看到接收到的數(shù)據(jù)。
上板調(diào)試驗證
好了,生成bit下進去,可以用連接線接上連個serdes的一收一發(fā)換回,或者設置內(nèi)部環(huán)回,或者在兩片F(xiàn)PGA上做實驗。
可以看到error_count一直是0,說明收發(fā)正確,很穩(wěn)定。
收到的數(shù)據(jù)依次是00000fb,3020100,7060504…依次遞增,打開發(fā)送文件如下,和發(fā)送的一樣。
00000000000000fb0100
00000000030201000000
00000000070605040000
000000000b0a09080000
實驗成功證明了GTX可以跑到最高8.0Gbps。
生成的example工程可以好好研究學習一下,里面有加擾碼和解擾碼的過程,自己修改一下把解擾碼后的數(shù)據(jù)抓出來對比一下,可以很清楚的看到收到了什么數(shù)據(jù)。包括校驗模塊是怎么校驗的,還是值得一學的。
評論
查看更多