本文來自 AMD XILINX 工程師 Fancheng Meng
1Versal 設備的 Axi bridge mode
Versal 系列的 DMA axi bridge 模式可以在 PL 的 QDMA IP 或者在 CPM(The integrated block for PCIe Rev. 4.0 with DMA and CCIX Rev. 1.0)的 QDMA IP 中選中,CPM 內嵌在CIPS (Control Interfaces and Processing System) 中。不同系列的 Versal 的產品可支持的 PCIE 最高速率不同,能夠支持PCIE5.0協議的產品,例如 VPK120,其 CIPS 內使用的是 CPM5,而只能支持到 PCIE 4.0 協議的產品,例如 VCK190,其 CIPS 內使用的是 CPM4。雖然 CPM5 和 CPM4 的地址轉換參數都可以在界面中配置,但是 CPM5 與 CPM4 地址轉換的配置方式相差很大。如果要在 Versal 系列設備的 PL 中使用 AXI bridge mode,需要打開QDMA的IP, 選擇axi bridge mode。這一點與 Ultrascale 系列不同,Ultrascale 系列設備的 axi bridge mode 需要在 XDMA IP 中打開。
2CPM4 AXI bridge mode 的地址轉換
如何將 AXI 地址轉換為 pcie 地址?
在 CPM4 的 GUI 配置界面中,通過配置 AXIBAR 的參數,來實現將 AXI4 memory map (MM) 的地址范圍映射到 PCIe的地址范圍。在Vivado 2022.1中打開block design,在block design中添加 CIPS IP。在配置 CPM 時,在 PCIe Controller 0 mode 中選擇 DMA,在 Lane width 中選擇 PCIE lane 的數目。
在 CPM4 PCIE Controller 0 Configuration interface 中,在 Basic、Capabilities 和 legacy/MSI Cap 等界面中選擇所需的參數,然后打開 AXI:BARs 界面:
選擇 AXI bar 的數量,AXI bar 的數量取決于用戶需要幾段地址映射,想要將幾段 AXI 的地址域映射到 PCIE 域,就選擇幾個 bar。在進行地址映射時,可以選擇將 AXI 地址映射到32位的PCIE 地址或64位的 PCIE 地址,如果想要映射到 32bit 的 PCIE 地址,在 AXI to PCIE Translation 選項中,32到64位需要配為零,以生成32位地址的 TLP包,如果想要將 AXI 地址映射到64位的 PCIE 地址,需要把 AXI to PCIE Translation 的32到64位需要配成非0,才能生產64位地址的TLP包。Aperture base address 和 Aperture High address 分別填寫映射到 PCIe 地址域的 AXI 的起始地址和結束地址,以下通過舉例分別對 AXI 地址映射到32位和64位 PCIE 地址,這兩種情況進行說明。
示例1
示例1是將 AXI 地址映射到32位的 PCIe 地址,使用下圖所配置的參數,可以將 AXI 地址150000-15FFFF 映射到 PCIE 地址 100000-10FFFF。如果發送地址為 150001的 AXI 數據包,則該 IP 會將其轉換為地址為 100001 的 PCIe 數據包。
根據 AXI 地址域的大小,AXI to PCIE Translation 的位0-11位必須設置為零。
示例2
示例2是將 AXI 地址映射到64位 PCIe 地址,使用下面的參數,可以把 AXI 的地址 0X120000000000-0x13FFFFFFFFFF 映射到PCIe地址0X200000000000-0X21FFFFFFFFFF。當發送AXI 數據包的地址為 0X12FFFFFFFFFF 時,該 IP 會將地址為0X12FFFFFFFFFF 的 AXI 數據包轉換為地址為 0X20FFFFFFFFFF 的 PCIe 數據包。
3PL Axi bridge mode 的地址轉換
在 block design 中打開 QDMA IP,在 IP 的 function mode 中選擇 axi bridge mode,在切換到 axi bridge mode 即可看到如下圖所示,在 GUI 界面中多了 AXI:BARs 選項,可以在下面選項中選擇是否使用地址轉換。
如果要使用地址轉換功能,不要勾選上圖選項。在進行地址轉換時,地址的高位,以及轉換的空間大小都需要在 block design 的 address editor 中選擇,本次示例所選擇的地址高位為 AB0_0000_0000,空間大小為 32G,具體配置如下圖所示,起始地址、結束地址和空間大小分別是 AB0_0000_0000,AB7_FFFF_FFFF,32g。
在進行完以上配置后,32GB 的空間就被平均分成了8份。在 AMD Xilinx 的手冊中,通常稱之為 window,每個 window 的大小是固定的 4GB,每個 window 的 AXI 起始地址和結束地址也固定了。用戶可選擇的是使用哪幾個 window,以及每個 window 使用多少空間。如何對每個 window 進行配置呢?在PG344 上對此有所解釋,AXI 的地址轉換的細節是基于 BDF table 進行配置,BDF table 可以理解為 AXI 地址域到 PCIE 地址域的地址轉換配置表,這張表可以通過 s_axil_csr_*. 接口進行配置,CSR 接口如下圖所示,這個接口在 IP 配置界面中是可以選中的。
每個 window 都有6個寄存器與之對應,如果想要 window 生效,需要對這6個寄存器進行配置,第一個 window 的 6 個寄存器如下所示:
a. 0x2420
b. 0x2424
c. 0x2428
d. 0x242C
e. 0x2430
f. 0x2434
之后每個 window 的起始地址為 0x2420 + (0x20 * i),i 表示第幾個 window。6個寄存器代表的含義如下表所示:
本篇 blog 通過 2個 window 的配置流程對此機制進行說明,Window 0 的大小為 4KB ,Window 1 的大小為 4GB。 Window0 將 AXI 地址的 0x0000_0AB0_0000_0000-0x0000_0AB0_0000_0FFF 轉換到 PCIE 的地址 0x0000_0AB7_1234_0000-0x0000_0AB7_1234_0FFF。 Window1 將 AXI 地址的 0x0000_0AB1_0000_0000-0x0000_0AB1_FFFF_FFFF轉換到 PCIE 地址的 0x0000_0AB5_0000_0000-0x0000_0AB5_FFFF_FFFF。
Window0 的 BDF table 配置如下:
如果 AXI 包的地址為 0x0000_0 AB 0_0000_0100,經 window0 轉換后的 PCIE 包的地址為 0x0000_0AB7_1234_0100。
Window1 的 BDF table 配置如下:
如果 AXI 包的地址為 0x0000_0AB1_0000_0100,經 window1 轉換后的 PCIE 包的地址為 0x0000_0AB5_0000_0100。
審核編輯:湯梓紅
-
amd
+關注
關注
25文章
5485瀏覽量
134431 -
Xilinx
+關注
關注
71文章
2170瀏覽量
121869 -
Bridge
+關注
關注
0文章
15瀏覽量
11907 -
地址轉換
+關注
關注
0文章
2瀏覽量
5621 -
Versal
+關注
關注
1文章
162瀏覽量
7693
原文標題:開發者分享|Versal CPM AXI Bridge 模式的地址轉換
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論