Skip to content

Writing and managing Tests ​

Contents are extracted from the Advanced UVM sessions by Verification Academy.

What is a test? ​

The environment is the “testbench”

  • Defines what components are needed to verify the DUT
  • Specifies defaults

The test’s job is to “tweak” the tesbench

  • Configuration
  • Factory overrides
  • Additional sequences

The test’s other job is to ensure that the simulation ends

Defaults in UVM ​

Untitled

Can add additional check to make sure the value pass by the configuration DB from the test is still legal

Untitled

Use a Base Test to set defaults ​

There is option to override the environment type, make sure to do factory override before calling super.build inside the extended test

Untitled

Extend Base Test to create a Test ​

Untitled

To override the environment type as mentioned above:

Untitled

Set up and invoke test ​

Instantiate the DUT’s virtual interface and pass it down to the testbench through UVM config DB

Untitled

Complex environment, simple test ​

Untitled

Simple Test ​

Untitled

Extended Test ​

Untitled

The virtual sequence can also be overridden using the set_type_override method → Explicit sequence type override

Managing Test Execution: Phase objections ​

Components or Sequences can raise or drop objections

Phase continues until all raised objections are dropped

An objection must be raised at the beginning of the phase

Objections are hierarchical ​

Objections are raised up the hierarchy by default

Untitled

Sequencer’s objection + Monitor’s objection = 2 agent’s objections

Objections are dropped hierarchically too

Untitled

When a component’s count = 0, wait for drain_time to elapse

Untitled

Recommendation ​

Raise and drop objections inside the test

Allows the test to determine when all the stimulus is complete and start dropping the objection

Untitled

There might be cases where the objections is drop before the last transaction hasn’t finish processing yet

Using objections ​

Scoreboard recording transactions can raise an objection to prevent the test from ending early, make sure all the transactions has been recorded

Untitled

Not recommended since it will introduce additional overhead

Alternative solution:

Untitled

Recommendation: Objecting in a component ​

Using the provided method phase_ready_to_end to do the objection before ending the phase

Untitled

Summary ​

Untitled

DV Depot