Download as pdf or txt
Download as pdf or txt
You are on page 1of 59

UVM Tips and Tricks

- Runtime Tips
Presented by Srivatsa Vasudevan - Synopsys, Inc.

Slides by Srinivasan Venkataramanan, VerifWorks

© 2014-2016, www.verifworks.com
UVM TB Hierarchy

uvm_test_top
uvm_driver
uvm_env uvm_agent
uvm_sequencer

uvm_monitor

uvm_scoreboard

2/29/2016 © 2014-2016, www.verifworks.com 2


Factory Pattern + Constraint Example

s2p_xactn_with_payload_pattern Program
Environment

Monitor scoreboard
components

Transactions
s2p_xactn

Command

component

2/29/2016 © 2014-2016, www.verifworks.com 3


Simulation
# UVM_INFO @ 0: reporter [RNTST] Running test factory_test...

# UVM_INFO @ 0: reporter [] Doing build


ns s2p_env [Trace:INTERNAL] | Building verification environment...

# UVM_INFO @ 0: uvm_test_top [FACTORY] Overriding s2p_xactn with pattern


testcase

# UVM_INFO @ 0: uvm_test_top.env_0.agent0.driver [S2P_DRIVER] S2P_DRIVER : item


sent is --------------------------------------------------------------------
--
# Name Type Size Value
# ----------------------------------------------------------------------
# req s2p_xactn_with_pld+ - req@67
# pkt_pld integral 32 'hff

2/29/2016 © 2014-2016, www.verifworks.com 4


Multiple Overrides - Replace
1st override

set_type_override_by_type(
.original_type
(s2p_xactn::get_type()),
.override_type( A while later..
s2p_err_xn::get_type()));
// ... some time later
set_type_override_by_type(
.original_type
(s2p_xactn::get_type()),
.override_type(
s2p_new_err_xn::get_type())
Default - replace
.replace(1));

2/29/2016 © 2014-2016, www.verifworks.com 5


Multiple Overrides - Replace

• Sample log
• ID: TPREGR

[TPREGR] Original object type ’s2p_xactn'


already registered to produce ’s2p_err_xactn'.
Replacing with override to produce type
’s2p_new_err_xn'.

2/29/2016 © 2014-2016, www.verifworks.com 6


Multiple Overrides - Ignore
1st override

set_type_override_by_type(
.original_type
(s2p_xactn::get_type()),
.override_type( A while later..
s2p_err_xn::get_type()));
// ... some time later
set_type_override_by_type(
.original_type
(s2p_xactn::get_type()),
.override_type(
s2p_new_err_xn::get_type())
replace = 0
.replace(0));

2/29/2016 © 2014-2016, www.verifworks.com 7


Multiple Overrides - Ignore

• Sample log
• ID: TPREGRD

[TPREGD] Original object type ’s2p_xactn'


already registered to produce ’s2p_err_xactn'.
Set 'replace' argument to replace the existing
entry.

2/29/2016 © 2014-2016, www.verifworks.com 8


Replace in Instance Specific
Override?

• No “replace” feature in instance specific API


• No warning/information from UVM BCL either!

2/29/2016 © 2014-2016, www.verifworks.com 9


Factory Debug

• UVM has built-in debug features for factory


• uvm_factory::print()
– Not a static method though!

Recommended

2/29/2016 © 2014-2016, www.verifworks.com 10


Factory Debug - Print

• all_types = 1 (Default)

Registered user
types

2/29/2016 © 2014-2016, www.verifworks.com 11


Factory Debug - Print

• all_types = 0 (Recommended by VerifLabs, CVC)

Overrides alone!

2/29/2016 © 2014-2016, www.verifworks.com 12


Factory Debug - Print

• all_types = 2 (Includes uvm_* too)

Overrides +
Registered user
types +
UVM_*

2/29/2016 © 2014-2016, www.verifworks.com 13


Factory Undo? Anyone?

• Allowed in UVM 1.2


• Needs a work-around in UVM
1.1d

2/29/2016 © 2014-2016, www.verifworks.com 14


Undo Trial…

A while later..
set_type_override_by_type(
.original_type
(s2p_xactn::get_type()),
.override_type(
s2p_err_xn::get_type()));
set_type_override_by_type(
.original_type
(s2p_xactn::get_type()),
.override_type(
s2p_xactn::get_type()));

2/29/2016 © 2014-2016, www.verifworks.com 15


Undo – Error in UVM 1.1d

• Sample log
• ID: TYPDUP

[TYPDUP] Original and override type arguments


are identical: s2p_xactn

2/29/2016 © 2014-2016, www.verifworks.com 16


