LUT-LDPC-VHDL is a software tool that uses the optimized look-up tables designed by the the LUT-LDPC software in order to generate VHDL code and simulation files for a fully-unrolled LDPC decoder (cf. [3-4]).
All necessary steps to download and install LUT-LDPC as well as LUT-LDPC-VHDL and perform a reference decoder design on Ubuntu 17.10 are documented in the Quickstart guide. More detailed explanations of those steps are provide in the following sections.
For the generation of the VHDL code, the LUT-LDPC-VHDL software requires an installation of MATLAB or quivalently GNU Octave. It has been tested and verified to be working with MATLAB R2016b and GNU Octave 4.2.1. The simulation of the generated VHDL code with the provided testbenches requires a functioning installation of ModelSim.
The LUT-LDPC-VHDL software is installed as part of the LUT-LDPC software tools. The installation procedure is described in detail here. After the installation, the VHDL generation scripts can be found in the lut_ldpc_vhdl
directory.
The lut_ldpc_vhdl
folder has the following structure
.
├── ModelSim # Scripts and files for compilation and simulation with ModelSim
├── TopLevelDecoder # Generated VHDL files for LUT-based decoder
├── TopLevelDecoderGenerator # VHDL generation scripts for LUT-based decoder
├── TopLevelDecoderAdders # Generated VHDL files for baseline adder-based decoder
├── TopLevelDecoderGeneratorAdders # VHDL generation scripts for baseline adder-based decoder
└── README.md # This README file
The VHDL generation scripts can generate fully-unrolled decoders using a standard adder-based min-sum decoding algorithm as well using optimized LUTs. The adder-based decoders are mainly meant as a baseline for a comparison with the LUT-based decoders. The VHDL generation scripts currently have a number of constraints with respect to the LUT-LDPC-VHDL software tools. Specifically:
- Irregular LDPC codes are not supported.
- Check node LUTs are not supported.
- Re-using LUTs for consecutive iterations is not supported.
- Downsizing of LUTs is not supported.
The adder-based decoders are generated by the MATLAB script TopLevelDecoderGeneratorAdders/topLevelDecoderGenerator.m
. The following parameters can be set freely (we also provide the default values)
H_filename = '../../codes/rate0.84_reg_v6c32_N2048.alist'; % LDPC code parity-check matrix in alist format
param.QLLR = 5; % Quantization bit-width for internal LLRs
param.QCh = 5; % Quantization bit-width for channel LLRs
param.maxIter = 5; % Maximum number of decoding iterations
All remaining parameters are derived from the parity-check matrix of the code. The generated VHDL files can be found in the TopLevelDecoderAdders
folder.
The LUT-based decoders are generated by the MATLAB script TopLevelDecoderGenerator/topLevelDecoderGenerator.m
. Unlike the adder-based generation script, the LUT-based generation script is not stand-alone in the sense that a decoder has to be designed first using the LUT LDPC C++ libraries. An example of this procedure can be found here.
and here
The following parameter can be set freely (we also provide the default value from the above example)
param.lut_codec_filename = '../../results/RES_N2048_R0.841309_maxIter8_zcw0_frames20_minLUT/lut_codec.it'; % Codec filename generated by the C++ program
All remaining parameters are derived from the parity-check matrix of the code and the remaining loaded files. The generated VHDL files can be found in the TopLevelDecoder
folder.
The compilation scripts for the LUT-based decoder and adder-based decoder (compile.sh
) are provided in ModelSim/BIN_Decoder
and ModelSim/BIN_DecoderAdder
. Once the HDL files have been compiled into the work library, the simulation is run by running the scrips (run.sh
), provided in simillar directories, as compile.sh
. Note that you need to update the variables: VCOM, VLIB, VSIM, in the shell scripts according to your ModelSim installation.
The in/out stimulis are provided in ModelSim/OUT
directory and are generated as described here
If you use this software for your academic research, please consider referencing our original contributions [1,2,3,4].