Verification with PyUVM

I verified each of the modules using PyUVM. This was my first time getting a complete picture of how UVM works, so I’m going to create this post of how I set everything up and then a quick summary of my understanding of UVM now.

Verification

Setup

Install pyuvm for testing and gtkwave for viewing waveforms.

I needed to use a python virtual environment to install pyuvm.

    python3 -m venv env
    source ./env/bin/activate
    pip install pyuvm
    sudo apt install gtkwave

Testing

Navigate to the directory of the module you want to test and run make.

    cd verif/<MODULE>
    make

To see the waveforms, run make waves.

How UVM works

UVM is a standard method for RTL verification. It uses a number of reusable modules make verification faster, easier, and maintainable. These are the main modules.

Sequence items

Contain a set of inputs for the Design Under Test (DUT).

Sequencer

Schedules the sequence items.

Driver

Drives the inputs to the DUT, based on sequence items received from the sequencer.

Monitor

Monitors the DUTs inputs and outputs, and passes them to the scoreboard and coverage.

Scoreboard

Verifies the current outputs collected by the monitor are correct.

Coverage

Collects the output from the monitor and makes sure certain conditions are covered by the end of testing, such as making sure all possible inputs are tested.

Environment

Links each of the components together.