uvm_component::new()
• Consistent, pre-defined prototype for new() for all
components
– name (string)
– parent (uvm_component)
• All components – driver, sequencer, monitor, etc.
SHOULD use this
class s2p_driver extends uvm_driver #(s2p_xactn);
function new(string name,
uvm_component parent);
super.new(name, parent);
endfunction : new

2/29/2016 © 2014-2016, www.verifworks.com 17


s2p_agent::build_phase()

 Use factory pattern – type_id::create()


Instead
of new()

s2p_driver_0 = s2p_driver::type_id::create
("s2p_driver_0",this);

s2p_sqr_0 =
s2p_sequencer::type_id::create
("s2p_sqr_0",this); name
end

2/29/2016 © 2014-2016, www.verifworks.com 18


Instance Paths - name

2/29/2016 © 2014-2016, www.verifworks.com 19


axi_fabric_env – How to Name It?

Crazy??

2/29/2016 © 2014-2016, www.verifworks.com 20


axi_fabric – Factory Overrides

Fails 

OK 

Better!

2/29/2016 © 2014-2016, www.verifworks.com 21


Objections in UVM

• No news is good news


• By default no one objects!
– Hence test ends at ZERO time if not taken care of!

2/29/2016 © 2014-2016, www.verifworks.com 22


Scalable End Of Test via “Objection”

http://www.cvcblr.com/blog/?p=414

2/29/2016 © 2014-2016, www.verifworks.com 23


Test Should raise_objection

http://www.cvcblr.com/blog/?p=414

2/29/2016 © 2014-2016, www.verifworks.com 24


Debugging Phase Execution

• UVM has built-in debug feature for Phases


