最近弄PCIE,遇到一個問題,以前我們總認為:Xilinx的PCIE core的管腳是固定的,即指定了PCIE core的位置,對應的管腳也就指定了,真實情況是怎么樣的呢?
背景說明
硬件在分配PCIE的管腳的時候,沒有分配到xilinx推薦的對應的管腳上,如何處理呢?是否只能改板?
背景介紹
使用7系列的xilinx FPGA,需要用到PCIE core,計劃是使用xilinx提供的硬core,該系列的FPGA中只有一個硬core,所以沒得選擇,我們使用的是PCIE_X0Y0這個硬core,如下圖所示:
當PCIE的位置確定以后,PCIE對應的serdes位置也就“固定”了,有三種方式可以來查看這個“固定”位置。
第一、在PG054:7 Series FPGAs Integrated Block for PCI Express v3.2 LogiCORE IP Product Guide中,如下圖所示:我們可以看到,對于的K7系列的325T的器件,X4的recommended GT locationg是X0Y4/X0Y5/X0Y6/X0Y7
另外我們在文檔ug476:7 Series FPGAs GTX/GTH Transceivers中可以看到X0Y4/X0Y5/X0Y6/X0Y7對應的管腳如下圖所示:
第二種方式,直接綜合PCIE core,綜合后,查看綜合結果,如下圖所示,我們可以看到,在不對PCIE core做任何約束的情況下,該PCIE默認的管腳也是在channel X0Y4-——X0Y7所在Quad上。其pin的約束和上圖一致。
還有第三種方式,通過xilinx提供的example design來確定對應的管腳約束,通過查看example design的約束,我們發現關于位置的約束就只有如下一行,它約束的差分時鐘雙端轉單端的refclk_ibuf,位置為IBUFDS_GTE2_X0Y3,這個剛好也位于MGT_BANG_116。
set_property LOC IBUFDS_GTE2_X0Y3 [get_cells refclk_ibuf]
結論:K7系列FPGA對于X4的PCIE,其默認的約束就是在MGT_BANG_116,
問題
硬件在管腳分配的時候,沒有按照Xilinx默認的管腳分配原則分配在MGT_BANG_116,而是分配到了MGT_BANG_118上(第一張圖中,右邊的4個gtx quad從上到下分別是118/117/116和115)。
解決方案
pcie core和所用的gt是分開的,我們可以通過約束channel的位置來改變所使用的channel,從而改變pcie的管腳。約束如下所示,只需要綁定channel和pcie對應的lane即可,通過約束發現imp階段工程是可以通過的。
set_property LOC GTXE2_CHANNEL_X0Y12 [get_cells {***/pcie_core/pcie_7x_1_i/inst/gt_top_i/pipe_wrapper_i/pipe_lane[0].gt_wrapper_i/gtx_channel.gtxe2_channel_i}]
測試結果
通過實際上板測試,pcie core能正常link up,進行業務測試收發數據也正常,不過這里也有一個風險,通過device視圖我們可以看到,MGT_BANG_118所在的quad是離pcie core最遠的quad,尤其是兩者之間資源比較多的時候,布線會比較多,這必然導致時序風險。
結論
1、pcie的管腳有xilinx推薦的最佳約束位置,分配管腳的時候應該嚴格按照推薦的規則來分配;
2、如果硬件把管腳弄錯了,可以通過約束來修改pcie core的默認管腳,但是資源緊張的時候可能有時序風險。
-
FPGA
+關注
關注
1626文章
21678瀏覽量
602022 -
Xilinx
+關注
關注
71文章
2164瀏覽量
121039 -
PCIe
+關注
關注
15文章
1227瀏覽量
82452 -
管腳
+關注
關注
1文章
226瀏覽量
32002
發布評論請先 登錄
相關推薦
評論