PCI桥规范定义了透明桥的实现规则。通过PCI透明桥,处理器系统可以以HOST主桥为根节点,建立一颗PCI树,在这棵树上的PCI设备共享同一个PCI总线域上的地址空间。
但是在某些场合PCI透明桥并不适用,比如无法通过PCI透明桥连接两个处理器系统,不便解决两个处理器间的地址冲突,可以通过PCI非透明桥解决这个问题。非透明桥不是PCI总线定义的标准桥片,但是这类桥片在连接两个处理器系统中得到了广泛的应用。
比如两个处理器系统,各自拥有自己的PCI总线域,通过PCI非透明桥就可以将这两个PCI总线域联接在一起。注意的是,非透明PCI桥的作用是对不同PCI总线域地址空间进行隔离,而不是隔离存储域地址空间;HOST主桥的作用才是将存储器域与PCI总线域进行隔离。
非透明PCI桥可以连接两条独立的PCI总线,虽然一条被称为Primary PCI总线,一条称为Secondary PCI总线,但是这两条总线没有从属关系,两边是完全对等的。也就是说,从处理器的角度来说,总是其对端的PCI总线为Secondary PCI总线,而起自身PCI总线为Primary总线。
对于非透明桥的PCI桥片来说,包含两个PCI配置空间,分别是Primary PCI总线配置空间和Secondary PCI总线配置空间,在大多数情况下,在Primary PCI总线上的Host处理器管理Primary PCI配置空间,在Secondary PCI总线上的Host处理器管理Secondary PCI配置空间。以Primary PCI配置空间为例(Secondary PCI总线的配置寄存器也基本雷同),其配置寄存器共分为两组,一组寄存器与PCI设备的配置寄存器的BAR0~5对应,这些寄存器与标准PCI配置寄存器BAR0~5的功能相同;另一组寄存器是Translated Base寄存器,这组寄存器的主要作用是将来自Primary PCI总线的数据访问转换到Secondary PCI总线。整体配置寄存器组如下:
Offset Registers corresponded PCI reg
0x10-0x13 Primary CSR and Memory 0 BAR BAR0
0x14-0x17 Primary CSR I/O BAR BAR1
0x18-0x1B DS memory 1 BAR BAR2
0x1C-0x1F DS memory 2 BAR BAR3
0x20-0x23 DS memory 3 BAR BAR4
0x24-0x27 DS memory 3 upper 32 bits BAR5
0x94-0x97 DS Memory 0 Translated Base
0x98-0x9B DS I/O or Memory 1 Translated Base
0x9C-0x9F DS Memory 2 Translated Base
0xA0-0xA3 DS Memory 3 Translated Base
|
对于Primary PCI总线,所有BAR0~5寄存器映射的地址空间都将占用Primary PCI总线域,然而这些地址空间中所对应的数据并不在Primary PCI总线域中,而是在Secondary PCI总线域中。Translated Base寄存器实现不同PCI总线域地址空间的转换。
假设处理器X使用BAR2寄存器映射处理器Y的存储器地址空间,BAR2寄存器使用DS Memory 2 Translated Base来将来自Primary PCI总线的访问转换为对Secondary PCI总线地址空间的访问。整个访问过程如下:
1. 首先处理器X访问在处理器X域中,且与非透明桥的BAR2空间相对应的存储器地址空间。
2. HOST主桥将进行存储器域到PCI总线域的转换,并将这个请求发送到Primary PCI总线上
3. 非透明桥发现这个数据请求发向BAR2地址空间,则接收这个数据请求,并在桥片中暂存这个数据请求
4. 非透明桥根据DS Memory 2 Translated Base寄存器的内容,进行地址转换。假设其基地址预先设为0x1000-0000。
5. 经过非透明桥的转换后,这个数据请求将穿越非透明桥,从Primary PCI总线域进入Secondary PCI总线域,访问处理器Y的基地址为0x1000-0000的存储器区域。
6. 处理器Y的HOST主桥将接收这个存储器访问请求,并最终将数据请求发向处理器Y的存储器中。
阅读(3151) | 评论(0) | 转发(1) |