Git Product home page Git Product logo

cocotb-test's Introduction

cocotb-test

Build Status PyPI version

cocotb-test provides standard python unit testing capabilities for cocotb

  • allow the look and feel of Python unit testing
  • remove the need for Makefiles (includes Makefile compatibility mode)
  • allow easy customization of simulation flow
  • allow to use pytest-xdist or pytest-parallel for parallel runs

Usage:

  • Install cocotb.

  • Install simulator (for Icarus Verilog with conda):

conda install -c conda-forge iverilog
  • Install the package via pip:
pip install cocotb-test

 or development version

pip install -v https://github.com/themperek/cocotb-test/archive/master.zip

 or

git clone https://github.com/themperek/cocotb-test.git
pip install -v -e cocotb-test
  • Create a test_dff.py file (check test folder for more examples):
from cocotb_test.simulator import run
def test_dff():
    run(
        verilog_sources=["dff.v"], # sources
        toplevel="dff",            # top level HDL
        module="dff_cocotb"        # name of cocotb test module
    )
  • Run pytest (need dff.v and dff_cocotb.py in same directory where running pytest):
SIM=icarus pytest -o log_cli=True test_dff.py
  • To clean (remove all sim_build folders):
cocotb-clean -r

Arguments for simulator.run:

  • toplevel: Use this to indicate the instance in the hierarchy to use as the DUT.

  • module: The name of the module(s) to search for test functions (see MODULE ).

  • python_search : List of additional directoreis to search for python/cocotb modules.

  • verilog_sources: A list of the Verilog source files to include.

  • vhdl_sources: A list of the VHDL source files to include.

  • toplevel_lang: see TOPLEVEL_LANG. (default: verilog)

  • includes: A list of directories to search for includes.

  • defines: A list of the defines.

  • parameters: A dictionary of top-level parameters/generics.

  • compile_args: Any arguments or flags to pass to the compile stage of the simulation.

  • sim_args: Any arguments or flags to pass to the execution of the compiled simulation.

  • extra_args: Passed to both the compile and execute phases of simulators.

  • plus_args: plusargs arguments passed to simulator.

  • force_compile: Force compilation even if sources did not change. (default: False)

  • compile_only: Only compile sources. Do not run simulation. (default: False)

  • testcase: The name of the test function(s) to run (see TESTCASE ).

  • sim_build: The directory used to compile the tests. (default: sim_build)

  • work_dir: The directory used to tun the tests. (default: same as sim_build argument)

  • seed: Seed the Python random module to recreate a previous test stimulus (see RANDOM_SEED ).

  • extra_env: A dictionary of extra environment variables set in simulator process.

  • waves: Enable wave dumps (not all simulators supported).

  • gui: Starts in gui mode (not all simulators supported).

Environmental variables:

  • SIM: Selects which simulator to use. (default: icarus)
  • WAVES: Overwrite enable wave dumps argument. Example use WAVES=1 pytest test_dff.py.

pytest arguments

  • cocotbxml: Combines and saves junitxml reports from cocotb tests. Example use pytest --cocotbxml=test-cocotb.xml.

Tips and tricks:

  • List all available test:
pytest --collect-only
  • Run only selected test:
pytest -k test_dff_verilog_param[3]
@pytest.mark.parametrize("width", [{"WIDTH_IN": "8"}, {"WIDTH_IN": "16"}])
def test_dff_verilog_testcase(width):
    run(
        ...
        parameters=width,
        sim_build="sim_build/" + "_".join(("{}={}".format(*i) for i in width.items())),
    )
pytest -n NUMCPUS

Running (some) tests and examples from cocotb

For cocotb tests/examples install cocotb in editable mode

git clone https://github.com/potentialventures/cocotb.git
pip install -e cocotb
SIM=icarus pytest -o log_cli=True --junitxml=test-results.xml --cocotbxml=test-cocotb.xml tests

Related resources

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.