UVM Phases: Run - Test Method
UVM Phases: Run - Test Method
UVM Phases: Run - Test Method
UVM Phases
Build phases
Run phases
Cleanup phases.
A typical UVM testbench is built with a top level module which contains the DUT
and the testbench connections.
The top level module contains an initial block which will contain a call to the UVM
run_test() method.
This method start the execution of the UVM phases, which controls the order of
which the testbench is built, stimuli is generated and then reports on the results of the
simulation.
The image below from Accellera’s UVM User Guide describe a typical UVM
Testbench structure.
You can think of the UVM Test component as the substitute to the stimulus traditionally
created using RTL and more. The UVM testbench a.k.a. Top instantiates this UVM Test
dynamically during run-time, allowing the UVM Testbench to be compile once and run with
many different tests.
The UVM Test component applied stimulus by invoking UVM Sequences and configures the
Env (Environment) using factory overrides or the config database. Usually there is one base
UVM Test with the UVM Env instantiation but we can then extend this base test and
configure it differently to cover other sequences to run.
UVM Environment
The UVM Environment is a grouping of other verification components that are typically
interrelated. For example, you might have an USB Environment that groups the verification
components targeting the USB portion of the DUT, alongside an Env for Memory Controller,
an Env for I2C controller, etc. A UVM Env typically contains UVM Agents, UVM
Scoreboards or even another UVM Environments.
UVM Scoreboard & UVM Agent
The UVM Scoreboard is to check the behavior of a certain DUT while the UVM Agent
consists of a UVM Driver to apply stimulus to the interface of the DUT and a UVM
Monitor monitors this interface. The UVM Agent typically also consists of a UVM
Sequencer to manage the stimulus flow.
The UVM Sequencer serves and arbiter for controlling transaction flow of UVM
Sequence Items transactions.