接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(26)
2.5 非透明PCI桥
本回将结合实例说明直接地址翻译过程。
2.5.2 通过非透明桥片进行数据传递
下文以图2-16中处理器x访问处理器y存储器地址空间的实例,说明非透明桥21555如何将PCI总线x域与PCI总线y域联系在一起。
处理器x需要访问处理器y的存储器空间之前,需要做一些必要的准备工作。具体如下:
(1)首先确定由哪一个BAR寄存器空间映射处理器y的存储器地址空间。本节假定使用BAR2寄存器映射处理器y的存储器地址空间。
(2)BAR2寄存器使用Downstream Memory 2 Translated Base寄存器,将来自Primary PCI总线的访问转换为对Secondary PCI总线地址空间的访问。其中Downstream Memory 2 Translated Base寄存器可以由处理器x或者处理器y根据需要进行设置。
假定处理器x和y的HOST主桥使用“直接相等”策略,建立存储器域与PCI总线域间的映射;而处理器x使用BAR2地址空间访问处理器y存储器空间0x1000-000~0x1FFF-FFFF;处理器x的系统软件事先将BAR2寄存器设置完毕。处理器x访问处理器y的这段存储器空间的步骤如下,读者可参考图2-18理解这一步骤。
(1)首先处理器x访问在处理器x域中、且与非透明桥的BAR2空间相对应的存储器地址空间;
(2)HOST主桥将进行存储器域到PCI总线域的转换,并将这个请求发送到Primary PCI总线上;
(3)非透明桥发现这个数据请求发向BAR2地址空间,则接收这个数据请求,并在桥片中暂存这个数据请求;
(4)非透明桥根据Downstream Memory 2 Translated Base寄存器的内容,按照图2-17所示的规则进行地址转换。假设Downstream Memory 2 Translated Base寄存器的基地址被预先设置为0x10000000,大小为256MB(这个物理地址属于处理器y的主存储器地址空间)。
(5)经过非透明桥的转换后,这个数据请求将穿越非透明桥,从Primary PCI总线域进入Secondary PCI总线域,然后访问处理器y的基地址为0x10000000的存储器区域;
(6)处理器y的HOST主桥接收这个存储器访问请求,并最终将数据请求发向处理器y的存储器。
非透明桥21555除了可以支持存储器到存储器之间的数据传递,还支持PCI总线域到存储器域、以及PCI总线域之间的数据传递,此外非透明桥21555还可以通过I2O和Doorbell寄存器进行Primary PCI总线与Secondary PCI总线之间的中断信号传递。本节对这部分内容不做进一步介绍。
非透明桥有效解决了使用PCI总线连接两个处理器存在的问题,因而得到了广泛的应用。在PCIe体系结构中,也存在非透明PCI桥的概念。如在PLX的Switch芯片中,各个端口都可以设置为非透明模式。
至此,“2.5 非透明PCI桥”就全部讲解完了。
2.6 小结
本章介绍了在PCI总线中使用的桥,包括HOST主桥和PCI桥,并较为详细地介绍了如何使用这些桥访问PCI设备的配置空间。
其中HOST主桥并不在PCI总线规范的约束范围内,不同的处理器可以根据需要设计出不同的HOST主桥。本篇更加侧重介绍PowerPC处理器使用的HOST主桥,在该主桥的设计中,提出了许多新的概念,并极大促进了PCI总线的发展,在这个桥片中出现的许多新的思想被PCI V3.0总线规范采纳。
在PowerPC处理器的HOST主桥中,明确了存储器域与PCI总线域的概念。而区分存储器域与PCI总线域也是本章的书写重点,本书将始终强调这两个域的不同。有些处理器系统并没有明确区分这两个域的差别,因此许多读者忽略了PCI总线域的存在,并错误地认为PCI总线域是存储器域的一部分。
在本篇中,还重点介绍了PCI桥的实现机制。在许多较为简单处理器系统中,并不包含PCI桥,但是读者仍然需要深入理解PCI桥这一重要概念。深入理解PCI桥的运行机制,是理解PCI体系结构的重要基础。