《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(5)

发布时间:2024年01月04日

接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(4)

2.1 存储器域与PCI总线域

2.1.3 处理器域内容较多,为了便于理解,余下内容放到本回。

2.1.3 处理器域

HOST主桥进行不同地址域间的数据交换时,需要遵循以下规则。为区别存储器域到PCI总线域的地址映射,下面将PCI总线域到存储器域的地址映射称为反向映射

(1)处理器访问PCI总线域地址空间时,首先需要访问存储器域的地址空间再通过HOST主桥将存储地址转换为PCI总线地址之后才能进入PCI总线域进行数据交换PCI设备使用的地址空间保存在各自的PCI配置寄存器中,即BAR寄存器中。这些PCI总线地址空间需要在初始化时映射成为存储器域的存储器地址空间,之后处理器才能访问这些地址空间。在有些处理器的HOST主桥中,具有独立的寄存器保存这个地址映射规则,如PowerPC处理器的Outbound寄存器组;而有些处理器,如在x86处理器中,虽然没有这样的寄存器组,但是在HOST主桥的硬件逻辑中仍然存在这个地址转换的概念(上回曾讲到)。

(2)PCI设备访问存储器域时,首先需要访问PCI总线域的地址空间再通过HOST主桥将PCI总线地址转换为存储器地址,才能穿越HOST主桥进行数据转换。为此,处理器需要通过HOST主桥将这个PCI总线地址反向映射为存储器地址。PCI设备不能访问在PCI总线域中没有进行这种反向映射的存储器域地址空间。PowerPC处理器使用Inbound寄存器组存放PCI设备所能访问的存储器空间,而在x86处理器中并没有这样的寄存器组,但是依然存在这个地址转换的概念。

(3)如果HOST主桥不支持Peer-to-Peer传送方式,那么分属不同PCI总线域的PCI设备间不能直接进行数据交换。在32位的PCI总线中,每一个PCI总线域的地址范围都是0x00000000~0xFFFFFFFF,但是这些地址没有直接联系。PCI总线x域上的PCI总线地址0x00000000与PCI总线y域上的PCI总线地址0x00000000并不相同,而且这两个PCI总线地址经过HOST主桥反向映射(PCI总线域到存储器域的地址映射)后,得到的存储器地址也不相同。

在PowerPC处理器中,HOST主桥的实现比较完整,尤其是PCI总线域与存储器域的映射关系比较清晰,便于读者准确掌握这一重要概念;而在x86处理器中,由于考虑向前兼容(backward compatibility),设计中包含了太多的不得已。x86处理器有时不得不保留原设计中的不完美。向前兼容是Intel的重要成就,也是一个“沉重的十字架”。

至此,第2章第1节“存储器域与PCI总线域”全部结束。

文章来源:https://blog.csdn.net/phmatthaus/article/details/135383833
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。