• vw_uvm_sim +UVM_PHASE_TRACE
• Look for ID - [PH/TRC/*]

UVM_INFO @ 0: reporter
[PH/TRC/SKIP] Phase
'uvm.uvm_sched.main' (id=284)
No objections raised, skipping phase

2/29/2016 © 2014-2016, www.verifworks.com 25


Advanced Debug Methodology –
Hangs?
Built-in
display_
objections

http://www.cvcblr.com/blog/?p=681

2/29/2016 © 2014-2016, www.verifworks.com 26


Advanced Debug Methodology –
Hangs?

The above indicates there are 3 folks opposing


it with clear pointers to who they are.

http://www.cvcblr.com/blog/?p=681

2/29/2016 © 2014-2016, www.verifworks.com 27


Phase Jumping

• UVM allows phase jumps


– Forward
– Backward
• Handy if a test wants to “run” few times
• Multiple runs through:
– reset-cfg-main-shutdown
– cfg-main-shutdown
– reset-main

2/29/2016 © 2014-2016, www.verifworks.com 28


Subsystem Test

• phase_ready_to_end callback

2/29/2016 © 2014-2016, www.verifworks.com 29


Subsystem Test

• Mimics reset,
config via
#delays
• Uses a virtual
sequence in
main_phase

2/29/2016 © 2014-2016, www.verifworks.com 30


Innings Break!

Innings
break!

2/29/2016 © 2014-2016, www.verifworks.com 31


Second Innings
Match
not over
yet!

JUMP!

2/29/2016 © 2014-2016, www.verifworks.com 32


Phase Synchronization

• By default, all components must allow all other


components to complete a phase before all
components move to next phase

VIP 1: reset configure main shutdown

VIP 2: reset configure main shutdown

VIP 3: reset configure main shutdown

time

2/29/2016 © 2014-2016, www.verifworks.com 33


UVM Domain

2/29/2016 © 2014-2016, www.verifworks.com 34


Phases - Guidelines

• Use correct phasing


• Use objections
• Learn UVM CLP for debug
• Advanced debug – display_objections
• Jumps are cool!
– And useful 
• Can also use domains!
– Advanced topic, call us again 

2/29/2016 © 2014-2016, www.verifworks.com 35


UVM Config DB
Configuration Database

2/29/2016 © 2014-2016, www.verifworks.com 36


Field Name vs. Value

• Typically field_name and value are kept the same


• Not a must, set and get must agree on the
field_name

2/29/2016 © 2014-2016, www.verifworks.com 37


Field Name vs. Value

Field
value
name

2/29/2016 © 2014-2016, www.verifworks.com 38


Field Name vs. Value

Field
name

value

2/29/2016 © 2014-2016, www.verifworks.com 39


What if “set”, no “get”?

• Usually a BIG problem!


• Hard to detect bugs (TB bugs)
• uvm_component has handy debug functions for
this!

2/29/2016 © 2014-2016, www.verifworks.com 40


check_config_settings

2/29/2016 © 2014-2016, www.verifworks.com 41


check_config_settings
Set
num_masters
(write)

NO get
(read)

2/29/2016 © 2014-2016, www.verifworks.com 42


Config DB Auditing

2/29/2016 © 2014-2016, www.verifworks.com 43


Sample Log of Audit

2/29/2016 © 2014-2016, www.verifworks.com 44


Command Line Processor

2/29/2016 © 2014-2016, www.verifworks.com 45


UVM CLP Max Error Count

+UVM_MAX_QUIT_COUNT=2 Quit after N number of


errors

Default  No limit

Only aware of `uvm_error

SVA action blocks, DPI calls


should use uvm_error

2/29/2016 © 2014-2016, www.verifworks.com 46


UVM CLP Options for Debug

• Built into UVM library at the major points of execution


• Dump important runtime data into log for debug or post-
processing
• Can be activated from command line options
+UVM_PHASE_TRACE Turns on tracing of phase
execution
+UVM_OBJECTION_TRACE Turns on tracing of objection
activities
+UVM_RESOURCE_DB_TRACE Turns on tracing of resource DB
access (get & set)
+UVM_CONFIG_DB_TRACE Turns on tracing of configuration
DB access

2/29/2016 © 2014-2016, www.verifworks.com 47


+UVM_CONFIG_DB_TRACE

SET-s

GET-s

2/29/2016 © 2014-2016, www.verifworks.com 48


+UVM_CONFIG_DB_TRACE

• ID: CFGDB/GET, CFGDB/SET

2/29/2016 © 2014-2016, www.verifworks.com 49


+UVM_OBJECTION_TRACE

• Displays “added objections” for raise_objection

2/29/2016 © 2014-2016, www.verifworks.com 50


+UVM_OBJECTION_TRACE

• Displays “dropped objections” for drop_objection


• ID: OBJTN_TRC

2/29/2016 © 2014-2016, www.verifworks.com 51


Popular, Simple Options

• +UVM_TESTNAME=my_test
– Executes “class my_test extends from uvm_test”
– Should be registered with factory
• `uvm_component_utils (my_test)
– Overrides value (if present) in code:
• run_test (“default_test”)
– Only one test is run at a time

2/29/2016 © 2014-2016, www.verifworks.com 52


UVM_TESTNAME - Multiple

• Multiple values – ignored, warning issued


• vw_uvm_sim +UVM_TESTNAME=first_test
+UVM_TESTNAME=second_test

Multiple (2) +UVM_TESTNAME arguments


provided on the command line.
'first_test' will be used.
Provided list: first_test, second_test

2/29/2016 © 2014-2016, www.verifworks.com 53


Verbosity Setting

• vw_uvm_sim +uvm_set_verbosity Template

vw_uvm_sim
+uvm_set_verbosity=<comp>,<id>,<verbo
sity>,<phase|time>,<offset>
Example

vw_uvm_sim
+uvm_set_verbosity=uvm_test_top.env0.
agent1.*,_ALL_,UVM_FULL,time,800

2/29/2016 © 2014-2016, www.verifworks.com 54


Severity Override in CMD Line

• vw_uvm_sim +uvm_set_severity Template

vw_uvm_sim
+uvm_set_severity=<comp>,<id>,<orig_s
everity>,<new_severity>
Example

vw_uvm_sim
+uvm_set_severity=uvm_test_top.env_0.
*,SBRD,UVM_INFO,UVM_WARNING

2/29/2016 © 2014-2016, www.verifworks.com 55


Changing “action” on Messaging

• vw_uvm_sim +uvm_set_action Template

vw_uvm_sim
+uvm_set_action=<comp>,<id>,<severity
>,<action[|action]>
Example

vw_uvm_sim
+uvm_set_action=uvm_test_top.env_0.*,
_ALL_,UVM_INFO,UVM_NO_ACTION

2/29/2016 © 2014-2016, www.verifworks.com 56


UVM CLP - Guidelines

• Change verbosity, severity, error count on CMD


line
• Avoid factory overrides via CMD line
– Hard to regress
– Verification becomes spread across UVM, Perl/Scripts

2/29/2016 © 2014-2016, www.verifworks.com 57


Summary

• Runtime tricks & tips in UVM


• Several built-in hooks in UVM for run-time
debug
• Look for our DVRules product to flag these @
http://www.verifworks.com
• Use our DVCreate tools to generate quality
UVM

2/29/2016 © 2014-2016, www.verifworks.com 58


Thank You!

2/29/2016 © 2014-2016, www.verifworks.com 59

You might also like