与Posted事务的关键差异是,Non-Posted 事务的发起者是需要收到从目标设备返回的完成报文后,事务才算结束。如果目标设备由于某种原因并未返回完成,那将会导致发起者接收完成超时CO(Completion Timeout)。Configuration read and write, IO read and write, and Memory read都属于Non-Posted事务。读很好理解,需要返回数据。而Config write和IO write这两种对设备的访问,都是必须要求得到设备的响应的,所以它们也是Non-Posted事务。

Completer返回的完成报文(Cpl)可能是成功(SC: Success Comletion),也可能是CA(Completer Abort)或者UR(Unsupported Request)。当然,Non-Posted的发起者是知道这个报文是不是到达了目的地。

我们看几个例子:

1、首先是IO Write的例子,RC向EP发起IO写请求,EP收到后,返回给RC的完成报文是不带数据的Cpl。

 2、EP发起内存读请求,通常是EP上的DMA发起,RC把数据返回给EP,完成报文是带数据的。

3、EP向另一个EP发起读请求,注意RC中的黄色虚线,前面我们提过,这种称之为Peer-to-peer传输。另一个EP返回带数据的完成报文。

附:文中几个缩写的含义。

缩写含义
MRdMemory Read
IORdIO  REad
CfgRd0, CfgRd1Configuration Read(Type 0 and Type 1)
CfgWr0,CfgWr1Configuration Write(Type 0 and  Type 1)
CplDCompletion with Data
CplCompletion without Data

Config 有type0和type1两种,分别对应EP和Switch。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注