Skip to content

Simulating the NEORV32 RISC-V Processor using the VUnit testing framework.

License

Notifications You must be signed in to change notification settings

stnolting/neorv32-vunit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Testing the NEORV32 with VUnit

VUnit is a powerful open-source unit testing framework for VHDL/SystemVerilog. It allows continuous and automated testing of HDL code by complementing traditional testing methodologies. The motto of VUnit is "testing early and often" through automation.

VUnit is composed by a http://vunit.github.io/py/ui.html[Python interface] and multiple optional http://vunit.github.io/vhdl_libraries.html[VHDL libraries]. The Python interface allows declaring sources and simulation options, and it handles the compilation, execution and gathering of the results regardless of the simulator used. That allows having a single run.py script to be used with any simulator.

On the other hand, VUnit's VHDL libraries provide utilities for assertions, logging, having virtual queues, handling CSV files, etc. The Verification Component Library uses those features for abstracting away bit-toggling when verifying standard interfaces such as Wishbone, AXI, Avalon, UARTs, etc.

Testbench sources in sim (such as sim/neorv32_vunit_tb.vhd and sim/uart_rx*.vhd) use VUnit's VHDL libraries for testing NEORV32 and peripherals. The entry-point for executing the tests is sim/run.py.

# ./sim/run.py -l
neorv32.neorv32_vunit_tb.all
Listed 1 tests

# ./sim/run.py -v
Compiling into neorv32:   rtl/core/neorv32_uart.vhd   passed
Compiling into neorv32:   rtl/core/neorv32_twi.vhd    passed
Compiling into neorv32:   rtl/core/neorv32_trng.vhd   passed
...