The decoder implements an on-line parity check to allow early termination (if
enabled). There is also an option in the
Vivado®
IDE, Include Output Parity Check, to implement a final parity check block, separately to
the decoder. When enabled in the Vivado IDE, this
determines whether the output produced on the final iteration passes the parity check
when early termination does not occur or is not enabled (otherwise the value is that
calculated by the on-line circuit for the previous iteration). Where possible, the check
is performed in parallel with data output over DOUT
,
otherwise it is only the status output that is delayed until the updated pass flag is
available. This takes a similar amount of time to one iteration of the decoder.
The OPC only supports codes where the total number of base matrix entries including any padding for packing (sum(packed(DC))) is less than or equal to 1024; OPC is automatically disabled by the core if an unsupported code is specified. This condition is also reported by the Vivado IDE. For large blocks it can also reduce peak throughput (although this is somewhat mitigated when smaller blocks are mixed with large blocks). . Also, for codes with a large number of circulants per iteration, the maximum number of blocks interleaved can be reduced, increasing stall cycles and reducing throughput. The number of effective circulants can be increased by packing. To avoid throughput reduction, the final parity check can be turned off by setting NO_FINAL_PARITY_CHECK to 1. If information bit correctness is established using CRC, the final parity has limited value, and the final parity check is not required. Note that early termination using a passing parity check can still be performed when the final parity check is disabled. For the 5G NR standard, the OPC is disabled because information bit correctness is established by a CRC check on the output of the decoder (parity pass can still be used for early termination).