LabVIEW FPGA PCIe開發(fā)講解-7.5節(jié):修改底層XDC約束文件以適配第三方的FPGA PCIe硬件

? ? ? ??本節(jié)我們重點講解一下一個非常重要的問題:那就是如果用戶自己做的板子沒有參考黑金AX7103原理圖,或者網(wǎng)上買了其他家成熟的PCIe FPGA硬件,那么用戶需要注意哪些地方才能讓我們封裝的LabVIEW FPGA PCIe Socket CLIP完美適配呢?
?????? ?不知道大家還記不記得我們曾在第五章里面,告訴大家如何修改FPGA引腳來適配自己板子上的晶振時鐘,讓FPGA能夠運(yùn)行起來;同理,PCIe也有幾個非常重要的引腳可以在xdc頂層約束文件里面修改。編譯的時候會自動覆蓋底層網(wǎng)表文件里面的引腳定義。這一點我們比黑金和米聯(lián)客以及大多數(shù)FPGA開發(fā)板廠商做的好,因為他們基本上不會在頂層xdc里面寫上相對路徑的PCIe Lane引腳定義。
?????? ?首先,找到我們需要修改的FPGA終端模板文件里面的xdc約束文件,比如本書配套的ARTIX7開發(fā)板AX7103,默認(rèn)的路徑如圖7-49所示:
C:\Program Files (x86)\National Instruments\LabVIEW 2015\Targets\NI\FPGA\NiAdept
? ??


? ? ? ? 然后,右擊通過notepad++打開這個xdc約束文件,找到PCIe引腳定義的地方,如圖7-51所示。

? ? ? ? 因為很多7系列FPGA家族芯片內(nèi)部具備多個不同BANK的PCIe引腳,特別是Kintex7和Virtex7系列,所以用戶需要根據(jù)板子實際的原理圖來修改這個xdc頂層文件。以黑金AX7103開發(fā)板舉例說明,先打開對應(yīng)底板原理圖,找到PCIe相關(guān)針腳定義,如圖7-52所示。這些引腳其實可以分成3類:PCIe總線復(fù)位引腳;PCIe總線差分時鐘輸入引腳;PCIe總線不同位寬的差分?jǐn)?shù)據(jù)引腳。這3類引腳在前面圖7-51里面都定義過了,如果用戶自己畫的板子或者網(wǎng)上買的其他家的板子引腳定義不一樣,那么照葫蘆畫瓢對應(yīng)修改一下就可以了。

? ? ? ? 然后,打開AX7103開發(fā)板上插著的核心板AC7100原理圖,找到PCIe復(fù)位引腳,就是J20,如圖7-53所示。接著需要尋找一下PCIe的差分時鐘引腳,這個引腳非常重要,如果找不到或者設(shè)置不對,那么PCIe總線肯定初始化不了,在核心板原理圖上可以看到有兩個MGT_CLK信號,但是實際接到PCIe插槽的是MGT_CLK1,也就是F10,如圖7-54所示。


? ? ? ? 但是細(xì)心的用戶可能發(fā)現(xiàn)了,黑金的AC7100核心板在畫板子布局布線的時候,將PCIe X4模式下的數(shù)據(jù)收發(fā)差分對引腳0和1弄反了,2和3是對的,如圖7-55所示。這個細(xì)節(jié)導(dǎo)致無數(shù)用戶付出了慘痛代價。很多用傳統(tǒng)Verilog開發(fā)FPGA的用戶,看原理圖不仔細(xì),或者說黑金太隨意了,為了自己的布局方便,把0跟1故意調(diào)換了一下,那么在Vivado里面默認(rèn)的PCIe引腳就不對了,必須要人為調(diào)整才行。

? ? ? ? 為了方便我們廣大LabVIEW FPGA用戶開發(fā),我們特地在頂層xdc里面將PCIe X4全部引腳定義拉出來,用戶只要自己根據(jù)實際情況修改就行,而無需在網(wǎng)表里面定義,簡化了大家的編程,也避免了一些不必要的錯誤。希望這一點能夠引起開發(fā)者的注意?。?!重要的事情說三遍,0跟1互換了,所以引腳定義也要變,如圖7-56所示。

? ? ? ? 最后我來再來看看黑金的Kintex7開發(fā)板AX7325上面的PCIe引腳定義約束文件是如何編寫的,如圖7-57所示。K7開發(fā)板上默認(rèn)是PCIe X8接口,因為X8向下兼容X4模式,所以如果我們要把這個X8改成X4模式,需要注釋掉一些Lane,同時還需要根據(jù)實際原理圖選擇正確的引腳定義,如圖7-58所示。需要注意的是,K7芯片有兩個完全獨立的PCIe X4,或者說是一個PCIe X8,因此,如果要設(shè)置成X4模式,需要根據(jù)原理圖正確選擇。

