RTL implementation of components for DVB-S2
Loading README and project media…
This project aims to implement RTL components for DVB-S2, initially focusing on the transmission side.
![]() |
|---|
| Functional block diagram of the DVB-S2 System from ETSI EN 302 307-1 V1.4.1 |
| Component name | Simulation | HW testing | HW integration |
|---|---|---|---|
| Baseband scrambler | ✔️ | TODO | TODO |
| BCH encoder | ✔️ | TODO | TODO |
| Bit interleaver | ✔️ | TODO | TODO |
| Constellation mapper | TODO | TODO | TODO |
| LDPC Encoder | ✔️ | TODO | TODO |
| Physical layer framing | TODO | TODO | TODO |
The dvb_fpga/rtl/dvbs2_tx.vhd
top level has been run through Vivado targeting a xczu4cg-sfvc784-1LV-i and
with a clock frequency of 333 MHz (both arbitrary). No timing issues were
reported and the resource usage post implementation is as follows:
| Resource | Usage |
|---|---|
| LUT | 2864 |
| LUTRAM | 106 |
| FF | 2197 |
| BRAM | 16 |
Tests can be run locally or on a Docker container. Running locally will require GNU Radio, VUnit and a VHDL simulator.
Uses the same container used for CI
# Clone this repo and submodules
git clone --recurse-submodules https://github.com/phase4ground/dvb_fpga
cd dvb_fpga
# Run the tests
./misc/run_tests.sh
Arguments passed to docker/run_tests.sh will be passed to run.py and, by
extension, to VUnit (no environment variable is passed on though). This will
generate gnuradio_data (test data).
# Install VUnit
pip install vunit-hdl
# Clone this repo and submodules
git clone --recurse-submodules https://github.com/phase4ground/dvb_fpga
cd dvb_fpga
# Run the tests
./run.py
The first invocation of run.py will run GNURadio and create stimulus files.
To list tests use ./run.py -l:
$ ./run.py -l
lib.axi_bit_interleaver_tb.data_width=8,all_parameters.back_to_back
lib.axi_bit_interleaver_tb.data_width=8,all_parameters.slow_master
lib.axi_bit_interleaver_tb.data_width=8,all_parameters.slow_slave
lib.axi_bit_interleaver_tb.data_width=8,all_parameters.both_slow
lib.axi_ldpc_table_tb.test_all_configs.back_to_back
lib.axi_ldpc_table_tb.test_all_configs.slow_master
lib.axi_ldpc_table_tb.test_all_configs.slow_slave
lib.axi_ldpc_table_tb.test_all_configs.slow_master,slow_slave
lib.axi_bch_encoder_tb.test_all_configs.back_to_back
lib.axi_bch_encoder_tb.test_all_configs.slow_master
lib.axi_bch_encoder_tb.test_all_configs.slow_slave
lib.axi_bch_encoder_tb.test_all_configs.both_slow
lib.dvbs2_tx_tb.test_all_configs.back_to_back
lib.axi_ldpc_encoder_core_tb.test_all_configs.back_to_back
lib.axi_ldpc_encoder_core_tb.test_all_configs.data=0.5,table=1.0,slave=1.0
lib.axi_ldpc_encoder_core_tb.test_all_configs.data=1.0,table=1.0,slave=0.5
lib.axi_ldpc_encoder_core_tb.test_all_configs.data=0.75,table=1.0,slave=0.75
lib.axi_ldpc_encoder_core_tb.test_all_configs.data=1.0,table=0.5,slave=1.0
lib.axi_ldpc_encoder_core_tb.test_all_configs.data=1.0,table=0.75,slave=0.75
lib.axi_ldpc_encoder_core_tb.test_all_configs.data=0.8,table=0.8,slave=0.8
lib.axi_baseband_scrambler_tb.test_all_configs.back_to_back
lib.axi_baseband_scrambler_tb.test_all_configs.slow_master
lib.axi_baseband_scrambler_tb.test_all_configs.slow_slave
lib.axi_baseband_scrambler_tb.test_all_configs.both_slow
Listed 24 tests
Scripts are provided as an example to get things going, currently this has not been tested in real hardware.
./misc/run_synth.sh
vivado -source ./build/vivado/build.tcl