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.

Table 25-5. Example of 32-Bit Polynomial CRC Setup
Bit Name Bit Value Description
CHCTRL-CRCk.CRCMD3‘b110 or 3’b10132-bit polynomial length using CRCPOLYA or CRCPOLYB registers
CRCPOLYA or POLYB0001

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
Table 25-6. Example of 16-Bit Polynomial CRC Setup
Bit Name Bit Value Description
CHCTRL-CRCk.CRCMD3‘b011 or 3’b01016-bit polynomial length using CRCPOLYA or CRCPOLYB registers
CRCPOLYA or POLYB0000

0011

0000

1101

0000

0110

0000

010-

CRC polynomial: x16+ x13+ x12+ x11+ x10+ x8 + x6 + x5 + x2+1