各种编码:
(1)ECRC/LCRC (为什么需要ECRC?)
(3)PCRC(Plaintext CRC,纯文本 CRC):是 IDE TLP 中的概念,在大多数方面,PCRC的计算方法与ECRC相同,并且CRC多项式是相同的。IDE TLP上不允许使用ECRC,因此任何TLP都不能同时拥有PCRC和ECRC。
(4)FEC(Forward error correction,向前纠错):基于字典将要传输的内容重新编码,接收者再根据接收内容、字典、hamming distace接收这部分内容。
LCRC(link CRC) | ECRC(End-toEnd CRC) | |
长度 | 32bit-TLP/16bit-DLLP | |
源/目的 | 用于检测两个连接的设备之间的链路上的错误,这些错误一般是由于物理层的信号质量问题引起的 | 用于检测Requester和completer之间的路径是否有损坏,ECRC是requester/initiaor的TL层生成的。 |
通过switch | 在入口被DLL层校验LCRC,在出口重新计算生产 | Switch不会修改内容 |
Switch收到错误报文时 | 要求对端重发 | 记录错误,继续转发 |
completer收到错误报文后 | 发送NAK报文给发送端,要求对端重发,重传过程不需要软件参与 | 发出一个不可修正的错误信息通知系统处理,没有重传机制,系统处理需要软件参与 |
是否可修正 | 可修正 | 不可修正 |
ECRC
多项式系数:04C11DB7(h)
Seed value(初始值):FFFFFFFF(h)
所有header field、End-End TLP Prefixes/OHC (如果有的话) 、data payload(如果有的话)都需要包含在ECRC计算中;
所有变化的域,在ECRC计算过程中都需要被认定为1:
(1)TLP header中type field中的bit 0;
(2)EP位
关于ECRC使用过程中的一些准则:
(1)一些基本准则;(2)针对switch的一些准则;
在NFM中,32位的ECRC值被放置在TLP的末尾的TLP Digest field字段中。在FM中,32位的ECRC值被放置在TLP Trailer中。
支持end-to-end data integrity检查的receiver收到包含ECRC的TLP该如何检查?
注意,计算出来的ECRC和32位TLP ECRC字段中对应的位置并不直接对应,存在一个对应关系: