知識:
XDMA效率沒有RIFFA高,最高似乎只支援1288位寬;
輸出的使用者時鐘是250MHZ;
IP核配置:
參考:
https://docs.amd.com/r/zh-CN/pg195-pcie-dma/
具體:
重要:
PCIe:BARs標籤頁
該標籤頁主要用於配置 BAR,所謂的使能和配置各介面 interface,其實質是配置不同的 BAR,首先介紹下什麼是 BAR。 BAR 是 Base Address Register 的縮寫,譯為基址暫存器。 透過將讀取或寫入請求對映到基址暫存器( BAR),可以從主機訪問 XDMA 內部的配置和狀態暫存器以及使用者邏輯中的配置和狀態暫存器。 XDMA 根據 BAR 命中,將請求路由到適當的位置。 比如,對於 PCIe to AXI-Lite Master (BAR0)地址對映, 命中 PCIe 到 AXI4-Lite Master 的事務將路由到 AXI4-Lite 記憶體對映使用者介面。該介面支援 32 位地址空間和 32 位讀取和寫入請求。 PCIe to AXI-Lite Master (BAR0)地址對映可由使用者邏輯定義。
BAR分2種大小:
32位BAR:地址空間最小可達128位元組或者最大可達2千兆位元組(GB)。用於記憶體或I/O。
64位BAR:地址空間最小可達128位元組或者最大可達8艾位元組(EB)。僅用於記憶體。
BAR 也可分為兩種型別(Type)——I/O 和記憶體:
I/O: I/O BAR 只能採用 32 位;“可預取 (Prefetchable)”選項不適用於 I/O BAR。僅限針對傳統 PCIExpress 端點才能啟用 I/O BAR。
記憶體(Memory):記憶體BAR可採用64位或32位,並且可預取。
與 BAR 暫存器相關的選項含義:
Size(大小):可用大小範圍取決於所選 PCIe 器件/埠型別和 BAR 型別;
Value(值):基於當前選擇分配給 BAR 的值;
64bit Enable:是否使用 64 位BAR;
Prefetchable(可預取):識別記憶體空間預取功能。
每個 BAR 空間可以單獨選擇 64bit Enable 選項。每個 64 位 BAR 空間都可以選擇是否預取。
AXI4‑Lite 是使用BRAM實現的使用者邏輯暫存器;
BAR 的選擇是可配置的。預設情況下,DMA 位於 BAR 0(64 位),AXI4‑Lite 主介面則位於 BAR 2(64 位)。這些選擇可根據使用者需求而變;
PCIe to AXI Lite Master Interface:
選擇是否啟用 AXI-Lite Master Interface 介面;該介面相當於顯示卡的使用者介面, 主機側可以透過該介面控制顯示卡的風扇轉速、 LED 開關和顯示效果等功能,所以當我們需要使用PCIe 介面控制 FPGA 側的使用者邏輯如控制 led 燈等則需要啟用該介面。
PC的記憶體域地址與PCIe域地址的對映關係:PCIe to AXI Translation這個地址要與Address Editor中AXI_Lite設定的地址大小一致。
PCIe to AXI Translation:PCIe 到 AXI 的轉換。主機一側 BAR 地址為 0, 使用者邏輯側 AXI LIte的地址為 0x40000000,則主機訪問AXI LIte使用者邏輯時, XDMA 將根據該 設定將主機側 BAR地址0轉換到AXI LIte匯流排地址 0x40000000。對與該值的設定有兩種方式,一種是手動指定,然後修改後面 AXI LIte匯流排的偏移地址,另一種是先確定 AXI LIte匯流排的偏移地址,然後根據偏移地址設定該值。例如修改地址對映AXI LIte匯流排的偏移地址為 0x40000000,所以設定此值為 0x40000000
此外, PCIe to AXI Translation 同樣也是 AXI LIte匯流排的基地址,當 AXI LIte匯流排連線多個 AXI IP 核時,會有多個偏移地址,上位機訪問其他 IP 核時的偏移地址是以 PCIe to AXI Translation 的值為基址 0 進行參考的,比如, AXI LIte匯流排連線的另一個 AXI IP 的偏移地址為 0x40010000,上位機訪問該 IP 核的偏移地址就是該 IP 核的偏移地址 0x40010000 - PCIe to AXI Translation 的值 0x40000000=0x10000。 因此當 AXI LIte匯流排連線多個 AXI IP 核時,需確保 PCIe to AXI Translation 的值小於等於這些 AXI IP 核偏移地址的最小值
參考:
https://blog.csdn.net/Njustxiaobai/article/details/132874083
https://blog.csdn.net/kunkliu/article/details/108812595
PCIE to AXI Lite Master Interface:不勾選 , 我們不使用這個介面來訪問使用者邏輯,如果有人看過《PCIE_xdma教程_LINUX.pdf》這個pdf文件的話,
應該知道這個文件裡講的是使用這個介面來進行訪問使用者邏輯,而不使用DMA Bypass 介面,我剛開始也是參照這個文件使用這個介面,但是後面在使用的時候發現了問題,
這個介面的資料輸出是經過XDMA內部過濾的,
也就是說這個介面出來的地址並不是所有的都能給使用者使用,
有部分地址是用來對XDMA的暫存器配置使用的,
容易造成使用者地址和配置地址混合,
如果使用者地址只有幾個十幾個還好,要是有幾十上百個的話,這個介面並不實用。
PCIe to DMA Interface: PCIe 至 DMA 介面,該介面預設一直開啟,prefetchable和nonprefetchable(可預取和不可預取)。
PCIe to DMA Bypass Interface: 選擇是否啟用 PCIe 至 DMA 旁路介面。 DMA Bypass 就是普通的 PCIe傳輸, 不用 DMA 邏輯, 而是直接透過 PCIe 進行通訊, 一般傳輸效率會高於 PCIe to AXI Lite。
Number of User Interrupt Request:使用者中斷請求數,最多可以選擇 16 個使用者中斷請求; Legacy Interrupt Settings:可以選擇傳統中斷之一:INTA,INTB,INTC 或 INTD; MSI Capabilities:預設情況下,啟用 MSI 功能,並且啟用 1 個向量,最多可以選擇 32 個向量。通常,Linux 僅將 1 個向量用於 MSI,可以禁用此選項; MSI-X Capabilities:使能 MSI-X 功能; Finite Completion Credits(Advanced 配置模式下有):在支援有限完成信用的系統上,可以啟用此選項以獲得更好的效能; Extended Tag Field:擴充套件標籤欄位,預設情況下,使用 6 位完成標籤。對於 UltraScale 和 Virtex-7 器件, 擴充套件標籤選項提供了 64 個標籤。對於 UltraScale +器件,擴充套件標籤選項提供 256 個標籤。如果未選擇擴充套件標籤選項,則 DMA 將 32 個標籤用於所有裝置 Configuration Management Interface:是否使用 PCIe 配置管理介面; 關於 MSI-X 中斷:使用者可以嘗試使用 MSI-X 中斷,而不是 MSI 或傳統中斷。使用 MSI-X 中斷,資料 速率要優於使用 MSI 或基於傳統中斷的設計。
中斷向量: MSI 中斷和 MSI-X中斷只能選擇一個,否則會報錯,如果選擇了 MSI 中斷,則可以選擇 Legacy中斷,如果選擇了MSI-X中斷,那麼MSI必須取消選擇,同時Legacy也必須選擇None。此 IP 對於7系列設定有這麼個問題,如果使用Ultrascale 系列,則可以全部選擇。 對PCIE來說只有三種中斷:MSI-X、MSI、Legacy。而user interruput是邏輯側的控制中斷口。 中斷優先順序為:MSI-X>MSI>Legacy 在申請中斷時req需要一直保持為高,直到響應ack來了後,才能拉低,然後進行下一次申請; 由於邏輯側的中斷與主機側的中斷是透過優先順序來對應的,因此同一時刻只有一種中斷。
Number of Read Channels:主機到 PCIe 卡(H2C)的 DMA 讀通道數,對於 7 系列 Gen2 IP,最多兩個(通道數越多,同等情況下傳輸速率越快); Number of Write Channels:PCIe 卡到主機(C2H)的 DMA 寫通道數,對於 7 系列 Gen2 IP,最多兩個(通道數越多,同等情況下傳輸速率越快); Number of Request IDs for Read channel:讀通道的請求 ID 數,即每個通道的最大未完成請求數,可用的選擇是從 2 到 64; Number of Request IDs for Write channel:寫通道的請求 ID 數,即每個通道的最大未完成請求數,可用的選擇是從 2 到 32; Descriptor Bypass for Read (H2C):適用於所有選定的讀通道。每個二進位制數字對應一個通道。LSB 對應於通道 0。值為 1 的位表示相應的通道啟用了描述符旁路; Descriptor Bypass for Write (C2H):適用於所有選定的寫通道。每個二進位制數字對應一個通道。LSB 對應於通道 0。值為 1 的位表示相應的通道啟用了描述符旁路; AXI ID Width:預設值為 4 位寬,也可以選擇 2 位寬; DMA Status port:DMA 狀態埠可用於所有通道。
DMA通道數用來區別不同的資料來源和型別,比如光纖資料,ADC資料等;
多通道時在AXIStream模式下影響很明顯,在AXI Stream模式下選擇多通道,可以連線不同的資料來源。在AXI Memory Mapped模式下影響不大。
XDMA如何透過 PCIE 把資料放入電腦記憶體,簡單來說, 我們先向作業系統申請一片電腦記憶體,得到這個記憶體的實地址 然後我們把這個實地址和記憶體大小配置到XDMA的暫存器中 然後寫XDMA暫存器啟動DMA XDMA就開始準備資料,按章PCIe的資料包格式打包【資料+目的記憶體的地址】 CPU收到包後,會將資料包的資料放到對應地址上,然後傳送一個ack包給XDMA 然後XDMA開始準備下一個資料包,直到傳輸結束 傳送一個IRQ告訴CPU DMA傳輸完成。 PCIe四種復位方式:冷、暖、熱、功能層