1.1 課程介紹
這一章開始主要介紹 XILINX FPGA PICE IP XDMA IP的使用。XDMA IP使用部分教程分LINUX 篇和WINDOWS篇兩個部分。通過實戰(zhàn),面向應用,提供給大家 XILINX FPGA PCIE 應用解決方案。
本教程以MZ7035FA作為樣機測試。在正式開始教程內(nèi)容前,有必要把MZ7035FA開發(fā)板的特點說明下。這是一款高性價比的FPGA開發(fā)板。帶PCIE接口,SFP光通信接口,3路千兆以太網(wǎng)口,2路SATA接口,1路HDMI輸出,1路串口,1路TF卡接口。支持MSXBO(米聯(lián)客)FEP標準擴展接口。采用的CPU型號為XC7Z035-FFG676。PL端搭載32bit 1024MB DDR3內(nèi)存,PS端搭載32bit 1024MB DDR3內(nèi)存,F(xiàn)PGA讀寫DDR支持的最大數(shù)據(jù)時鐘為1600M,可以進行很多復雜的開發(fā)任務。
1.2 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)首地址依次完成鏈表所指定的傳輸任務。
1.3 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ù)傳輸
1.4 XDMA IP 配置
Mode:配置模式,選擇 Advanced 高級配置
Lane Width:MZ7035 支持X4
Max Link Speed:選擇5.0GT/s 即PCIE2.0
Reference Clock :100MHZ,參考時鐘 100M
DMA Interface Option:接口選擇 AXI4 接口
AXI Data Width:128bit,即 AXI4 數(shù)據(jù)總線寬度為128bit
AXI Clock :125M,即AXI4 接口時鐘為 125MHZ
PCIE ID 配置
我們配置成Memory controller 讓IP 自動選擇VID 等
PCIE BAR 配置,這里面的配置比較重要
首先使能PCIE to AXI Lite Master Interface ,這樣可以在主機一側(cè)通過PCIE 來訪問用戶邏輯側(cè)寄存器或者其他AXI4-Lite 總線設(shè)備
映射空間選擇 1M,當然用戶也可以根據(jù)實際需要來自定義大小。
PCIE to AXI Translation:這個設(shè)置比較重要,通常情況下,主機側(cè)PCIE BAR 地址與用戶邏輯側(cè)地址是不一樣的,這個設(shè)置就是進行BAR 地址到AXI 地址的轉(zhuǎn)換,比如主機一側(cè) BAR 地址為0,IP 里面轉(zhuǎn)換設(shè)置為0x80000000,則主機訪問 BAR 地址0 轉(zhuǎn)換到AXI LIte 總線地址就是0x80000000
PCIE to DMA Interface :選擇64bit 使能
DMA Bypass 暫時不用
PCIE 中斷設(shè)置
User Interrupts:用戶中斷,XDMA 提供16 條中斷線給用戶邏輯,這里面可以配置使用幾條中斷線。
Legacy Interrupt:XDMA 支持 Legacy 中斷
選擇MSI 中斷
注意:MSI 中斷和 MSI-X 中斷只能選擇一個,否則會報錯,如果選擇了 MSI 中斷,則可以選擇 Legacy 中斷,如果選擇了 MSI-X 中斷,那么 MSI 必須取消選擇,同時Legacy 也必須選擇None。此 IP 對于7 系列設(shè)置有這么個問題,如果使用Ultrascale 系列,則可以全部選擇
配置DMA 相關(guān)內(nèi)容
Number of DMA Read Channel(H2C)和Number of DMA Write Channel(C2H)通道數(shù),對于PCIE2.0 來說最大只能選擇 2,也就是 XDMA 可以提供最多兩個獨立的寫通道和兩個獨立的讀通道,獨立的通道對于實際應用中有很大的作用,在帶寬允許的前提前,一個PCIE 可以實現(xiàn)多種不同的傳輸功能,并且互不影響。這里我們選擇1
Number of Request IDs for Read (Write)channel :這個是每個通道設(shè)置允許最大的 outstanding 數(shù)量,按照默認即可
配置完成以后,點擊Run Block Auto,可以看到之前的配置信息,如果有發(fā)現(xiàn)和目標配置不一樣的,需要手動修改,點擊OK,完成配置
配置完成以后,VIVADO 會自動進行必要的連接
到此為止,XDMA IP 配置就完成了只要再進行時鐘和 GTP 約束即可。
1.5 MIG 7 SERIES 的配置
Step1:任單擊 IP Catalog,選取 Memory Interface Generator(MIG 7 series)IP 添加到 Block design。雙擊 MIG 7 SERIES ,對這個 IP 進行配置。
雙擊生成的IP核
單擊NEXT
繼續(xù)單擊NEXT
選擇DDR3 單擊NEXT
設(shè)置MIG 內(nèi)核時鐘頻率為、內(nèi)存型號、內(nèi)存的數(shù)據(jù)位寬
設(shè)置MIG AXI4 最大支持的位寬,對于2片DDR 最大位寬為256bit
設(shè)置輸入頻率
系統(tǒng)和參考時鐘時鐘選擇no buffer,MIG低電平復位
Step9:終端阻抗選擇50hms,設(shè)置DCI
選擇Fixed Pin Out
根據(jù)原理圖手動填寫PIN 腳定義,或者選擇Read XDC/UCF直接讀入pin腳定義,本課程下提供了MZ7035.ucf 的DDR 配置文件,直接讀入既可。
填寫完成后,先單擊Validate再單擊NEXT
繼續(xù)單擊NEXT
繼續(xù)單擊NEXT
繼續(xù)單擊NEXT
繼續(xù)單擊NEXT
最后單擊Generate,至此MIG的配置完成
1.6基礎(chǔ)測試系統(tǒng)搭建
我們的測試目標是進行PCIE AXI4總線與外設(shè)進行讀寫操作,PCIE AXI4-Lite 總線進行用戶邏輯寄存器或者其他 AXI4-Lite 總線設(shè)備訪問操作。AXI4總線上掛載到MIG控制器DDR上去,實現(xiàn)對DDR的讀寫控制。
為此搭建系統(tǒng)為下圖所示:
進行地址分配:
這里我們把掛在M_AXI上的DDR地址分配從0開始(對于widnows系統(tǒng)必須為0), M_AXI是需要進行DMA操作的。而M_AXI_LITE掛載的BRAM是需要進行BAR空間操作,所以地址設(shè)置為0x80000000和XMDA IP里面設(shè)置的地址對應。
1.7LINUX下驅(qū)動程序編譯安裝測試1.7.1 驅(qū)動編譯和安裝(下必須重新編譯)
官方驅(qū)動包選擇 2017 版本以后的,注意 2016 版本的有 BUG?。?!
在終端進入到xdma 目錄,輸入make ,進行驅(qū)動編譯
執(zhí)行以下指令:
- Change directory to the driver directory.
cd driver
- Compile the kernel module driver.
make
- Change directory to the tests directory.
cd tests
- Compile the provided example software.
make
- Copy the provided driver rules from the etc directory to the
/etc/ directory on your system.
cp ../etc/udev/rules.d/* /etc/udev/rules.d/
關(guān)于驅(qū)動加載,這里有兩點要說明一下,首先是在驅(qū)動加載之前,如果檢測到系統(tǒng)中已經(jīng)加載過驅(qū)動,那么它會將已經(jīng)加載的驅(qū)動卸載,然后再加載。然后就是PCIe DMA的工作方式可以通過加載驅(qū)動傳輸參數(shù)進行修改。默認情況下DMA工作在中斷模式,可以通過修改load_driver.sh腳本改為輪循模式如下圖所示,但是可能驅(qū)動有問題,實際測試輪詢模式有些程序無法正常執(zhí)行,所以建議大家不要使用輪詢模式。
在準備加載驅(qū)動前,確保你的開發(fā)板已經(jīng)下載PCIE工程的bit文件,而且已經(jīng)重啟過電腦。好了,現(xiàn)在加載驅(qū)動。
./load_driver.sh
如下顯示驅(qū)動安裝成功
在終端執(zhí)行命令:
./dma_from_device -d /dev/xdma0_c2h_0 -f ./test.bin-s 4096-a 0 -c 1
./dma_to_device -d /dev/xdma0_h2c_0 -f ./test.bin-s 4096-a0-c 1
-d:device 設(shè)備.
-f:file 文件
-s:size 大小
-a:addr 起始地址
-c:count
這兩個操作分別是從板卡讀 4096 Bytes 數(shù)據(jù)到文件 test.bin 以及從 test.bin 讀出4096 Bytes 數(shù)據(jù)發(fā)送給板卡。
原文鏈接;
https://openatomworkshop.csdn.net/674532733a01316874d81597.html
-
PCIe
+關(guān)注
關(guān)注
15文章
1244瀏覽量
82859 -
環(huán)路測試
+關(guān)注
關(guān)注
0文章
9瀏覽量
5923
原文標題:PCIE XDMA 開發(fā)環(huán)境搭建以及環(huán)路測試
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論