Serdes系列总结——Xilinx serdes IP使用(二)——10G serdes
Serdes系列總結——Xilinx serdes IP使用(二)——10G serdes
- IP核的詳細設置
- IP example的使用
- 附件
器件:Xilinx zynq 7035
版本:vivado2019.2
實現:10.1376G的serdes,一個輸入為64bit,輸出為64bit的6664B編碼的4對serdes例程,參考時鐘為153.6MHz
目的:記錄從仿真到上板調試的過程,方便回憶
IP核的詳細設置
第一個選項卡 GT Selection
第二個選項卡 GT Line Rate,RefClk Selection
設置時鐘管腳位置和serdes管腳位置。(如何根據硬件工程師給出的管腳來設置GTX的位置?結尾補充)
第三個選項卡 Encoding and Clocking
第四個選項卡 Comma Alignment and Equalization
Comma Alignment 不用設置
第五個選項卡 PCIe,SATA,PRBS
大部分不選
第六、七個選項卡沒有要選的。
最后Summary
最后,生成IP核后,鼠標放到IP核右鍵,點擊open IP example design,生成了一個example的工程
IP example的使用
因為這個IPexample里面自帶了數據發送和數據校驗的模塊,實際應用中,我們需要把需要發送的數據接口和需要接收的接口引出來,需要對這個example進行修改。
這里主要對關鍵改動點進行說明:
gtwizard_0_exdes.v中
(1)輸入輸出接口
DRP_CLK 一般為單端輸入就可以了,這里要改
TRACK_DATA_OUT 這個不需要
增加serdes收發復位的接口
增加接收和發送數據的接口,每一路收發都包括收發數據、隨路時鐘、復位
增加環回配置接口
(2)gtwizard_0_support模塊,修改如下內容,把輸入輸出數據接口引出到頂層端口
.gt0_data_valid_in (1'b1), .gt1_data_valid_in (1'b1), .gt2_data_valid_in (1'b1), .gt3_data_valid_in (1'b1),.gt0_loopback_in (i_loopback[2:0]), .gt1_loopback_in (i_loopback[5:3]), .gt2_loopback_in (i_loopback[8:6]), .gt3_loopback_in (i_loopback[11:9]),.gt0_rxdata_out .gt0_txdata_in 。。。。。。。。。。。。。。。。。。等這些都要稍微改變,這里不再花篇幅把所有的列出,直接通過對比軟件很容易看出
(3)把輸入輸出的隨路時鐘和復位引出到頂層端口
(4)注意擾碼的初始值是否和對端一致
除了上面,該例程還有一個大坑需要規避。(干貨)
gtwizard_0_GT_USRCLK_SOURCE.v文件中
添加
這里的修改尤其重要,感覺是xilinx的一個BUG,如果這里不改,仿真會沒有問題,但上板調試的時候,只要serdes0接口不接的話,其他接口就會不穩定。其中的緣由可通過代碼去理解
最后,頂層的例化為:
gtwizard_0_exdes gtwizard_0_exdes_i (.Q3_CLK0_GTREFCLK_PAD_N_IN (tx_refclk_n_r), .Q3_CLK0_GTREFCLK_PAD_P_IN (tx_refclk_p_r),.DRP_CLK_IN (drp_clk_r),.RXN_IN (rxn_in_i),.RXP_IN (rxp_in_i),.TXN_OUT (txn_out_i),.TXP_OUT (txp_out_i),.o_gtwiz_userclk_rx_usrclk2_int ( w_gtwiz_userclk_rx_usrclk2_int ),.o_gtwiz_userclk_tx_usrclk2_int ( w_gtwiz_userclk_tx_usrclk2_int ), .o_gt_rxfsmresetdone ( w_gt_rxfsmresetdone ),.o_gt_txfsmresetdone ( w_gt_txfsmresetdone ), .o_rx_header ( w_rx_header ),.o_rx_valid ( w_rx_valid ),.o_rx_data ( w_rx_data ),.i_tx_header ( w_tx_header ),.i_tx_valid ( w_tx_valid ),.i_tx_sequence ( w_tx_sequence ), .i_tx_data ( w_tx_data ),.i_soft_reset (0 ), .i_loopback (0 ) );以第一路serdes為例
w_gtwiz_userclk_tx_usrclk2_int[0]為第一路serdes發射時鐘,時鐘為158.4M
w_tx_sequence0固定為0-32的循環計數
w_tx_valid0,當w_tx_sequence0 =32時w_tx_valid0 = 0,表示當前輸入的w_tx_data0是無效的,其他時候有效,且w_tx_valid0 = 1。
接收也類似
輸入一個累加數,將sedes輸出管腳直接連入輸入管腳(仿真的時候),看接收的數據是否也是累加數。
該工程可以直接用于上板調試,直接用光口1和光口2進行光纖對接,通過ILA抓取接收的數據,也是累加數,則是正常。
該工程添加管腳和時鐘約束后可直接用于實際應用中。
附件
下載地址:
SERDES_10G.rar中
SERDES_10G
gtwizard_0_ex_yuanshi為 IP example直接生成的工程,
gtwizard_0_ex_xiugai 為在上面基礎上修改的工程。
在gtwizard_0_ex_xiugai文件夾中 找到啊 tb.tcl,修改tcl中的文件路徑后,直接可以modelsim運行(modelsim要提前配置好庫文件)
運行結果如下圖所示,即成功
寫于2021年10月16日
如需交流,QQ:172146579
總結
以上是生活随笔為你收集整理的Serdes系列总结——Xilinx serdes IP使用(二)——10G serdes的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Qt平台开发安卓应用
- 下一篇: 深度学习 如何查看 GPU使用情况