Project Name: Viterbi Decoder
Introduction
Viterbi Algorithm has been a legendary decoding algorithm for Convolutional Codes. It was found by Andrew J. Viterbi which was published on his paper "Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm," in IEEE Transactions on Information Theory, Volume IT-13, April 1967. Research and development then increasing to find more better and more eficient code generator for the Convolutional Codes and the architectural implementation of the Viterbi Algorithm.
Viterbi Algorithm is well used to find a maximally-likelihood decoded bits from a convolutional coded transmitted bits which transmission channel is interferenced by heavy noise such as Additive White Noise Gaussian (AWGN). Enough redundancies are added to combat the impairment of the transmission channel. As a result, Viterbi Algorithm could get an amazing low decoded Bit Error Rate (BER) compared to uncoded transmitted bits, showed by its BER to Eb/No graphical property. This performance could be parameterized by the Constraint Length (K) and Code Rate (R) of the Convolutional Encoder. And yes, we have trade offs around speed, area, and power while trying to implement the Viterbi Algorithm in a real hardware (full/semi custom VLSI).
Current Status:
finished working on functional & design specifications of VDK7R1/2 . Behavioural simulation using Verilogger Pro is OK.
building design for VDK9R1/2
Specifications
VDK7R1/2
Encoding Rate (R) : 1/2
Constraint Length (K) : 7
Generator Polynomials : 1558 and 1178
Big Endian Encoded Output
Hard Decision
VDK9R1/2
Encoding Rate (R) : 1/2
Constraint Length (K) : 9
Generator Polynomials :
Big Endian Encoded Output
3 bit quantized Soft Decision
Description
VDK7R1/2
VDK7R1/2 is an implementation of K=7 R=1/2 Viterbi Decoding Algorithm. There are five main block of the structure : hamming distance unit(HDU), add compare select unit (ACSU), metric register unit (MRU), survivor register unit (SRU), and traceback unit (TBU).
HDU performs hamming distance calculation to each of input codewords. Output of the HDU is an 128 array of hamming distances of 128 output branches compared to the codewords.
ACSU performs three of the most important operation of Viterbi Decoder :
Addition: hamming distances are added to previous relevant state metrics, resulting branch metrics.
Comparison: every two branch metrics as input to a same state are compared, resulting information of branch with lowest metrics. This information directs to the lower or upper branch as a survivor.
Selection: using result from comparison, selects the branch with lowest metrics.
After selection, ACSU also performs normalization to the value of metrics. The normalized values are tend to be next state metrics, kept by MRU.
SRU plays as a trellis window, keeps every state's survivors as a function of clock/time with a depth of 33. Finally, the TBU gets information of lowest state metric in a time, performs a succesive traceback of the survivors, and then produces the decoded output bits.
VDK9R1/2
As development from VDK7R1/2's basic model, a more huge structure will be implemented in VDK9R1/2. Convolutional Encoder will have states of 256. The trellis window's depth is about 45 (minimum), here we fight for speed, power, and area.
Next Step
design simulation and verification for VDK9R1/2
synthesizing HDL(s).
documentation
Documentation
Software & Tools
Author & Maintainer:
Mailing list: