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