首页 理论教育PCIe总线架构介绍

PCIe总线架构介绍

【摘要】:PCI总线0上存储器控制器是一个比较特殊的PCI设备,这个设备除了需要管理DDR SDRAM之外,还管理整个存储器域的地址空间,包括PCI总线域地址空间。从传统外部设备的角度上看,PCI总线0的Device 0并不是一个设备,仅存放与处理器系统密切相关的一组参数。值得注意的是,在x86处理器中,PCI总线0的Device 0的存在并不完全是为了向前兼容,而是Intel使用PCI总线概念统一所有外部设备的方法。表5-1 Device 0的基本配置空间Device 0使用的基本配置空间与其他PCI设备兼容。

PCI总线0上存储器控制器(Device 0)是一个比较特殊的PCI设备,这个设备除了需要管理DDR SDRAM之外,还管理整个存储器域的地址空间,包括PCI总线域地址空间。在x86处理器系统中,该设备是管理存储器域空间的重要设备,其中含有许多与存储器空间相关的寄存器。

这些寄存器对于系统程序员理解x86处理器的存储器拓扑结构非常重要,对底层编程有兴趣的系统程序员需要掌握这些寄存器。但是在x86处理器系统中,由于BIOS的存在,绝大多数系统程序员并没有机会实际使用这些寄存器。

从底层开发的角度上看,x86处理器系统并不如PowerPC、MIPS和ARM处理器透明。x86处理器首先使用BIOS屏蔽了处理器的硬件实现细节,其次在处理器内核中使用了Mi-crocode[15]进一步屏蔽了CPU的实现细节。这使得底层程序员在没有得到充分的资源时,几乎无法开发x86处理器的底层代码。

但是不可否认的是x86处理器底层开发的复杂程度超过PowerPC、MIPS和ARM处理器,因为x86处理器系统作为通用CPU需要与各类操作系统兼容,而向前兼容对于任何一种处理器都是一个巨大的包袱。x86处理器系统使用BIOS和Microcode屏蔽硬件细节基于许多深层次的考虑,包括技术和商业上的考虑,这种做法在PC领域取得了巨大的成功。

从传统外部设备的角度上看,PCI总线0的Device 0并不是一个设备,仅存放与处理器系统密切相关的一组参数。而除了x86处理器之外,几乎所有处理器都使用存储器映射寻址的寄存器保存这些参数。

x86处理器需要考虑向前兼容,因此存在许多独特的设计。这些独特的设计极易使一些初学者混淆计算机体系结构中的一些基本概念。从这个角度来看,x86处理器并不适合教学,但这并不影响x86处理器在PC领域的地位。值得注意的是,在x86处理器中,PCI总线0的Device 0的存在并不完全是为了向前兼容,而是Intel使用PCI总线概念统一所有外部设备的方法。

在Montevina平台中,系统软件使用Type 00h配置请求访问存储器控制器,该存储器控制器除了具有一个标准PCI Agent设备的64B的配置空间之外,还使用了PCI设备的扩展配置空间,其包含的主要寄存器如表5-1所示。

表5-1 Device 0的基本配置空间

978-7-111-29822-9-Part02-38.jpg(www.chuimin.cn)

Device 0使用的基本配置空间与其他PCI设备兼容。这里值得注意的是Device 0在PCIe体系结构中,被认为是HOST主桥。而Device 0使用的PCI扩展配置空间也被称为RCRB,RCRB的主要作用是描述当前处理器的存储器地址拓扑结构,包括主存储器地址和PCI总线地址。其简写和复位值如表5-2所示。

表5-2 Device 0的扩展PCI配置空间

978-7-111-29822-9-Part02-39.jpg

(续)

978-7-111-29822-9-Part02-40.jpg

系统软件首先检查Capability Identifier寄存器,该寄存器的地址偏移为0xE0,即CAP-PTR寄存器指向的地址为0xE0。该Capability结构使用的PCI Express Extended Capability ID字段(该字段在CAPID0寄存器中)为0x0A,因此表5-2中的寄存器组为RCRB Capability结构,有关Capability结构的组成结构见第4.3节。

在x86处理器系统中,RCRB存放一些与处理器系统相关的寄存器。而在许多处理器中,如在PowerPC处理器中并不含有RCRB。在PowerPC处理器中,与处理器系统相关的寄存器都存放在以BASE_ADDR为起始地址的1MB连续的物理地址空间中,PowerPC处理器系统使用存储器映射寻址方式访问这些寄存器。

在x86处理器系统中,使用PCI总线管理所有外部设备,这些“与处理器系统相关的寄存器”被保存在RCRB中,处理器使用PCI总线配置周期访问这些寄存器。实际上在RCRB中包含的寄存器与PCIe体系结构并没有直接关系,这些寄存器应该属于存储器域的地址区域。x86处理器的这种做法并非完全合理,在某种程度上容易使初学者混淆存储器域与PCI总线域的区别。RCRB主要寄存器的含义如下所示。