Bootstrap

21天学会pcie--基本概念:多段地址映射的实现

目录

多段地址映射的实现

1. 多段地址映射的需求

2. 多段地址映射的实现方式

2.1 使用多个 BAR

2.2 使用单个 BAR 和 ATU 的多区域映射功能

2.3 使用内存窗口(Memory Window)

3. 多段地址映射的具体实现步骤

3.1 操作系统分配物理地址

3.2 配置 ATU 的多区域映射

3.3 主机发起访问请求

3.4 ATU 进行地址转换

3.5 设备响应主机请求

4. 多段地址映射的注意事项

5. 总结


多段地址映射的实现

在 PCIe 系统中,多段地址映射 是指将一个物理地址范围映射到设备的多个不连续的本地地址段。这种映射方式适用于设备内部资源(如寄存器、DMA 缓冲区等)分布在多个不连续的地址段中的情况。为了实现多段地址映射,ATU(Address Translation Unit)必须能够处理多个不同的翻译表项(Translation Table Entries, TTEs),每个表项定义了一个物理地址范围与本地地址段之间的映射关系。

1. 多段地址映射的需求

许多 PCIe 设备的内部资源并不是连续分布的。例如:

  • 控制寄存器 可能位于本地地址 0x1000 到 0x1FFF
  • DMA 缓冲区 可能位于本地地址 0x5000 到 0x
;