PCI的Delayed总线事务与PCI-X的Split总线事务

(Delayed总线事务个人理解:周期性require,遇到返回完成信号,则不再进行require,要是超过了retry周期,则自动停止该请求)
( Split总线事务个人理解:无需周期性询问,接收方完成请求,主动发送数据)

如果处理器使用Non-Posted总线周期对PCI设备进行读操作,或者PCI设备使用Non-Posted总线事务对存储器进行读操作时,如果数据没有到达目的地,那么在这个读操作路径上的所有PCI总线都不能被释放,这将严重影响PCI总线的使用效率。
为此PCI桥需要对Non-Posted总线事务进行优化处理,并使用Delayed总线事务处理这些Non-Posted总线事务,PCI总线规定只有Non-Posted总线事务可以使用Delayed总线事务。PCI总线的Delay总线事务由Delay读写请求和Delay读写完成总线事务组成,当Delay读写请求到达目的地后,将被转换为Delay读写完成总线事务。

在这里插入图片描述

假设处理器通过存储器读、I/O读写或者配置读写访问PCI设备22时,首先经过HOST主桥进行存储器域与PCI总线域的地址转换,并由HOST主桥发起PCI总线事务,然后通过PCI桥1、2,最终到达PCI设备22。其详细步骤如下。
(1) HOST主桥完成存储器域到PCI总线域的转换,然后启动PCI读总线事务。
(2) PCI桥1接收这个读总线事务,并首先使用Retry周期,使HOST主桥择时重新发起相同的总线周期。此时PCI桥1的上游PCI总线将被释放。值得注意的是PCI桥并不会每一次都使用Retry周期,使上游设备择时进行重试操作。在PCI总线中,有一个“16 Clock”原则,即FRAME#信号有效后,必须在16个时钟周期内置为无效,如果PCI桥发现来自上游设备的读总线事务不能在16个时钟周期内结束时,则使用Retry周期终止该总线事务。
(3) PCI桥1使用Delayed总线请求继续访问PCI设备22。
(4) PCI桥2接收这个总线请求,并将这个Delayed总线请求继续传递。此时PCI桥2也将首先使用Retry周期,使PCI桥1择时重新发起相同的总线周期。此时PCI桥2的上游PCI总线被释放。
(5) 这个数据请求最终到达PCI设备22,如果PCI设备22没有将数据准备好时,也可以使用Retry周期,使PCI桥2择时重新发起相同的总线周期;如果数据已经准备好,PCI设备22将接收这个数据请求,并将这个Delayed总线请求转换为Delayed总线完成事务。如果Delayed总线请求是读请求,则Delayed总线完成事务中含有数据,否则只有完成信息,而不包含数据。
(6) Delayed总线完成事务将“数据或者完成信息”传递给PCI桥2,当PCI桥1重新发出Non-Posted总线请求时,PCI桥2将这个“数据或者完成信息”传递给PCI桥1。
(7) HOST主桥重新发出存储器读总线事务时,PCI桥1将“数据或者完成信息”传递给HOST主桥,最终完成整个PCI总线事务。

由以上分析可知,Delayed总线周期由Delayed总线请求和Delayed总线完成两部分组成。下文将Delayed读请求总线事务简称为DRR(Delayed Read Request),Delayed读完成总线事务简称为DRC(Delayed Read Completion);而将Delayed写请求总线事务简称为DWR(Delayed Write Request),Delayed写完成总线事务简称为DWC(Delayed Write Completion)。

PCI总线使用Delayed总线事务,在一定程度上可以提高PCI总线的利用率。因为在进行Non-Posted总线事务时,Non-Posted请求在通过PCI桥之后,可以暂时释放PCI总线,但是采用这种方式,HOST/PCI桥将会择时进行重试操作。在许多情况下,使用Delayed总线事务,并不能取得理想的效果,因为过多的重试周期也将大量消耗PCI总线的带宽。

为了进一步提高Non-Posted总线事务的执行效率,PCI-X总线将PCI总线使用的Delayed总线事务,升级为Split总线事务。采用Split总线事务可以有效解决HOST/PCI桥的这些重试操作。Split总线事务的基本思想是发送端首先将Non-Posted总线请求发送给接收端,然后再由接收端主动地将数据传递给发送端

除了PCI-X总线可以使用Split总线事务进行数据传送之外,有些处理器,如x86和PowerPC处理器的FSB(Front Side Bus)总线也支持这种Split总线事务,因此这些HOST主桥也可以发起这种Split总线事务。在PCIe总线中,Non-Posted数据传送都使用Split总线事务完成,而不再使用Delayed总线事务。

Split总线事务是PCI-X总线一个重要特性。该总线事务替代了PCI总线的Delayed数据传送方式,从而提高了Non-Posted总线事务的传送效率。下文以存储器读为例,说明PCI-X设备如何使用Split总线事务。
PCI-X总线在进行存储器读总线事务时,总线事务的发起方(Requester)使用Split总线事务与总线事务接收端(Completer)进行数据交换,其步骤如下。
(1) Requester向Completer发起存储器读请求总线事务。
(2) 这个存储器读请求在到达Completer之前,可能会经过多级PCI-X桥。这些PCI-X桥使用Split Response周期结束当前总线事务,释放上游PCI总线。之后继续转发这个存储器读请求,直到Completer认领这个存储器读请求总线事务。
(3) Completer认领存储器读请求总线事务后,将记录将Requester的ID号,并使用Split Response周期结束存储器读请求总线事务。
(4) Completer准备好数据后,将重新申请总线,并使用存储器读完成总线事务主动地将数据传送给Requester。在这个完成报文中包含Requester的ID号,因为完成报文使用ID路由而不是地址路由。
(5) 这些完成报文根据ID路由方式,最终到达Requester。Requester从完成报文中接收数据并完成整个存储器读请求。
与Delayed总线事务相比,Requester获得的数据是Completer将数据完全准备好后,由Completer主动传递的,而不是通过Requester通过多次重试获得的,因此能够提高PCI-X总线的使用效率。PCI-X总线提出的Split总线事务被PCIe总线继承。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值