Fork me on GitHub
侧边栏

深入解析 PCIe 的 iATU(Internal Address Translation Unit)及其工作原理

iATU(Internal Address Translation Unit) 是一种用于 PCIe(Peripheral Component Interconnect Express)设备的硬件模块,主要用于实现 地址转换 功能。

它的作用是将设备访问的 内存地址设备视角 转换为 主机视角 的地址,特别是在使用 DMA(Direct Memory Access)内存映射 I/O(MMIO) 时,这一点非常关键。

iATU 作为一个地址转换单元,通常与 PCIe 根端口PCIe 桥 相关联,负责在设备的地址空间和主机的地址空间之间进行地址映射。它使得设备能够访问主机系统的内存或其他资源,尤其是在以下几种场景中:

  1. 设备访问主机内存:例如,一个 PCIe 设备(如网卡、存储控制器等)需要通过 DMA 访问主机的内存。这时,设备发出的地址需要通过 iATU 进行转换,使得主机可以正确地识别和处理这些地址。
  2. 设备的 MMIO(内存映射 I/O)访问:设备访问内存映射的 I/O 地址时,iATU 负责将设备请求的地址转换成主机能够理解的地址。
  3. 虚拟化支持:在虚拟化环境中,iATU 允许多个虚拟机(VM)访问同一物理设备,并进行有效的地址映射,确保各虚拟机的隔离性。

iATU 的工作流程

  1. 初始化地址映射

    • 在系统启动时,iATU 会根据配置表(通常由 BIOS 或操作系统设置)初始化设备和主机的地址映射关系。它配置将 PCIe 设备请求的虚拟地址空间 映射到 主机的物理地址空间
  2. 地址转换

    • 当 PCIe 设备发起访问请求时(如内存读写或 DMA),iATU 会将设备发出的虚拟地址转换为主机系统的物理地址。
    • iATU 会根据配置好的映射规则,将设备访问的地址进行转换,并转发到相应的内存位置。
  3. 地址映射更新

    • iATU 可以动态更新映射表,支持设备与主机内存之间的实时地址映射调整。
  4. 地址映射控制与管理

    • iATU 可以支持 多个地址映射区,以支持复杂的硬件配置,如支持多个设备、多个虚拟机等。

iATU 的硬件架构

iATU 通常由以下几个主要部分组成:

  1. 地址映射表

    • 这是 iATU 的核心部分,用于存储虚拟地址到物理地址的映射关系。它通常有多个条目,每个条目对应一个地址范围的映射。
  2. 地址转换逻辑

    • 这是实际执行地址转换的模块。当设备发出访问请求时,地址转换逻辑会根据地址映射表将请求的虚拟地址转换为物理地址。
  3. 控制寄存器

    • iATU 包含一些控制寄存器,用于配置和控制地址映射的工作。操作系统或固件可以通过这些寄存器配置映射关系。
  4. 错误处理单元

    • 当出现地址访问错误(如地址越界)时,iATU 会触发错误信号或中断,通知主机系统进行处理。

iATU 典型的使用场景

  1. DMA 地址转换
    • PCIe 设备通常使用 DMA 技术访问内存,而主机系统中的内存和设备的内存地址通常是不一样的。iATU 在这种情况下会负责将设备请求的地址(DMA 地址)映射到主机的物理内存地址。
  2. PCIe 桥接器与多设备配置
    • 在多个设备的 PCIe 总线拓扑中,iATU 可以实现设备地址空间的转换,确保设备之间的内存访问和 I/O 请求能够正确映射。
  3. 虚拟化
    • 在虚拟化系统中,多个虚拟机需要访问物理设备的共享资源。iATU 可以帮助在物理地址和虚拟地址之间建立映射,保证虚拟机对物理设备的访问安全性。

iATU 架构框图

下面是一个典型的 iATU 架构的示意图,帮助理解其工作原理:

+-------------------------+
|    PCIe 设备/外设       |
|                         |
|  [虚拟地址] ------------>|
+-------------------------+
            |
            v
+-------------------------+
|         iATU            |
|  [地址映射表]            |
|  地址转换逻辑           |
|  错误处理单元           |
+-------------------------+
            |
            v
+-------------------------+
|      主机内存           |
|    [物理地址]           |
+-------------------------+
  • PCIe 设备/外设:设备发出内存或 I/O 请求。
  • iATU:负责将设备的虚拟地址转换为主机的物理地址。它有一个地址映射表和转换逻辑,可以支持多条地址映射关系。
  • 主机内存:设备通过 iATU 完成地址转换后,最终访问到主机的物理内存。

总结

iATU(Internal Address Translation Unit) 是 PCIe 系统中的关键组件,用于在 PCIe 设备和主机之间实现地址转换。它通过在设备请求的虚拟地址和主机的物理地址之间进行转换,确保设备能够正确地访问主机内存或 I/O 空间。iATU 主要应用于 DMA、内存映射 I/O(MMIO)、虚拟化等场景,保证数据的正确传输和设备间的高效通信。

PCIe 的 iATU(Internal Address Translation Unit) 是一个用于在 [PCIe 总线](https://so.csdn.net/so/search?q=PCIe 总线&spm=1001.2101.3001.7020)和内部处理器之间进行地址转换的硬件模块。。iATU 主要用于将设备地址映射到主内存或其他地址空间,确保 PCIe 设备可以访问系统内存并与其他设备进行通信。它通常存在于 Root Complex(RC)桥接器(Bridge) 中,负责对 PCIe 设备发出的内存访问请求进行地址转换。

posted @ 2025-06-11 11:47  yooooooo  阅读(368)  评论(0)    收藏  举报