PCIE XDMA 開發環境搭建以及環路測試
軟體版本:VIVADO2017.4 作業系統:Ubuntu16.4 64bit 硬體平臺:適用米聯客 ZYNQ系列開發板 米聯客(MSXBO)論壇:www.osrc.cn答疑解惑專欄開通,歡迎大家給我提問!! 1.1 課程介紹這一章開始主要介紹 XILINX FPGA PICE IP XDMA IP的使用。XDMA IP使用部分教程分LINUX 篇和WINDOWS篇兩個部分。通過實戰,面向應用,提供給大家 XILINX FPGA PCIE 應用解決方案。 本教程以MZ7035FA作為樣機測試。在正式開始教程內容前,有必要把MZ7035FA開發板的特點說明下。這是一款高價效比的FPGA開發板。帶PCIE介面,SFP光通訊介面,3路千兆乙太網口,2路SATA介面,1路HDMI輸出,1路串列埠,1路TF卡介面。支援MSXBO(米聯客)FEP標準擴充套件介面。採用的CPU型號為XC7Z035-FFG676。PL端搭載32bit 1024MB DDR3記憶體,PS端搭載32bit 1024MB DDR3記憶體,FPGA讀寫DDR支援的最大資料時鐘為1600M,可以進行很多複雜的開發任務。 教程的內容完全適合其他開發板。如果讀者使用過程中遇到問題,可以在我們討論課程網頁留言(米聯客(MSXBO)論壇www.osrc.cn答疑解惑專欄開通,歡迎大家給我提問)。我們會在論壇上公佈相關課程內容和原始碼。 1.2 XDMA 概述Xilinx 提供的DMASubsystem for PCIExpressIP是一個高效能,可配置的適用於PCIE2.0,PCIE3.0 的SG 模式 DMA,提供使用者可選擇的 AXI4 介面或者 AXI4-Stream介面。一般情況下配置成 AXI4 介面可以加入到系統匯流排互聯,適用於大資料量非同步傳輸,通常情況都會使用到 DDR,AXI4-Stream 介面適用於低延遲資料流傳輸。 XDMA 是SGDMA,並非Block DMA,SG 模式下,主機會把要傳輸的資料組成連結串列的形式,然後將連結串列首地址通過BAR 傳送給XDMA,XDMA 會根據連結串列結構首地址依次完成連結串列所指定的傳輸任務。 1.3 XDMA 提供如下介面:
存器
內部暫存器,不會對映到BAR
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 資料匯流排寬度為128bit AXI Clock :125M,即AXI4 介面時鐘為 125MHZ PCIE ID 配置 我們配置成 Memory controller 讓 IP 自動選擇VID 等 PCIE BAR 配置,這裡面的配置比較重要 首先使能 PCIE to AXI Lite Master Interface ,這樣可以在主機一側通過PCIE 來訪問使用者邏輯側暫存器或者其他 AXI4-Lite 匯流排裝置 對映空間選擇 1M,當然使用者也可以根據實際需要來自定義大小。 PCIE to AXI Translation:這個設定比較重要,通常情況下,主機側PCIE BAR 地址與使用者邏輯側地址是不一樣的, 這個設定就是進行BAR 地址到AXI 地址的轉換,比如主機一側 BAR 地址為0,IP 裡面轉換設定為 0x80000000, 則主機訪問 BAR 地址 0 轉換到AXI LIte 匯流排地址就是0x80000000 PCIE to DMA Interface :選擇64bit 使能 DMA Bypass 暫時不用 PCIE 中斷設定 User Interrupts:使用者中斷,XDMA 提供16 條中斷線給使用者邏輯,這裡面可以配置使用幾條中斷線。 Legacy Interrupt:XDMA 支援 Legacy 中斷 選擇 MSI 中斷 注意:MSI 中斷和 MSI-X 中斷只能選擇一個,否則會報錯,如果選擇了 MSI 中斷,則可以選擇 Legacy 中斷, 如果選擇了 MSI-X 中斷,那麼 MSI 必須取消選擇,同時Legacy 也必須選擇None。此 IP 對於7 系列設定有這麼 個問題,如果使用Ultrascale 系列,則可以全部選擇 配置DMA 相關內容 Number of DMA Read Channel(H2C)和Number of DMA Write Channel(C2H)通道數,對於PCIE2.0 來說最大 只能選擇 2,也就是 XDMA 可以提供最多兩個獨立的寫通道和兩個獨立的讀通道,獨立的通道對於實際應用中 有很大的作用,在頻寬允許的前提前,一個PCIE 可以實現多種不同的傳輸功能,並且互不影響。這裡我們選擇1 Number of Request IDs for Read (Write)channel :這個是每個通道設定允許最大的 outstanding 數量,按照默 認即可 配置完成以後,點選 Run Block Auto,可以看到之前的配置資訊,如果有發現和目標配置不一樣的,需要手動 修改,點選 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 繼續單擊NEXT 選擇DDR3 單擊NEXT 設定MIG 核心時脈頻率為、記憶體型號、記憶體的資料位寬 設定MIG AXI4 最大支援的位寬,對於2片DDR 最大位寬為256bit 設定輸入頻率
系統和參考時鐘時鐘選擇no buffer,MIG低電平復位 Step9:終端阻抗選擇50hms,設定DCI 選擇Fixed Pin Out 根據原理圖手動填寫PIN 腳定義,或者選擇Read XDC/UCF直接讀入pin腳定義,本課程下提供了MZ7035.ucf 的DDR 配置檔案,直接讀入既可。 填寫完成後,先單擊Validate再單擊NEXT 繼續單擊NEXT 繼續單擊NEXT 繼續單擊NEXT 繼續單擊NEXT 最後單擊Generate,至此MIG的配置完成 1.6 基礎測試系統搭建我們的測試目標是進行PCIE AXI4匯流排與外設進行讀寫操作,PCIE AXI4-Lite 匯流排進行使用者邏輯暫存器或者其他 AXI4-Lite 匯流排裝置訪問操作。AXI4匯流排上掛載到MIG控制器DDR上去,實現對DDR的讀寫控制。 為此搭建系統為下圖所示: 進行地址分配: 這裡我們把掛在M_AXI上的DDR地址分配從0開始(對於widnows系統必須為0), M_AXI是需要進行DMA操作的。而M_AXI_LITE掛載的BRAM是需要進行BAR空間操作,所以地址設定為0x80000000和XMDA IP裡面設定的地址對應。
1.7 LINUX下驅動程式編譯\安裝\測試1.7.1 驅動編譯和安裝(下必須重新編譯)官方驅動包選擇 2017 版本以後的,注意 2016 版本的有 BUG!!! 在終端進入到 xdma 目錄,輸入 make ,進行驅動編譯 執行以下指令: - 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/ 關於驅動載入,這裡有兩點要說明一下,首先是在驅動載入之前,如果檢測到系統中已經載入過驅動,那麼它會將已經載入的驅動解除安裝,然後再載入。然後就是PCIe DMA的工作方式可以通過載入驅動傳輸引數進行修改。預設情況下DMA工作在中斷模式,可以通過修改load_driver.sh指令碼改為輪循模式如下圖所示,但是可能驅動有問題,實際測試輪詢模式有些程式無法正常執行,所以建議大家不要使用輪詢模式。 在準備載入驅動前,確保你的開發板已經下載PCIE工程的bit檔案,而且已經重啟過電腦。好了,現在載入驅動。 ./load_driver.sh 如下顯示驅動安裝成功 在終端執行命令: ./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 -a 0 -c 1 -d:device 裝置. -f:file 檔案 -s:size 大小 -a:addr 起始地址 -c:count 這兩個操作分別是從板卡讀 4096 Bytes 資料到檔案 test.bin 以及從 test.bin 讀出4096 Bytes 資料傳送給板卡。 |
相關文章
- 配置開發環境、生成環境、測試環境開發環境
- 如何快速搭建微服務開發測試環境微服務
- 用 Spring 區分開發環境、測試環境、生產環境Spring開發環境
- kaldi環境搭建 | yesno 測試
- android測試環境搭建Android
- Flutter環境搭建以及開發軟體安裝Flutter
- phpwamp開發環境搭建詳解,phpwamp綠色整合環境開發環境一鍵搭建PHP開發環境
- griffin環境搭建及功能測試
- 搭建自動化測試環境
- 1 – 搭建開發環境開發環境
- rollup 開發環境搭建開發環境
- 搭建go開發環境Go開發環境
- Androdi開發環境搭建開發環境
- 前端開發環境搭建前端開發環境
- Theia 開發環境搭建開發環境
- QEMU 開發環境搭建開發環境
- Cordova 開發環境搭建開發環境
- 搭建VUE開發環境Vue開發環境
- 安卓開發環境搭建安卓開發環境
- 搭建Layui開發環境UI開發環境
- 搭建scala開發環境開發環境
- EBS開發環境搭建開發環境
- andriod開發環境搭建,開發環境
- Erlang開發環境搭建開發環境
- Kafka開發環境搭建Kafka開發環境
- Qt開發環境搭建QT開發環境
- GeoServer開發環境搭建Server開發環境
- JAVA開發環境搭建Java開發環境
- lua 開發環境搭建開發環境
- ubuntu環境下搭建以太坊開發環境Ubuntu開發環境
- 試用環境開發環境不發郵件開發環境
- 達夢6.0試用之測試環境搭建
- 前端開發環境(開發,除錯,測試工具)前端開發環境除錯
- proc 開發環境配置(測試透過)開發環境
- 搭建 Laravel Sail 開發環境 - Windows,建立測試專案失敗LaravelAI開發環境Windows
- 搭建S3C6410開發板的測試環境S3
- 新手搭建 kubernetes 測試環境
- 你真的會搭建測試環境嗎?