协议审查示例
现在,让我们通过一个示例来回顾整个 Link 协议,以说明从 Requester 发起内存读取请求到从 Completer 获得请求的数据所发生的步骤。
内存读取请求
有关讨论的第一部分,请参阅图 2-32。请求者的设备内核或软件层向事务层发送请求,并包括以下信息:32 位或 64 位内存地址、事务类型 ,以双字计算的要读取的数据量,流量类别,字节启用,属性等。 事务层使用此信息来构建 MRd TLP。 TLP 数据包格式的详细信息将在后面描述,但现在可以说根据地址大小(32 位或 64 位)创建 3 DW 或 4 DW 标头就足够了。此外,事务层将请求者 ID(总线#、设备#、函数#)添加到标题中,以便完成者可以使用它来返回完成。 TLP 被放置在适当的虚拟通道缓冲区中以等待轮到传输。一旦选择了 TLP,流控制逻辑会确认相邻设备的接收缓冲区 (VC) 中有足够的可用空间,然后将内存读取请求 TLP 发送到数据链路层。 数据链路层向数据包添加一个 12 位序列号和一个 32 位 LCRC 值。带有序列号和 LCRC 的 TLP 副本存储在重放缓冲区中,数据包被转发到物理层。 在物理层中,开始和结束字符被添加到数据包中,然后在可用通道上进行字节条带化、加扰和 8b/10b 编码。最后,这些位在每个通道上被序列化,并通过链路以不同的方式传输到邻居。 Completer 将传入的比特流反序列化为 10 位符号,并将它们传递给弹性缓冲区。 10 位符号被解码回字节&
|