xilinx對於高速收發接口gth有專門的驗證方案ibert,FPGA的引腳按bank划分,gth類似不過是按Quad來算,每個Quad的結構如下:
一共有4組收發對。每個Qual和管腳的位置都是綁定的,所以在例化ip核時只要指定Quad的位置即可,不需要再對管腳做約束了。
以UV440為例:可以整理出對應的位置表格
BANK | lane0 | lane1 | lane2 | lane3 |
Bank229 | X0Y40 | X0Y41 | X0Y42 | X0Y43 |
Bank230 | X0Y44 | X0Y45 | X0Y46 | X0Y47 |
Bank231 | X0Y48 | X0Y49 | X0Y50 | X0Y51 |
Bank232 | X0Y52 | X0Y53 | X0Y54 | X0Y55 |
Bank219 | X0Y0 | X0Y1 | X0Y2 | X0Y3 |
Bank220 | X0Y4 | X0Y5 | X0Y6 | X0Y7 |
Bank221 | X0Y8 | X0Y9 | X0Y10 | X0Y11 |
Bank224 | X0Y20 | X0Y21 | X0Y22 | X0Y23 |
Bank225 | X0Y24 | X0Y25 | X0Y26 | X0Y27 |
Bank226 | X0Y28 | X0Y29 | X0Y30 | X0Y31 |
Bank227 | X0Y32 | X0Y33 | X0Y34 | X0Y35 |
Ibert配置介紹:
新建一個臨時Temp工程:芯片選擇
在ip Catalog搜索ibert:
根據連接進行配置GTH的選項:
選擇一個系統使用,一般選擇板卡上的一個全局時鍾即可:
生成Example:
會在指定目錄生成一個新的示例工程:
直接點生成bit即可:
板卡上電,設置對應的時鍾頻率,(此例中:參考時鍾及系統時鍾)下載bit到FPGA,
使用FPGA vivado掃描Hardware,
set xil_newLinks [list]
set xil_newLink [create_hw_sio_link -description {Link 1} [lindex [get_hw_sio_txs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/0_1_0_1/IBERT/Quad_227/MGT_X0Y32/TX] 0] [lindex [get_hw_sio_rxs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/2_1_0_1/IBERT/Quad_224/MGT_X0Y20/RX] 0] ]
lappend xil_newLinks $xil_newLink
set xil_newLink [create_hw_sio_link -description {Link 2} [lindex [get_hw_sio_txs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/0_1_0_1/IBERT/Quad_227/MGT_X0Y33/TX] 0] [lindex [get_hw_sio_rxs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/2_1_0_1/IBERT/Quad_224/MGT_X0Y21/RX] 0] ]
lappend xil_newLinks $xil_newLink
set xil_newLink [create_hw_sio_link -description {Link 3} [lindex [get_hw_sio_txs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/0_1_0_1/IBERT/Quad_227/MGT_X0Y34/TX] 0] [lindex [get_hw_sio_rxs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/2_1_0_1/IBERT/Quad_224/MGT_X0Y22/RX] 0] ]
lappend xil_newLinks $xil_newLink
set xil_newLink [create_hw_sio_link -description {Link 4} [lindex [get_hw_sio_txs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/0_1_0_1/IBERT/Quad_227/MGT_X0Y35/TX] 0] [lindex [get_hw_sio_rxs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/2_1_0_1/IBERT/Quad_224/MGT_X0Y23/RX] 0] ]
lappend xil_newLinks $xil_newLink
set xil_newLink [create_hw_sio_link -description {Link 5} [lindex [get_hw_sio_txs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/2_1_0_1/IBERT/Quad_224/MGT_X0Y20/TX] 0] [lindex [get_hw_sio_rxs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/0_1_0_1/IBERT/Quad_227/MGT_X0Y32/RX] 0] ]
lappend xil_newLinks $xil_newLink
set xil_newLink [create_hw_sio_link -description {Link 6} [lindex [get_hw_sio_txs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/2_1_0_1/IBERT/Quad_224/MGT_X0Y21/TX] 0] [lindex [get_hw_sio_rxs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/0_1_0_1/IBERT/Quad_227/MGT_X0Y33/RX] 0] ]
lappend xil_newLinks $xil_newLink
set xil_newLink [create_hw_sio_link -description {Link 7} [lindex [get_hw_sio_txs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/2_1_0_1/IBERT/Quad_224/MGT_X0Y22/TX] 0] [lindex [get_hw_sio_rxs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/0_1_0_1/IBERT/Quad_227/MGT_X0Y34/RX] 0] ]
lappend xil_newLinks $xil_newLink
set xil_newLink [create_hw_sio_link -description {Link 8} [lindex [get_hw_sio_txs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/2_1_0_1/IBERT/Quad_224/MGT_X0Y23/TX] 0] [lindex [get_hw_sio_rxs localhost:3121/xilinx_tcf/Digilent/210251AC2FD0/0_1_0_1/IBERT/Quad_227/MGT_X0Y35/RX] 0] ]
lappend xil_newLinks $xil_newLink
set xil_newLinkGroup [create_hw_sio_linkgroup -description {Link Group 0} [get_hw_sio_links $xil_newLinks]]
unset xil_newLinks
……
再手動添加link,link有時需要刷新(先切換到近端或遠端,這些是自環選項,就是tx和rx在FPGA內部已經連接在一起了,再切換到none:外部連接的方式)才能正確顯示成綠色(添加及刷新link可以在Tcl Console看到對應的腳本,這個腳本可以保存成文件,方便下次操作)。
看link時首先看PLL,PLL若沒有鎖住一般是頻率設置不對,需要檢查頻率設置,PLL鎖住后一般link都沒有問題,只要link的rx能收到數據,不管是哪個quad的哪路tx lane發送的,都會正常顯示綠色(應該是因為每個lane的偽隨機數序列都是一樣的),serdes的收發兩端是不一定需要同源時鍾的(只要數據lane對接上即可),非同源時鍾只要收發兩端的頻率精度控制在一定范圍即可,時鍾是通過CDR電路從數據中恢復出來的。
雙擊ip核,點擊Documentation->Product Guide可以看到ibert的使用說明文檔。