这段文字的重点是关于 TLP Digest 和 ECRC(端到端 CRC)的处理规则。
1. TLP Digest 和 ECRC
• TD 位:这是 TLP(事务链路包)头部的一个字段,表示 TLP 是否包含 TLP Digest。如果 TD 位 设置为 1,那么这个 TLP 就包含一个 TLP Digest,也就是一个 ECRC(端到端 CRC) 校验值。
○ ECRC 是一种用于保证数据完整性的检查码,它可以验证传输过程中数据是否被损坏。
2. TD 位与 TLP 大小的匹配
• 如果一个 TLP 的 TD 位 设置为 1,但 TLP 的实际数据大小(包括有效载荷)和该位所指示的大小不符,那么这个 TLP 被认为是 Malformed TLP(格式错误的 TLP)。换句话说,如果 TD 位 表示有 ECRC 校验,但实际 TLP 的数据大小不符合预期,那么接收方应该视其为无效的数据包。
○ 这种错误会被记录下来,并报告给接收端的端口。
3. 接收方的处理
• 如果接收端的 PCI Express 接收器 不支持 ECRC 校验,那么它会忽略这个 TLP Digest 字段,也就是说,不会验证 ECRC。
• 如果接收端 支持 ECRC 校验,那么接收方就需要对 TLP 中的 ECRC 校验值进行验证,确保传输过程中数据没有被篡改或损坏。
4. 总结
• TD 位 设置为 1 表示这个 TLP 带有 ECRC 校验值,用于确保数据完整性。
• 如果 TD 位 与实际数据大小不匹配,则视为格式错误(Malformed TLP)。
• 支持 ECRC 校验的接收器会对这个校验值进行验证,而不支持的接收器则会忽略它。
简而言之,ECRC 是一种用于验证数据完整性的机制,而 TD 位用来指示该机制是否启用。如果启用了,但数据包的大小不符,就会发生错误。接收方会根据是否支持 ECRC 来决定是否检查数据的完整性。