首页 理论教育PCIExpress总线序通用规则

PCIExpress总线序通用规则

【摘要】:PCI总线在进行数据传递时规定了一些规则。在图11-1所示的实例中,如果Flag位在PCI总线0上时,生产者需要通过PCI桥传递数据,并将Flag位置1,这两个操作都需要使用Posted存储器写总线事务。如果PCI不遵循“先进先出”的原则,有可能发生Flag位已经置1,而数据尚未完全到达数据缓冲,从而引发数据完整性问题。如图11-1所示,生产者通过PCI桥向数据缓冲写入数据,与消费者通过PCI桥更新Status状态位没有序的关系。

PCI总线在进行数据传递时规定了一些规则。

(1)PCI总线仅支持Posted存储器写总线事务,而配置和I/O写总线事务只能使用“Delayed”总线写事务实现。

(2)Posted存储器写总线事务需要按序完成。PCI桥必须按照“先进先出”的原则,处理Posted存储器写总线事务。在图11-1所示的实例中,如果Flag位在PCI总线0上时,生产者需要通过PCI桥传递数据,并将Flag位置1,这两个操作都需要使用Posted存储器写总线事务。如果PCI不遵循“先进先出”的原则,有可能发生Flag位已经置1,而数据尚未完全到达数据缓冲,从而引发数据完整性问题。

(3)双方向的数据写没有序的关系。如图11-1所示,生产者通过PCI桥向数据缓冲写入数据,与消费者通过PCI桥更新Status状态位没有序的关系。PCI桥会为双方向的数据传递设置独立的缓冲,两者间的数据传递没有序的要求。

(4)读请求通过PCI桥时需要进行数据同步。当来自任何主设备的读请求通过PCI桥时,PCI桥需要按照以下步骤处理这个读请求。

1)这个读请求总线事务首先被PCI桥暂存。该读请求可以穿越PCI桥,或者被PCI桥转换为Delayed读请求结束主设备的请求,并使主设备择时重试这个读请求。(www.chuimin.cn)

2)在PCI桥向目标总线发起读请求之前,需要将“与这个读请求方向相同的Posted写事务刷新出PCI桥。以图11-1为例,消费者在读取Flag位时,PCI桥中暂存的“从PCI总线0到PCI总线1”的Posted写总线事务都将刷新到PCI总线1中。该操作可以保证主设备可以从目标设备获得最新的Flag信息,因为“和读请求同方向”的写操作都从PCI桥中刷新出去。

3)PCI桥从目标总线上获得数据,因为在读取数据之前,已经将Posted写事务刷新出PCI桥,因此这个读操作可以获得最新的数据,从而保证了数据访问的一致性。

4)PCI桥将“与这个读完成方向相同的”Posted写事务刷新出PCI桥。以图11-1为例,将Posted写事务从桥片刷新到PCI总线0,此时主设备获得Flag信息后,可以保证所有的数据已经到达数据缓冲,因为“和读完成同方向的写操作都从PCI桥中刷新出去。

5)当主设备再次发出这个读请求时,PCI桥将传送在数据缓冲中的数据。

(5)Posted写总线事务可以穿越Non-Posted总线事务。PCI桥在等待其他Non-Posted总线事务完成时,能够接收Posted写总线事务,如果PCI桥不这样做,将可能引发死锁,如图11-3所示。这里有两个例外,一个是PCI桥的Posted写数据缓冲满时,PCI桥可以暂时不接收这个Posted写总线事务;另外一个是PCI桥正在处理一个“Locked”总线操作时,也可以不接收Posted写总线事务。