25.7.8.11 CRC Calculations
The CRC engine is a parallel CRC circuit.
The engine implements a programmable internal feed-back LSFR in parallel fashion. Since internal feedback is provided, zero padding at the end of a data block is not required to obtain the final CRC. The engine operates either on 8-bits, 16-bits, or 32-bits of data per clock cycle and supports either 16-bit or 32-bit polynomials. Any combination of 8/16/32 bit word length and 16/32 bit polynomial are supported.
Data entering the block will be reordered such that the CRC checksum calculated for a block is the same regardless of read address mode (byte mode, half-word mode, or word mode). This reordering is completely transparent to software and is independent from the BYTORD setting chosen by the user. Because the system is little endian, in order to get the same CRC result, read halfwords will be byte swapped, and read words will have bytes in reverse order.
Bit Name | Bit Value | Description | |||
---|---|---|---|---|---|
CHCTRL-CRCk.CRCMD | 3‘b110 or 3’b101 | 32-bit polynomial length using CRCPOLYA or CRCPOLYB registers | |||
CRCPOLYA or POLYB | 0001 0110 | 1110 1111 | 1101 0100 | 1100 000- | CRC polynomial: x32+x28+x27+ x26 + x25+ x23+ x22 + x20 + x19 + x18 + x14 + x13 + x11 + x10 + x9 + x8+x6+1 |
Bit Name | Bit Value | Description | |||
---|---|---|---|---|---|
CHCTRL-CRCk.CRCMD | 3‘b011 or 3’b010 | 16-bit polynomial length using CRCPOLYA or CRCPOLYB registers | |||
CRCPOLYA or POLYB | 0000 0011 | 0000 1101 | 0000 0110 | 0000 010- | CRC polynomial: x16+ x13+ x12+ x11+ x10+ x8 + x6 + x5 + x2+1 |