IP核:XDMA學習

NoNounknow發表於2024-07-06

知識:

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 數,即每個通道的最大未完成請求數,可用的選擇是從 264;
Number of Request IDs for Write channel:寫通道的請求 ID 數,即每個通道的最大未完成請求數,可用的選擇是從 232;
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四種復位方式:冷、暖、熱、功能層

相關文章