1、前言
PCIE(PCI Express)采用了目前業(yè)內(nèi)流行的點(diǎn)對(duì)點(diǎn)串行連接,比起 PCI 以及更早期的計(jì)算機(jī)總線的共享并行架構(gòu),每個(gè)設(shè)備都有自己的專用連接,不需要向整個(gè)總線請(qǐng)求帶寬,而且可以把數(shù)據(jù)傳輸率提高到一個(gè)很高的頻率,達(dá)到 PCI 所不能提供的高帶寬,是目前各行業(yè)高速接口的優(yōu)先選擇方向,具有很高的實(shí)用價(jià)值和學(xué)習(xí)價(jià)值;
本設(shè)計(jì)使用Xilinx官方的XDMA方案搭建基于Xilinx系列FPGA的PCIE3.0通信平臺(tái),使用XDMA的中斷模式與QT上位機(jī)通訊,即QT上位機(jī)通過(guò)軟件中斷的方式實(shí)現(xiàn)與FPGA的數(shù)據(jù)交互;本設(shè)計(jì)的目的是驗(yàn)證AD數(shù)據(jù)在XDMA中斷模式下的傳輸可行性,用示波器產(chǎn)生一個(gè)正弦波之類(lèi)的AD數(shù)據(jù)源,通過(guò)數(shù)據(jù)線將示波器數(shù)據(jù)連接FPGA開(kāi)發(fā)板的AD7606芯片,AD7606進(jìn)行模數(shù)轉(zhuǎn)換,輸出串行的數(shù)字信號(hào)給到FPGA,F(xiàn)PGA進(jìn)行數(shù)據(jù)才采集和串并轉(zhuǎn)換,F(xiàn)PGA再把AD數(shù)據(jù)送入DDR4或者BRAM之類(lèi)的存儲(chǔ)介質(zhì),并產(chǎn)生中斷通知XDMA去存儲(chǔ)介質(zhì)讀取緩存的AD數(shù)據(jù),XDMA再把AD數(shù)據(jù)通過(guò)PCIE總線發(fā)送給電腦主機(jī),電腦主機(jī)運(yùn)行QT上位機(jī)軟件,實(shí)時(shí)讀取PCIE過(guò)來(lái)的AD數(shù)據(jù)并將AD數(shù)據(jù)通過(guò)波形方式顯示出來(lái);
本設(shè)計(jì)提供2套vivado工程源碼,一套工程的存儲(chǔ)介質(zhì)是BRAM,適合開(kāi)發(fā)板沒(méi)有DDR3或者FPGA資源夠大或者對(duì)讀寫(xiě)速度要求較高的場(chǎng)景;另一套工程的存儲(chǔ)介質(zhì)是DDR4,適合開(kāi)發(fā)板有DDR4或者FPGA資源不夠大或者對(duì)讀寫(xiě)速度要求較不高的場(chǎng)景;
本設(shè)計(jì)的關(guān)鍵在于我們編寫(xiě)了一個(gè) xdma_inter.v 的XDMA中斷模塊。該模塊用來(lái)配合驅(qū)動(dòng)處理中斷,xdma_inter.v 提供了AXI-LITE 接口,上位機(jī)通過(guò)訪問(wèn) user 空間地址讀寫(xiě) xdma_inter.v 的寄存器。該 模塊 在 user_irq_req_i 輸入的中斷位,寄存中斷位號(hào),并且輸出給 XDMA IP ,當(dāng)上位機(jī)的驅(qū)動(dòng)響應(yīng)中斷的時(shí)候,在中斷里面寫(xiě) xdma_inter.v 的寄存器,清除已經(jīng)處理的中斷。
該方案只適用于Xilinx系列FPGA,一并提供了XDMA的安裝驅(qū)動(dòng)和QT上位機(jī)源代碼,省去了使用XDMA繁瑣的驅(qū)動(dòng)尋找和上位機(jī)軟件開(kāi)發(fā)的不知所措,并以搭建好vivado工程,省去了不知道如何使用XDMA的尷尬,使得PCIE的使用變得簡(jiǎn)單易上手,而不用關(guān)心其復(fù)雜的PCIE協(xié)議;由于我的開(kāi)發(fā)板只支持PCIE X8,所以提供的代碼是PCIE X8架構(gòu),若需要PCIE X1、 X2、 X8、 X16、 X32的朋友,可自行修改本工程,也可關(guān)注我,我會(huì)實(shí)時(shí)發(fā)布新的工程。
本工程實(shí)現(xiàn)進(jìn)階應(yīng)用的PCIE通信,和QT上位機(jī)之間進(jìn)行AD數(shù)據(jù)傳輸試驗(yàn)。
本文詳細(xì)描述了基于XDMA搭建PCIE通信平臺(tái)的設(shè)計(jì)方案,工程代碼可綜合編譯上板調(diào)試,可直接項(xiàng)目移植,適用于在校學(xué)生、研究生項(xiàng)目開(kāi)發(fā),也適用于在職工程師做項(xiàng)目開(kāi)發(fā),可應(yīng)用于醫(yī)療、軍工等行業(yè)的高速接口領(lǐng)域;
提供完整的、跑通的工程源碼和技術(shù)支持;
工程源碼和技術(shù)支持的獲取方式放在了文章末尾,請(qǐng)耐心看到最后;
免責(zé)聲明
本工程及其源碼即有自己寫(xiě)的一部分,也有網(wǎng)絡(luò)公開(kāi)渠道獲取的一部分(包括CSDN、Xilinx官網(wǎng)、Altera官網(wǎng)等等),若大佬們覺(jué)得有所冒犯,請(qǐng)私信批評(píng)教育;基于此,本工程及其源碼僅限于讀者或粉絲個(gè)人學(xué)習(xí)和研究,禁止用于商業(yè)用途,若由于讀者或粉絲自身原因用于商業(yè)用途所導(dǎo)致的法律問(wèn)題,與本博客及博主無(wú)關(guān),請(qǐng)謹(jǐn)慎使用。。。
2、我已有的PCIE方案
我的主頁(yè)有PCIE通信專欄,該專欄基于XDMA的輪詢模式實(shí)現(xiàn)與QT上位機(jī)的數(shù)據(jù)交互,既有基于RIFFA實(shí)現(xiàn)的PCIE方案,也有基于XDMA實(shí)現(xiàn)的PCIE方案;既有簡(jiǎn)單的數(shù)據(jù)交互、測(cè)速,也有應(yīng)用級(jí)別的圖像采集傳輸,以下是專欄地址:
點(diǎn)擊直接前往
此外,我的主頁(yè)有中斷模式的PCIE通信專欄,該專欄基于XDMA的中斷模式實(shí)現(xiàn)與QT上位機(jī)的數(shù)據(jù)交互,以下是專欄地址:點(diǎn)擊直接前往
3、PCIE理論
這部分可自行百度或csdn或知乎學(xué)習(xí)理論知識(shí),其實(shí)用了XDMA,已經(jīng)不太需要直到PCIE復(fù)雜的協(xié)議和理論了。。。
4、總體設(shè)計(jì)思路和方案
工程1,BRAM數(shù)據(jù)緩存的總體設(shè)計(jì)思路和方案如下:
工程2,DDR4數(shù)據(jù)緩存的總體設(shè)計(jì)思路和方案如下:
AD7606數(shù)據(jù)采集和緩存
用示波器產(chǎn)生一個(gè)正弦波之類(lèi)的AD數(shù)據(jù)源,通過(guò)數(shù)據(jù)線將示波器數(shù)據(jù)連接FPGA開(kāi)發(fā)板的AD7606芯片,AD7606進(jìn)行模數(shù)轉(zhuǎn)換,輸出串行的數(shù)字信號(hào)給到FPGA,本設(shè)計(jì)的FPGA硬件電路設(shè)計(jì)成了串行輸出方式,所以數(shù)據(jù)采集也是串行采集,AD7606還可以設(shè)計(jì)為并行模式,并行采集的代碼設(shè)計(jì)是不同的,我這里有串行和并行的采集程序,關(guān)于AD7606數(shù)據(jù)采集詳情,請(qǐng)參考我之前的文章:點(diǎn)擊直接前往
FDMA數(shù)據(jù)緩存:
FDMA圖像三幀緩存,經(jīng)??次椅恼碌男值芏贾溃@是我慣用的數(shù)據(jù)緩存套路,它由FDMA控制器和FDMA構(gòu)成,作用是將輸入的數(shù)據(jù)緩存到DDR3里做緩存后再讀出來(lái),這里只用到了緩存并未讀出,代碼定時(shí)產(chǎn)生中斷,并觸發(fā)AD7606數(shù)據(jù)寫(xiě)入存儲(chǔ)介質(zhì),每次緩存的數(shù)量是2048x2個(gè)數(shù)據(jù);關(guān)于FDMA的詳細(xì)設(shè)計(jì)說(shuō)明,請(qǐng)參考我之前的文章:點(diǎn)擊直接前往
XDMA簡(jiǎn)介
Xilinx 提供的 DMASubsystem for PCIExpressIP 是一個(gè)高性能,可配置的適用于 PCIE2.0,PCIE3.0 的 SG 模式 DMA,提供用戶可選擇的 AXI4 接口或者 AXI4-Stream 接口。一般情況下配置成 AXI4 接口可以加入到系統(tǒng)總線互聯(lián),適用于大數(shù)據(jù)量異步傳輸,通常情況都會(huì)使用到 DDR,AXI4-Stream 接口適用于低延遲數(shù)據(jù)流傳輸。
XDMA 是 SGDMA,并非 Block DMA,SG 模式下,主機(jī)會(huì)把要傳輸?shù)臄?shù)據(jù)組成鏈表的形式,然后將鏈表首地址通過(guò) BAR 傳送給 XDMA,XDMA 會(huì)根據(jù)鏈表結(jié)構(gòu)首地址依次完成鏈表所指定的傳輸任務(wù),XDMA框圖如下:
AXI4、AXI4-Stream,必須選擇一個(gè),用于數(shù)據(jù)傳輸AXI4-Lite Master 可選,用于實(shí)現(xiàn) PCIE BAR 地址到 AXI4-lite 寄存器地址的映射,可以用于讀寫(xiě)用戶邏輯寄存器。
AXI4-Lite Slave 可選,用來(lái)將 XDMA 內(nèi)部寄存器開(kāi)放給用戶邏輯,用戶邏輯可以通過(guò)此接口訪問(wèn) XDMA 內(nèi)部寄存器,不會(huì)映射到 BAR。
AXI4 Bypass 接口,可選,用來(lái)實(shí)現(xiàn) PCIE 直通用戶邏輯訪問(wèn),可用于低延遲數(shù)據(jù)傳輸。
XDMA中斷模式
本設(shè)計(jì)的關(guān)鍵在于我們編寫(xiě)了一個(gè) xdma_inter.v 的XDMA中斷模塊。該模塊用來(lái)配合驅(qū)動(dòng)處理中斷,xdma_inter.v 提供了AXI-LITE 接口,上位機(jī)通過(guò)訪問(wèn) user 空間地址讀寫(xiě) xdma_inter.v 的寄存器。該 模塊 在 user_irq_req_i 輸入的中斷位,寄存中斷位號(hào),并且輸出給 XDMA IP ,當(dāng)上位機(jī)的驅(qū)動(dòng)響應(yīng)中斷的時(shí)候,在中斷里面寫(xiě) xdma_inter.v 的寄存器,清除已經(jīng)處理的中斷。
另外本方案中通過(guò) AXI-BRAM 來(lái)演示用戶 user 空間的讀寫(xiě)訪問(wèn)測(cè)試。
QT上位機(jī)及其源碼
QT上位機(jī)本方案使用 VS2015 + Qt 5.12.10 完成上位機(jī)開(kāi)發(fā)軟件環(huán)境搭建,QT程序調(diào)用XDMA官方API采用中斷模式實(shí)現(xiàn)與FPGA的數(shù)據(jù)交互,本例程實(shí)現(xiàn)的是讀寫(xiě)測(cè)速,提供QT上位機(jī)軟件及其源碼,路徑如下:
QT源碼部分截圖如下:
5、vivado工程1–BRAM緩存
開(kāi)發(fā)板FPGA型號(hào):Xilinx–xcku060-ffva1156-2-i;
開(kāi)發(fā)環(huán)境:Vivado2022.2;
輸入:AD7606,串行輸出;
輸出:PCIE3.0 X8;
應(yīng)用:QT上位機(jī)波形顯示試驗(yàn);
工程BD如下:
XDMA需要設(shè)計(jì)中斷數(shù)量,配置如下:
同時(shí),XDMA中斷模塊的中斷數(shù)量也設(shè)置為4,如下:
綜合后的代碼架構(gòu)如下:
綜合編譯完成后的FPGA資源消耗和功耗預(yù)估如下:
6、vivado工程2–DDR4緩存
開(kāi)發(fā)板FPGA型號(hào):Xilinx–xcku060-ffva1156-2-i;
開(kāi)發(fā)環(huán)境:Vivado2022.2;
輸入:AD7606,串行輸出;
輸出:PCIE3.0 X8;
應(yīng)用:QT上位機(jī)波形顯示試驗(yàn);
工程BD如下:
XDMA需要設(shè)計(jì)中斷數(shù)量,配置如下:
同時(shí),XDMA中斷模塊的中斷數(shù)量也設(shè)置為4,如下:
綜合后的代碼架構(gòu)如下:
綜合編譯完成后的FPGA資源消耗和功耗預(yù)估如下:
7、工程移植說(shuō)明
vivado版本不一致處理
1:如果你的vivado版本與本工程vivado版本一致,則直接打開(kāi)工程;
2:如果你的vivado版本低于本工程vivado版本,則需要打開(kāi)工程后,點(diǎn)擊文件–>另存為;但此方法并不保險(xiǎn),最保險(xiǎn)的方法是將你的vivado版本升級(jí)到本工程vivado的版本或者更高版本;
3:如果你的vivado版本高于本工程vivado版本,解決如下:
打開(kāi)工程后會(huì)發(fā)現(xiàn)IP都被鎖住了,如下:
此時(shí)需要升級(jí)IP,操作如下:
FPGA型號(hào)不一致處理
如果你的FPGA型號(hào)與我的不一致,則需要更改FPGA型號(hào),操作如下:
更改FPGA型號(hào)后還需要升級(jí)IP,升級(jí)IP的方法前面已經(jīng)講述了;
其他注意事項(xiàng)
1:由于每個(gè)板子的DDR不一定完全一樣,所以MIG IP需要根據(jù)你自己的原理圖進(jìn)行配置,甚至可以直接刪掉我這里原工程的MIG并重新添加IP,重新配置;
2:根據(jù)你自己的原理圖修改引腳約束,在xdc文件中修改即可;
3:純FPGA移植到Zynq需要在工程中添加zynq軟核;
8、上板調(diào)試驗(yàn)證
開(kāi)啟上位機(jī)測(cè)程序進(jìn)行 PCIe 接收AD數(shù)據(jù)測(cè)試,打開(kāi)QT軟件,實(shí)驗(yàn)結(jié)果如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-636424.html
9、福利:工程代碼的獲取
福利:工程代碼的獲取
代碼太大,無(wú)法郵箱發(fā)送,以某度網(wǎng)盤(pán)鏈接方式發(fā)送,
資料獲取方式:私,或者文章末尾的V名片。
網(wǎng)盤(pán)資料如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-636424.html
到了這里,關(guān)于FPGA XDMA 中斷模式實(shí)現(xiàn) PCIE3.0 AD7606采集 提供2套工程源碼和QT上位機(jī)源碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!