Does the PCI Express core support the ECRC (Digest) on Transactions Layer Packets?
The PCI Express core does not add the digest ECRC to outgoing TLPs; however, if the ECRC field is added by the user, the core leaves the field in the packet. Also, it does not check the integrity of the incoming TLP based on the ECRC. On incoming packets, the core will look at the TD field and if it is a 1, the core checks the size of the packet. If TD=1, it expects the packet to contain an extra DWORD, which is the ECRC. If TD=1 and this extra DWORD does not exist, the core treats the packet as malformed. Whenever the core detects a malformed TLP, the packet is discarded and the appropriate error message is automatically transmitted without user intervention. If TD=1 and the ECRC exists in the packet, the core will pass the packet on the user containing ECRC.
The user application can develop its own logic to support generating and adding the ECRC to outgoing packets. Then on incoming packets, the user application can develop its own logic to check the integrity of the packet based on the ECRC value.
Also an option exists in the configuration file that will allow users to instruct the core to strip the ECRC out of incoming packets. This is bit 508 and is called the "trim TLP digest ECRC bit" in the configuration file. If the user decides that it does not want to receive the ECRC if it does exist on the incoming TLP, the core will remove it. This option is available to allow users to simplify their packet handling logic.