从地址转换示例 - 5.0 简体中文

QDMA Subsystem for PCI Express 产品指南 (PG302)

Document ID
PG302
Release Date
2023-10-18
Version
5.0 简体中文

示例 1:BAR 大小为 64 KB,含 1 个 4 KB 大小的窗口

窗口 0:大小为 4 KB,含 0xF 的地址转换(对应位 [15:12])。

  1. Vivado IP 配置的“AXI BAR”选项卡中的选项如下:
    • AXI BAR 大小 64K:0xFFFF bits [15:0]
    • 位 [63:16] 的地址转换可在 GUI 中设置。在此示例中 [63:16] = 0x0
    • 设置间隙基址:0x0000_0000_0000_0000
    • 设置间隙高位地址:0x0000_0000_0000_FFFF
  2. BDF 表编程:
    • 针对 1 个窗口编程 1 个条目
    • 窗口大小 = AXI BAR 大小/8 = 64K / 8 = 0x1FFF = 8 KB(13 个位)。每个窗口的最大大小为 8 千字节。
    • 在此示例中,窗口大小为 4K,因此 0x1 将于 0x2430 位 [25:0] 处进行编程。
    • 位 [15:13] 的地址转换将于 0x2420 和 0x2424 处进行编程。
    • 在此示例中,位 [15:13] 的地址转换设为 0x7。
表 1. BDF 表编程
编程值 寄存器
0x0000_E000 地址转换值低位
0x0 地址转换值高位
0x0 PASID/保留
0x0 [11:0]:功能编号
0xC0000001

[31:30] 读/写访问权限

[29]:R0 访问错误

[28:26] 保护 ID

[25:0] 窗口大小

([25:0]*4K = 窗口的实际大小)

0x0 保留

对于此示例,从地址 0x0000_0000_0000_0100 将转换为 0x0000_0000_0000_E100。

示例 2:BAR 大小为 64 KB,含 1 个 8 KB 大小的窗口

窗口 0:大小为 8 KB,含 0x6 ('b110) 的地址转换(对应位 [15:13])。

  1. Vivado IP 配置的“AXI BAR”选项卡中的选项如下:
    • AXI BAR 大小 64K:0xFFFF bits [15:0]
    • 位 [63:16] 的地址转换可在 GUI 中完成。在此示例中 [63:16] = 0x0
    • 设置间隙基址:0x0000_0000_0000_0000
    • 设置间隙高位地址:0x0000_0000_0000_FFFF
  2. BDF 表编程:
    • 针对 1 个窗口编程 1 个条目。
    • 窗口大小 = AXI BAR 大小/8 = 64K / 8 = 0x1FFF = 8 KB(13 个位)。每个窗口的最大大小为 8 千字节。
    • 在此示例中,窗口大小为 8K,因此 0x2 将于 0x2430 位 [25:0] 处进行编程。
    • 位 [15:13] 的地址转换将于 0x2420 和 0x2424 处进行编程。
    • 在此示例中,位 [15:13] 的地址转换设为 0x6 ('b110)。
表 2. BDF 表编程
偏移 编程值 寄存器
0x2420 0x0000_C000 地址转换值低位
0x2424 0x0 地址转换值高位
0x2428 0x0 PASID/保留
0x242C 0x0 [11:0]:功能编号
0x2430 0xC0000002

[31:30] 读/写访问权限

[29]:R0 访问错误

[28:26] 保护 ID

[25:0] 窗口大小

([25:0]*4K = 窗口的实际大小)

0x2434 0x0 保留

对于此示例,从地址 0x0000_0000_0000_0100 将转换为 0x0000_0000_0000_C100。

示例 3:BAR 大小为 32 GB,含 4 个不同大小的窗口

  • 窗口 0:大小为 4 KB,含 0xAAAAA 的地址转换(对应位 [31:12])。
  • 窗口 1:大小为 4 GB,窗口上不含地址转换。
  • 窗口 2:大小为 64 KB,含 0xBBBB 的地址转换(对应位 [31:16])。
  • 窗口 3:大小为 1 GB,含 11111 的地址转换(对应位 [34:30])。
  1. Vivado IP 配置的“AXI BAR”选项卡中的选项如下:
    • AXI BAR 大小 32G:0x7_FFFF_FFFF bits [34:0]
    • 位 [63:35] 的地址转换可在 GUI 中进行编程。在此示例中 [63:36] = 0xAB。
    • 设置间隙基址:0x0000_0AB0_0000_0000
    • 设置间隙高位地址:0x0000_0AB7_FFFF_FFFF
  2. BDF 表编程:
    • 窗口大小 = AXI BAR 大小/8 = 32 GB / 8 = 0xFFFF_FFFF = 4 GB(32 个位)。每个窗口的最大大小为 4 GB。
    • 针对 4 个窗口编程 4 个条目:
      • BDF 表格条目 0 起始地址为 0x2420。
      • BDF 表格条目 1 起始地址为 0x2440。
      • BDF 表格条目 2 起始地址为 0x2460。
      • BDF 表格条目 3 起始地址为 0x2480。
    • 窗口 0 大小为 4 千字节。
      • 将 0x1 编程为 0x2430 位 [25:0]。
      • 位 [34:32] 的地址转换将于 0x2420 和 0x2424 处进行编程。
      • 将 0x0000_0000 编程为 0x2420。
      • 将 0x0000_0007 编程为 0x2424
    • 窗口 1 大小为 4 GB。
      • 将 0x10_0000 编程为 0x2450 位 [25:0]。
      • 无地址转换,因为此窗口将使用所有地址位。
      • 将 0x0000_0000 编程为 0x2440。
      • 将 0x0000_0000 编程为 0x2444
    • 窗口 2 大小为 64 千字节。
      • 将 0x10 编程为 0x2470 位 [25:0]。
      • 位 [34:32] 的地址转换将于 0x2460 和 0x2464 处进行编程。
      • 将 0x0000_0000 编程为 0x2460
      • 将 0x0000_00005 编程为 0x2464
    • 窗口 3 大小为 1 GB。
      • 将 0x4_0000 编程为 0x2490 位 [25:0]。
      • 位 [34:30] 的地址转换将于 0x2480 和 0x2484 处进行编程。
      • 将 0x0000_0000 编程为 0x2480。
      • 将 0x0000_0003 编程为 0x2484
表 3. BDF 表格编程条目 0
偏移 编程值 寄存器
0x2420 0x0000_0000 地址转换值低位
0x2424 0x7 地址转换值高位
0x2428 0x0 PASID/保留
0x242C 0x0 [11:0]:功能编号
0x2430 0xC0000001

[31:30] 读/写访问权限

[29]:R0 访问错误

[28:26] 保护 ID

[25:0] 窗口大小

([25:0]*4K = 窗口的实际大小)

0x2434 0x0 保留
表 4. BDF 表格编程条目 1
偏移 编程值 寄存器
0x2440 0x0000 地址转换值低位
0x2444 0x0 地址转换值高位
0x2448 0x0 PASID/保留
0x244C 0x0 [11:0]:功能编号
0x2450 0xC010_0000

[31:30] 读/写访问权限

[29]:R0 访问错误

[28:26] 保护 ID

[25:0] 窗口大小

([25:0]*4K = 窗口的实际大小)

0x2454 0x0 保留
表 5. BDF 表格编程条目 2
偏移 编程值 寄存器
0x2460 0x_0000 地址转换值低位
0x2464 0x05 地址转换值高位
0x2468 0x0 PASID/保留
0x246C 0x0 [11:0]:功能编号
0x2470 0xC000_00010

[31:30] 读/写访问权限

[29]:R0 访问错误

[28:26] 保护 ID

[25:0] 窗口大小

([25:0]*4K = 窗口的实际大小)

0x2474 0x0 保留
表 6. BDF 表格编程条目 3
偏移 编程值 寄存器
0x2480 0x0000_0000 地址转换值低位
0x2484 0x3 地址转换值高位
0x2488 0x0 PASID/保留
0x248C 0x0 [11:0]:功能编号
0x2490 0xC004_0000

[31:30] 读/写访问权限

[29]:R0 访问错误

[28:26] 保护 ID

[25:0] 窗口大小

([25:0]*4K = 窗口的实际大小)

0x2494 0x0 保留

对于此示例:

从地址 0x0000_0000_0000_0100 将转换为 0x0000_0AB7_0000_0100。

从地址 0x0000_0001_0000_0100 将转换为 0x0000_0AB0_0000_0100。

从地址 0x0000_0002_0000_0100 将转换为 0x0000_0AB5_0000_0100。

从地址 0x0000_0003_0000_0100 将转换为 0x0000_0AB3_0000_0100。

Slave Bridge 不支持窄突发 AXI 传输事务。为避免窄突发传输,请连接 AXI 智能连接模块,此模块将把窄突发传输转换为完整突发的 AXI 传输。