1,MRd包的传输
以MRd TLP包的传输为例,说明一个Non-Posted事务的TLP是如何在PCIe系统层次中处理的。
1)Requester的软件层发送需要传送的信息给事务层。
2)事务层将数据打包成TLP的Header(和Data,MRd TLP没有Data),并根据需要是否附加ECRC,将完成的TLP存入相应的VC transmit buffer。流控制机制确保TLP在合适的时间被发送指数据链路层。
3)数据链路层将TLP前增加Sequence ID,并在后面附加LCRC。然后将TLP存入 Replay buffer备份,并将TLP传输给物理层。
4)物理层将TLP增加Start 和 End 字符,然后将TLP包进行字节拆分、加扰、编码、并串转换,再通过TX发送到链路上。
5)Completer的物理层RX接收到差分信号,将信号进行并串转换,在一个弹性buffer中组装数据包,(组装好的数据已经被解码、去扰了)。然后检测并删除Start和End字符。将最后得到的TLP发送给数据链路层。
6)数据链路层进行CRC检查。
6.1)如果没有错误,则形成ACK的DLLP包,通过物理层发送给对方。对方的数据链路层接收到ACK包后,会根据ACK包中的Sequence ID信息删除保存在Replay buffer中相应的TLP包。
6.2)如果有错误,则形成NAK的DLLP包,通过物理层发送给对方。对方的数据链路层接收到NAK包后,会根据NAK包中的Sequence ID信息重新发送保存在Replay buffer中对应的TLP包。
7)数据链路层删除TLP包的Sequence ID和 LCRC,将得到的TLP包发送给事务层相应的VC receive buffer。
8)事务层检查CRC错误(如果有ECRC),如果没有错误,则将TLP包中的信息发送给软件层。