Programmable Reed-Solomon for the IEEE 802.16 Wireless Standard
ECC Tek's existing Programmable RS encoder and decoder designs for the IEEE 802.16 Wireless Standard operate on 8-bit bytes and allow "on-the-fly" programmability so that the number of errors corrected, t, and the block length, N, can be changed on-the-fly on a block by block basis without the need for any gaps between received words and the decoder latency/delay is minimized.
For each "message" to be encoded, the encoder receives values for the block length, N, and the amount of redundancy to add, R. The value for R determines the encoder circuit configuration. A simplified block diagram of the encoder data flow structure is shown below.
The encoder receives messages of length K bytes in a byte-serial fashion and appends R redundant bytes onto each message to form a "codeword" of length N = K + R bytes. The encoder adds R bytes of redundancy to a K byte message and the decoder can correct up to T errors and S erasures in a received word of N bytes as long as 2T + S ≤ R. N and R are programmable variables. Values for N can range from 6 to 255. Values for R can range from 0 to 32 in increments of 2.
The decoder inputs a "received word" and corrects up to T errors and S erasures as long as 2T + S ≤ R. A block diagram of the decoder architecture is shown below.
If the decoder detects that it is attempting to correct errors in a received word which contains more errors than it is capable of correcting, it will set an output signal immediately after outputting the corrected version of the received word indicating that an uncorrectable error pattern has been detected.
The decoder counts the number of errors corrected in each received word and outputs the count several clock cycles after the last byte of the corrected word has been sent out.
The decoder can either operate in the "continuous" mode or "burst" mode. The continuous mode is considered a subset of the burst mode in that it is a burst of length 1. When in the burst mode, the decoder keeps a burst_id tag equal to 0 or 1. The "burst_id" tag is one of the outputs from the decoder. All of the codewords within a burst are of the same length.