Files
PeakRDL-BusDecoder/tests/README.md
2025-10-10 22:30:59 -07:00

3.7 KiB

Test Dependencies

Questa

Testcases require an installation of the Questa simulator, and for vlog & vsim commands to be visible via the PATH environment variable.

Questa - Intel FPGA Starter Edition can be downloaded for free from Intel:

Vivado (optional)

To run synthesis tests, Vivado needs to be installed and visible via the PATH environment variable.

Vivado can be downloaded for free from: https://www.xilinx.com/support/download.html

Python Packages

Install dependencies required for running tests

python3 -m pip install -r tests/requirements.txt

Running tests

Tests can be launched from the test directory using pytest. Use pytest --workers auto to run tests in parallel.

To run all tests:

python3 setup.py install
pytest tests

You can also run a specific testcase. For example:

pytest tests/test_hw_access

Command-line arguments can be used to explicitly select which simulator/synthesis tools are used If unspecified, the tool will be selected automatically based on what you have installed.

pytest --sim-tool questa --synth-tool vivado

Alternatively, launch tests using the helper script. This handles installing dependencies into a virtual environment automatically.

cd tests
./run.sh

Test organization

The goal for this test infrastructure is to make it easy to add small-standalone testcases, with minimal repetition/boilerplate code that is usually present in SystemVerilog testbenches.

To accomplish this, Jinja templates are used extensively to generate the resulting tb.sv file, as well as assist in dynamic testcase parameterization.

CPU Interfaces

Each CPU interface type is described in its own folder as follows:

lib/cpuifs/<type>/__init__.py
Definitions for CPU Interface test mode classes.
lib/cpuifs/<type>/tb_inst.sv
Jinja template that defines how the CPU interface is declared & instantiated in the testbench file.
lib/cpuifs/<type>/*.sv
Any other files required for compilation.

Testcase

Each testcase group has its own folder and contains the following:

test_*/__init__.py
Empty file required for test discovery.
test_*/busdecoder.rdl
Testcase RDL file. Testcase infrastructure will automatically compile this and generate the busdecoder output SystemVerilog.
test_*/tb_template.sv
Jinja template that defines the testcase-specific sequence.
test_*/testcase.py
Defines Python unittest testcase entry point.

Parameterization

Testcase classes can be parameterized using the parameterized extension. This allows the same testcase to be run against multiple permutations of busdecoder export modes such as CPU interfaces, retiming flop stages, or even RDL parameterizations.