SlideShare ist ein Scribd-Unternehmen logo
1 von 105
Downloaden Sie, um offline zu lesen
Universal Verification Methodology
(UVM)
Verifying Blocks to IP to SOCs and Systems
Organizers:
Dennis Brophy
Stan Krolikoski
Yatin Trivedi
San Diego, CA
June 5, 2011
2 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Workshop Outline
10:00am – 10:05am Dennis Brophy Welcome
10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture
10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing
11:25am – 11:40am Break
11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package
12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches
12:50pm – 1:00pm All Q & A
3 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Workshop Outline
10:00am – 10:05am Dennis Brophy Welcome
10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture
10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing
11:25am – 11:40am Break
11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package
12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches
12:50pm – 1:00pm All Q & A
UVM Concepts and Architecture
Sharon Rosenberg
Cadence Design Systems
5 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM Core Capabilities
• Universal Verification Methodology
– A methodology and a class library for building advanced
reusable verification components
– Methodology first!
• Relies on strong, proven industry foundations
– The core of the success is adherence to a standard
(architecture, stimulus creation, automation, factory usage, etc’)
• We added useful enablers and tuned a few to make
UVM1.0 more capable
• This section covers the high-level concepts of UVM
– Critical to successful deployment of UVM
– Mature and proven
6 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
The Goal: Automation
• Coverage Driven Verification (CDV) environments
 Automated Stimulus Generation
 Independent Checking
 Coverage Collection
Packaged for Reuse
23098432
38748932
23432239
17821961
10932893
20395483
18902904
23843298
23432432
24324322
55252255
09273822
13814791
4098e092
23432424
24242355
25262622
26452454
24524522
seed Monitor
Scoreboard
Checking
Coverage
Monitor
Driver
DUT
APB UARTTestsTests
Stimulus
Generator
Coverage
Coverage
Random
Sequence
Generator
7 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM Architecture:
Interface Level Encapsulation
• Agents provide all the verification logic
for a device in the system
• Instantiation and connection logic is
done by the developer in a standard
manner
• A Standard agent has:
– Sequencer for generating traffic
– Driver to drive the DUT
– Monitor
• The monitor is independent of the
driving logic
• Agent has standard configuration
parameters for the integrator to use
uvm_agent
uvm_
sequencerConfig:
uvm_monitor
events,
status,
data uvm_driver
DUT
interface
sequences
vivi
8 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Agent Standard Configuration
uvm_agent
Config:
is_active:
UVM_ACTIVE
min_addr:
16’h0100
uvm_monitor
events,
status,
data
DUT
• A standard agent is configured using an
enumeration field: is_active
• UVM_ACTIVE:
• Actively drive an interface or device
• Driver, Sequencer and Monitor are
allocated
• UVM_PASSIVE:
• Only the Monitor is allocated
• Still able to do checking and collect
coverage
• Other user-defined configuration parameters
can also be added
• Example: address configuration for
slave devices
uvm_
sequencer
uvm_driver
sequences
vivi
passive
9 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
uvm: Configurable Bus Environment
Environment
slave agent
sequencer
Config:
monitor
events,
status,
data
driver
seq
vivi
i/f
i/f
vi
master agent
sequencer
Config:
monitor
events,
status,
data
driver
seq
vivi
i/f
i/f
vi
Config:
slave agent
sequencer
Config:
monitor
events,
status,
data
driver
seq
arbiter agent
sequencer
Config:
monitor
events,
status,
data
driver
seq
monitor
events,
status,
data
Some agent config
parameters come from the
environment config
Allows changing the number of
agents without further
configuration per agent
master agent
sequencer
Config:
monitor
events,
status,
data
driver
seq
vivi
i/f
i/f
vi
master agent
sequencer
Config:
monitor
events,
status,
data
driver
seq
Virtual
interface
Sometimes common
for all agents
DUT
interfaceEnv’s allow reuse at the interface level!
num_masters=3
num_slaves=2
Bus level monitoring
can be used by all
agents
10 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM Configuration Mechanism
• The configuration mechanism allows a powerful way for
attribute configuration
• Configuration mechanism advantages:
– Mechanism semantic allows an upper component to
override contained components values
• No file changes are required
– Can configure attributes at various hierarchy locations
– Wild cards and regular expressions allow configuration of
multiple attributes with a single command
– Debug capabilities
– Support for user defined types (e.g. SV virtual interfaces)
– Run-time configuration support
– Type safe solution
11 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM1.0 Configuration
Enhancements (Cont’)
class uvm_config_db#(type T=int) extends uvm_resource_db#(T);
static function bit set ( uvm_component cntxt,
string inst_name,string field_name, T value);
static function bit get ( uvm_component cntxt,
string inst_name,string field_name, ref T value);
static function bit exists(…);
static function void dump();
static task wait_modified(…);
endclass
// run-time configuration example:
task mycomp::run_phase (uvm_phase phase);
uvm_config_db#(int)::set(this, “*”, “field”, 10);
#10; uvm_config_db#(int)::set(this, “a.b.c”, “field”, 20);
endtask
Note – all uvm_config_db
functions are static so they
must be called using the ::
operator
Check if configuration
exists
Dump the data base
Wait for value to be set in
the uvm_config_db
12 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
// setting the virtual interface from the top module
module ubus_top;
…
ubus_if ubus_if0(); // instance of the interface
initial begin
uvm_config_db#(virtual ubus_if)::
set(null,"*.ubus_demo_tb0.ubus0","vif", ubus_if0);
run_test();
…
end
endmodule
Virtual Interface Configuration
Example
function void ubus_bus_monitor:: connect_phase( uvm_phase phase);
if (!uvm_config_db#(virtual ubus_if)::
get(this, “”,"vif", vif))
else
`uvm_error("NOVIF",{"virtual interface must be set for: ",
get_full_name(),".vif"})
endfunction: connect_phase
Setting in the top removes hierarchy
dependencies in the testbench,
allows consistency and other
configuration capabilities
Built-in checking
13 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Where SV Language Stops and UVM Begins
Example: Data Items
Does language alone support all the necessary customization operations?
• Randomization
• Printing
• Cloning
• Comparing
• Copying
• Packing
• Transaction Recording
class data_packet_c ;
string pkt_name;
pkt_header _c header;
byte payload [ ];
byte parity;
parity_e parity_type;
int ipg_delay;
endclass
class data_packet_c ;
string pkt_name;
rand pkt_header _c header;
rand byte payload [ ];
byte parity;
rand parity_e parity_type;
rand int ipg_delay;
endclass
UVM provides the rest!
No! Only randomization is defined
in the SystemVerilog LRM
14 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Enabling Data Item Automation
class data_packet_c ;
string rev_no = “v1.1p”;
rand pkt_hdr _c header; //class:{dest_addr, pkt_length}
rand byte payload [ ];
byte parity;
rand parity_e parity_type;
rand int ipg_delay;
// Constraints, constructor, methods
. . .
endclass: data_packet_c
extends uvm_sequence_item;
derived from uvm_sequence_item
// field declarations and automation flags
`uvm_object_utils_begin(data_packet_c)
`uvm_field_string( rev_no, UVM_DEFAULT+ UVM_NOPACK)
`uvm_field_object( header, UVM_DEFAULT)
`uvm_field_array_int( payload, UVM_DEFAULT)
`uvm_field_int( parity, UVM_DEFAULT)
`uvm_field_enum( parity_e, parity_type, UVM_DEFAULT)
`uvm_field_int( ipg_delay, UVM_DEFAULT + UVM_NOCOMPARE)
`uvm_object_utils_end
// Additional: constraints, constructor, methods
endclass : data_packet_c Specify field level flags:
UVM_NOCOMPARE, UVM_NOPRINT, etc.
Enables all automation for
data_packet_c fields
15 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
// two instances of data_packet_c
data_packet_c packet1, packet2;
initial begin
// create and randomize new packet
packet1 = new(“my_packet”);
assert(packet1.randomize());
// print using UVM automation
packet1.print();
// copy using UVM automation
packet2 = new(“copy_packet”);
packet2.copy(packet1));
packet2.rev_no = “v1.1s”;
// print using UVM tree printer
packet2.print(
uvm_default_tree_printer);
end
Data Type Automation---------------------------------------
Name Type Value
---------------------------------------
my_packet data_packet_c @479
rev_no string v1.1p
header pkt_header_c @520
dest_addr integral 'h25
pkt_length integral 'd29
payload da(integral) -
[0] integral 'h2a
[1] integral 'hdb
... ... ...
[28] integral 'h21
parity integral 'hd9
parity_type parity_e GOOD_PARITY
ipg_delay integral 'd20
---------------------------------------
copy(): Copies all fields of packet1
to packet2, including sub-classes
and arrays
UVM also allows manual
implementation for performance or
other reasons
copy_packet: (data_packet_c@489) {
rev_no: v1.1s
header: (pkt_header_c@576) {
dest_addr: 'h25
pkt_length: 'd29
}
payload: {
[0]: 'h2a
[1]: 'hdb
... ...
[28]: 'h21
}
parity: 'hd9
parity_type: GOOD_PARITY
ipg_delay: 'd20
}
16 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM Messaging Facility
• Simple Messaging:
– `uvm_*(string id, string message, <verbosity>);
• Where * (severity) is one of fatal, error, warning, info
• <verbosity> is only valid for uvm_info
UVM_INFO myfile.sv(15) @10 uvm_test_top.test.generator [PKT]:
Packet Sent
•Output
`uvm_info("PKT", "Packet Sent“, UVM_LOW);
• Messages print trace information with advantages over
$display:
• Aware of its hierarchy/scope in testbench
• Allows filtering based on hierarchy, verbosity, and time
severity
file/line time
message body scope
id
17 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM Sequences
• A sequencer controls the generation of random stimulus
by executing sequences
• A sequence captures meaningful streams
of transactions
– A simple sequence is a random transaction generator
– A more complex sequence can contain timing, additional
constraints, parameters
• Sequences:
– Allow reactive generation – react to DUT
– Have many built-in capabilities like interrupt support, arbitration
schemes, automatic factory support, etc
– Can be nested inside other sequences
– Are reusable at higher levels
18 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM Tests and Testbenches
• Placing all components in the test
requires lot of duplication
• Separate the env configuration and
the test
– TB class instantiates and configures
reusable components
• Tests instantiate a testbench
– Specify the nature of generated traffic
– Can modify configuration parameters
as needed
• Benefits
– Tests are shorter, and descriptive
– Less knowledge to create a test
– Easier to maintain – changes are
done in a central location
module top ( );
class test extends …
class tb extends uvm_env…
VirtualSequencer
VC3
Mon BFM
Mon BFM
VC 2
Mon DRV
SEQR
VC3
Mon BFM
Mon BFM
BUS VC
Mon DRV
SEQR
VC3
Mon BFM
Mon BFM
VC1
Mon DRV
SEQR
DUT
MemCPU
PeriphPeriph
Module VC
Scoreboard
coverage
19 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM Simulation Phases
• When using classes, you need to manage environment
creation at run-time
• Test execution is divided to phases
– Configuration, testbench creation, run-time, check, etc
• Unique tasks are performed in each simulation phase
– Set-up activities are performed during “testbench creation”
while expected results may be addressed in “check”
– Phases run in order – next phase does not begin until previous
phase is complete
• UVM provides set of standard phases enabling VIP
plug&play
– Allows orchestrating the activity of components that were
created by different resources
20 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM Simulation Phases
Post-elaboration activity (e.g. print topology)
UVM component’s built-in phases - run in order
Build Top-Level Testbench Topology
tasks - Run-time execution of the test
Gathers details on the final DUT state
Processes and checks the simulation results.
Simulation results analysis and reporting
Configure verification components
Connect environment topology
build
connect
start_of_simulation
run
extract
check
report
end of elaboration
Note: All phases except run() execute in zero time
reset
configure
main
shutdown
All phase names have postfix “_phase”
21 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM Testbench Example
class bridge_tb extends uvm_env;
`uvm_component_utils(bridge_tb)
apb_env apb; // APB OVC
ahb_env ahb; // AHB OVC
bridge_mod_env bridge_mod ; // Module OVC
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
uvm_config_db#(uvm_active_passive_enum)::set(this,
“apb.slave*”,”is_active”, UVM_ACTIVE);
uvm_config_db#(int)::set(this, “ahb”,”master_num”, 3);
uvm_config_db#(uvm_active_passive_enum)::set(this,
“ahb.slave[0]”, “is_active”, UVM_PASSIVE);
apb = apb_env::type_id::create(“apb”, this);
ahb = ahb_env::type_id::create(“ahb”, this);
bridge_mod = bridge_mod_env::type_id::create(“bridge_mod”, this);
endfunction
endclass: bridge_tb
Extends from uvm_env
Instances of reusable verification
components and module verif
component
Create and build
using a standard
mechanism
Configure using wildcards
The test creates an instance of the
tesbench, overrides constraints,
and sets the default sequences
22 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Overriding SV Components
and Data Objects
• UVM Provides a mechanism for overriding the
default data items and objects in a testbench
• “Polymorphism made easy” for test writers
Replace data_packet_c in agent[0] sequencer
&
Replace agent[1]’s driver with new driver (v1)
A
B
data_packet_c
short_packet_c
my_env
agent[0]
sequencer
driver monitor
A
A A
agent[1]
sequencer
driver monitor
A
A A
my_env
agent[0]
sequencer
driver monitor
A
A A
agent[1]
sequencer
driver monitor
A
A A
B
driver
A
driver
driver_v1
For a specific test, we want to
replace all data_packet_c packets
with short_packet_c packets
B
B B
B
B B
Replace specific instances:
object::type_id::set_inst_override
(derived_obj::get_type(), “hierarchical_path”);
Example:
data_packet_c::type_id::set_inst_override
(short_packet_c::get_type(),
“my_env.agent[0].sequencer”);
my_driver::type_id::set_inst_override
(driver_v1::get_type(), “my_env.agent[1]”);
Replace ALL instances:
object::type_id::set_type_override(
derived_obj::get_type())
Example:
data_packet_c::type_id::set_type_override
(short_packet_c::get_type());
23 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
The Test Launching
Mechanism
module top()
import ... // uvm lib, tests, and packages
endmodule : top
DUT
IF IF rst clksIF
initial begin
run_test();
end
test3
tb
envenvenv Creates test and starts
simulation phases for
all components
Multiple tests DUT snapshot
test2
tb
envenv
Allows execution of multiple tests on the same snapshot
test1
tb
envenvenv
Function void
build();
…
endfunction
Compile the entire test suite together and use command-
line option to select a test:
% <sim> –f run.f +UVM_TESTNAME=test3
24 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Extensions Using Callbacks
• Like the factory, callbacks are a way to affect an existing
component from outside
• The SystemVerilog language includes built-in callbacks
– e.g. post_randomize(), pre_body()
• Callbacks requires the developer to predict the extension
location and create a proper hook
• Callbacks advantages:
– They do not require inheritance
– Multiple callbacks can be combined
25 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM Report Catcher Callback
Goal: Message Manipulation
class my_catcher extends
uvm_report_catcher;
virtual function action_e catch();
if(get_severity()==UVM_ERROR && get_id()=="MYID")
begin
set_severity(UVM_INFO);
set_action(get_action() - UVM_COUNT);
end
return THROW; // can throw the message for more
manipulation or catch it to avoid further processing
endfunction
endclass
// In testbench run phase
my_catcher catcher = new;
uvm_report_cb::add(null,catcher);
`uvm_error("MYID", "This one should be demoted")
#100;
catcher.callback_mode(0); //disable the catcher
`uvm_error("MYID", "This one should not be demoted")
• can disable a callback using the
built-in callback_mode() method
This example demotes MYID to be
an Info
26 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Command-line Processor
Class
• Provide a vendor independent general interface
to the command line arguments
• Supported categories:
– Basic Arguments and values
• get_args, get_args_matches
– Tool information
• get_tool_name(), get_tool_version()
– Built-in UVM aware Command Line arguments
• Supports setting various UVM variables from the command
line such as verbosity and configuration settings for integral
types and strings
• +uvm_set_config_int, +uvm_set_config_string
27 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Command-line Processor Example
class test extends uvm_test;
…
function void start_of_simulation();
uvm_cmdline_processor clp;
string arg_values[$];
string tool, version;
clp = uvm_cmdline_processor::get_inst();
tool = clp.get_tool_name();
version = clp.get_tool_version();
`uvm_info("MYINFO1", ("Tool: %s, Version : %s", tool, version,
UVM_LOW)
void'(clp.get_arg_values("+foo=", arg_values));
`uvm_info("MYINFO1","arg_values size : %0d", arg_values.size(),
UVM_LOW));
for(int i = 0; i < arg_values.size(); i++) begin
`uvm_info("MYINFO1", "arg_values[%0d]: %0s", i, arg_values[i],
UVM_LOW));
end
endfunction
endclass
Fetching the command line processor
singleton class
Use the class methods
Get argument values
28 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM Concepts Summary
• UVM Basics are proven and widely in use with all
simulators
• Provides both reuse and productivity
• UVM1.0 adds additional features to complement and
tune the existing capabilities
– UVM 1.1 includes bug fixes after initial users’ feedback
• If you have a new project, UVM is the way to go!
29 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Workshop Outline
10:00am – 10:05am Dennis Brophy Welcome
10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture
10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing
11:25am – 11:40am Break
11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package
12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches
12:50pm – 1:00pm All Q & A
UVM Sequences & Phasing
Tom Fitzpatrick
Mentor Graphics
31 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Sequences
• Decouple stimulus specification
from structural hierarchy
– Simple test writer API
• Sequences define transaction
streams
– May start on any matching
sequencer
• Sequences can call children
• Built-in get_response() task
• Sequences & transactions
customizable via the factory
• Driver converts transaction
to pin wiggles
u1u1
u1
s5
s1
s4
s3
s2
s1
32 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Using Sequences And
Sequence Items
• A sequence is a UVM object – to start it:
– Construction using the factory:
• spi_tfer_seq spi_seq =
spi_tfr_seq::type_id::create(“spi_seq”);
– Configure - explicitly or via constrained randomization
– Start execution on the target sequencer:
• spi_seq.start(spi_sequencer);
• Within a sequence a sequence_item is:
– Constructed
– Scheduled on a sequencer with start_item()
• Blocking call that returns when the driver is ready
– Configured – explicitly or via constrained
randomization
– Consumed with finish_item()
33 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Sequence_Item Example
class spi_seq_item extends uvm_sequence_item;
// UVM Factory Registration Macro
`uvm_object_utils(spi_seq_item)
// Data Members (Outputs rand, inputs non-rand)
rand logic[127:0] spi_data;
rand bit[6:0] no_bits;
rand bit RX_NEG;
// Analysis members:
logic[127:0] mosi;
logic[7:0] cs;
// Methods
extern function new(string name = "spi_seq_item");
extern function void do_copy(uvm_object rhs);
extern function bit do_compare(uvm_object rhs, uvm_comparer comparer);
extern function string convert2string();
extern function void do_print(uvm_printer printer);
extern function void do_record(uvm_recorder recorder);
endclass:spi_seq_item
•Data fields:
•Request direction rand (stimulus generation)
•Response direction non-rand
•UVM Object Methods
•These methods get generated by the
automation macros
•Write them yourself to improve performance
if desired
34 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Basic Sequence-Driver API
class my_seq extends uvm_sequence #(my_req, my_rsp);
task body();
for(int unsigned i = 0; i < 20000; i++) begin
req = my_req::type_id::create(“req”);
start_item(req);
assert(req.randomize());
finish_item(req);
get_response(rsp);
end
endtask
endclass
class my_driver extends uvm_driver;
task run_phase(uvm_phase phase);
… begin
seq_item_port.get_next_item(req);
drive_transfer(req);
rsp.set_id_info(rsp);
seq_item_port.item_done();
seq_item_port.put_response(rsp);
end
endtask
endclass
Sequence parameterized
by request/response types
body() method
defines
what happens
35 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Sequence API Options
• Macros allow constraints to be passed in
• Macros require pre-defined callbacks to modify
behavior
• Multiple macro variations
• Explicit API provides greater control and easier
debug
Using Macros
req = my_req::type_id::create(“req”);
start_item(req);
assert(req.randomize());
finish_item(req);
get_response(rsp);
`uvm_do(req)
get_response(rsp);
Explicit
36 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Sequencer and Driver
typedef uvm_sequencer#(my_req,my_rsp) my_sequencer;
class my_master_agent extends uvm_agent;
function void build_phase(uvm_phase phase);
void’(uvm_config_db#(bitstream_t)::get(this,“”, “is_active”, is_a);
if(is_a) begin
seqr = my_sequencer::type_id::create(“seqr”, this);
driver = my_driver::type_id::create(“driver”, this);
end
endfunction
function void connect_phase(uvm_phase phase);
if(is_a)
driver.seq_item_port.connect(seqr.seq_item_export);
endfunction
endclass
my_sequencer
uvm_sequencer#(my_req,my_rsp)
agent
driverseqr
By default, you don’t need
to extend uvm_sequencer
37 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Starting a Sequence
• Explicit
• Implicit (Default Sequence)
– Using wrapper
– Using instance
task xxx_phase(uvm_phase phase);
my_seq.start(seqr);
uvm_config_db#(uvm_object_wrapper)::set(this,“agent.sqr.xxx_phase",
"default_sequence", my_seq::type_id::get());
myseq = my_seq::type_id::create(“myseq”);
uvm_config_db#(uvm_sequence_base)::set(this,“agent.sqr.xxx_phase",
"default_sequence", myseq);
my_seq.set_priority(200);
“xxx_phase” can be
any run-time phase
Wrapper
Sequence
Sequencer
Phase
38 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Calling start()
my_seq.pre_start()
my_seq.pre_body();
parent.pre_do(0);
parent.mid_do(this);
my_seq.body();
parent.post_do(this);
my_seq.post_body();
my_seq.post_start();
my_seq.start(uvm_sequencer_base seqr,
uvm_sequencer_base parent = null,
integer priority = 100,
bit call_pre_post = 1);
task xxx_phase(uvm_phase phase);
my_seq.start(seqr);
on sequencer
If parent!=null
If call_pre_post ==1
Stimulus
code
39 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Sequence Library (Beta)
class my_seq_lib extends uvm_sequence_library #(my_item);
`uvm_object_utils(my_seq_lib)
`uvm_sequence_library_utils(my_seq_lib)
function new(string name="");
super.new(name);
init_sequence_library();
endfunction
...
endclass
class uvm_sequence_library #(type REQ=int,RSP=REQ)
extends uvm_sequence #(REQ,RSP);
class my_seq1 extends my_seq;
`uvm_object_utils(my_seq1)
`uvm_add_to_seq_lib(my_seq1,my_seq_lib)
…
endclass
my_seq_lib
my_seq1
my_seq2
Sequence Library
IS-A Sequence
class my_seq2 extends my_seq;
`uvm_object_utils(my_seq2)
`uvm_add_to_seq_lib(my_seq2,my_seq_lib)
…
endclass
`uvm_sequence_utils
`uvm_sequencer_utils
et. al. deprecated
40 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Sequence Library
typedef enum
{ UVM_SEQ_LIB_RAND,
UVM_SEQ_LIB_RANDC,
UVM_SEQ_LIB_ITEM,
UVM_SEQ_LIB_USER
} uvm_sequence_lib_mode;
uvm_config_db #(uvm_sequence_lib_mode)::set(this,
"sequencer.xxx_phase“, “default_sequence.selection_mode”, MODE);
•Random sequence selection
•Random cyclic selection
•Emit only items,no sequence execution
•User-defined random selection
function int unsigned select_sequence(int unsigned max);
// pick from 0 <= select_sequence < max;
endfunction
41 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
UVM Phasing
uvm
•shutdown
post_shutdown
main
pre_main
•post_configure
•configure
pre_configure
•post_reset
•reset
pre_reset
pre_shutdown
•post_main
common
build
end_of_elaboration
connect
start_of_simulation
run
extract
check
report
final
Several new runtime phases
in parallel with run_phase()
To simplify examples, these
slides will show a reduced set
of phases
new vip
Legacy
OVM VIP
time
reset configure main shutdown
42 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Phase Synchronization
• By default, all components must allow all
other components to complete a phase
before all components move to next phase
time
reset configure main shutdown
reset configure main shutdown
reset configure main shutdownVIP 1:
VIP 2:
VIP 3:
43 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Phase Semantics
• In UVM Reference Guide, the semantics
for each phase are defined, e.g.
reset
Upon Entry
•Indicates that the hardware reset signal is ready to be asserted.
Typical Uses
•Assert reset signals.
•Components connected to virtual interfaces should drive their output to their
specified reset or idle value.
•Components and environments should initialize their state variables.
•Clock generators start generating active edges.
•De-assert the reset signal(s) just before exit.
•Wait for the reset signal(s) to be de-asserted.
Exit Criteria
•Reset signal has just been de-asserted.
•Main or base clock is working and stable.
•At least one active clock edge has occurred.
•Output signals and state variables have been initialized.
44 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
uvm_component Basic API
task/function <name>_phase(uvm_phase phase)
phase.raise_objection(this);
phase.drop_objection(this);
function void phase_started(uvm_phase phase)
function void phase_ended(uvm_phase phase)
Call these to prevent and re-allow
the current phase ending
Implement these to specify
behavior for the start/end of
each phase; threads started
here are not auto-killed
Implement these to specify behavior
for a specific phase; threads started
here are auto-killed
45 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
uvm_component Example
task main_phase(uvm_phase phase);
phase.raise_objection(this);
… main test behavior, e.g. send 100 items…
phase.drop_objection(this);
endtask
function void phase_started(uvm_phase phase);
if (phase.get_name()==“post_reset”)
fork background_thread(); join_none
endfunction
Called automatically
when main phase
starts (after all
phase_started() calls)
Called automatically
when phase first starts.
Thread forks when
phase is post_reset.
46 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
User-defined Phases
• Integrator can create one or more phases
• Integrator can create schedules with any
mix of standard and user-defined phases
then assign components to use one of
those schedules
configure post_configure
New
sched: cfg2
“want new phase
named cfg2 after
configure and before
post_configure”
uvm_domain common =
uvm_domain::get_common_domain();
common.add(cfg2_phase::get(),
.after_phase(configure_phase::get(),
.before_phase(post_configure_phase.get())
);
47 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Separate Domains
• Sometimes it is OK for a part of the
design/environment to do behavior that is
out of alignment with the remainder
– e.g. mid-sim reset of a portion of the chip
– e.g. one side starts main functionality while
other side is finishing configuration
48 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Domain B
Domain A
Domains
• Domains are collections of components
that must advance phases in unison
– By default, no inter-domain synchronization
time
reset configure main shutdown
reset configure main shutdown
reset configure main shutdownVIP 1:
VIP 2:
VIP 3:
49 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Domain Synchronization
• Domains can be synchronized at one,
many, or all phase transitions.
Domain B
Domain A
time
reset configure main shutdown
reset configure main shutdownVIP 1:
VIP 2:
Two domains sync’d at main
domainA.sync(.target(domainB),.phase(uvm_main_phase::get()));
50 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Fully Synchronized Domains
• If two domains are fully synchronized and
one domain jumps back, the second
domain will continue in its current phase
and wait for the first to catch up
Domain B
Domain A
time
reset configure main shutdown
reset configure main shutdownVIP 1:
VIP 2:
reset config main
phase.jump(uvm_reset_phase::get())
51 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Sequences and Phases
class my_seq extends uvm_sequence#(my_req,my_rsp);
virtual task body();
if (starting_phase != null)
starting_phase.raise_objection(this,
“Starting my_seq”);
…//body of sequence
if (starting_phase != null)
starting_phase.drop_objection(this,
“Ending my_seq”);
endtask
endclass
Raise objection first
Drop objection last
Phase won’t end until my_seq completes
Unless you do a jump()
52 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Ending Phases
VIP:
task run_phase(uvm_phase phase);
phase.raise_objection();
seq.start();
phase.drop_objection();
endtask
my_seq
run extract check report
Must raise_objection()
before first NBA Phase ends when all
objections are dropped
53 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Ending Phases
VIP:
task main_phase(uvm_phase phase);
phase.raise_objection();
seq.start();
phase.drop_objection();
endtask
main_seq
main
Must raise_objection()
before first NBA Phase ends when all
objections are dropped
post_main
54 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
task main_phase(uvm_phase phase);
while(!ending) begin
…
if(ending)
phase.drop_objection();
…
endtask
virtual function void
phase_ready_to_end(uvm_phase phase);
if(phase.get_name==“main”) begin
ending = 1;
if(busy)
phase.raise_objection();
end
endfunction
Delaying Phase End
VIP:
task main_phase(uvm_phase phase);
phase.raise_objection();
seq.start();
phase.drop_objection();
endtask
main_seq
main
Drop when
really done
all_dropped resets
phase objection
post_main
calls
phase_ready_to_end()
last chance to raise
an objection
55 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Ending Phases
• Phase objection must be raised before first
NBA
• Phase forks off processes
– wait for phase.all_dropped
– call phase_ready_to_end()
• component can raise objection
– Check objection count
– call phase_ended()
– kill_processes
– execute successors
56 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Test Phase Example
task reset_phase (uvm_phase phase);
reset_seq rst = reset_seq::type_id::create(“rst”);
phase.raise_objection(this, “resetting”);
rst.start(protocol_sqr);
phase.drop_objection(this, “ending reset”);
endtask: reset_phase
task configure_phase (uvm_phase phase);
configure_seq cfg = configure_seq::type_id::create(“cfg”);
phase.raise_objection(this, “configuring dut”);
cfg.start(protocol_sqr);
phase.drop_objection(this, “dut configured”);
endtask: configure_phase
task main_phase (uvm_phase phase);
test_function1_seq tst = test_function1_seq ::type_id::create(“tst”);
phase.raise_objection(this, “functionality test”);
tst.start(protocol_sqr);
phase.drop_objection(this, “functionality tested”);
endtask: main_phase
(Test) Component runs different
sequences in each phase.
Phase level sequences may run
on different sequences in
parallel
57 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Workshop Outline
10:00am – 10:05am Dennis Brophy Welcome
10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture
10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing
11:25am – 11:40am Break
11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package
12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches
12:50pm – 1:00pm All Q & A
58 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Accellera at DAC
• Accellera Breakfast at DAC: UVM User Experiences
– An Accellera event sponsored by Cadence, Mentor, and Synopsys
– Tuesday, June 7th, 7:00am-8:30am, Room 25AB
• Accellera IP-XACT Seminar
– An introduction to IP-XACT, IEEE 1685, Ecosystem and Examples
– Tuesday, June 7th, 2:00pm-4:00pm, Room 26AB
• Birds-Of-A-Feather Meeting
– Soft IP Tagging Standardization Kickoff
– Tuesday, June 7, 7:00 PM-8:30 PM, Room 31AB
59 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Workshop Outline
10:00am – 10:05am Dennis Brophy Welcome
10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture
10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing
11:25am – 11:40am Break
11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package
12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches
12:50pm – 1:00pm All Q & A
UVM Transaction Level Modeling (TLM2)
Janick Bergeron
Synopsys
61 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
TLM-1.0
• Unidirectional put/get interfaces
• Simple message-passing semantics
• No response model
– E.g. What did I read back??
• Never really caught on in SystemC
•Initiator •Target
•put
•Initiator •Target
•get
62 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Why TLM-2.0?
• Better interoperability over TLM-1.0
– Semantics
– Pre-defined transaction for buses
• Performance
– Pass by reference (in SystemC)
– Temporal decoupling
63 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
TLM-2.0 in SV vs SC
• Blocking transport interface
• Nonblocking transport interfaces
• Direct memory interface
• Debug transport interface
• Initiator sockets
• Target sockets
• Generic payload
• Phases
• Convenience sockets
• Payload event queue
• Quantum keeper
• Instance-specific extensions
• Non-ignorable and mandatory extensions
• Temporal decoupling
64 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
TLM-2.0 Semantics
• Blocking
– When the call returns,
the transaction is done
– Response is annotated
• Nonblocking
– Call back and forth
• Protocol state changes
• Transaction is updated
– Until one says “done”
•Initiator •Target
•Initiator •Target
65 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Generic Payload Attributes
Attribute Type Modifiable?
Command uvm_tlm_command_e No
Address bit [63:0] Interconnect only
Data byte unsigned [ ] Yes (read command)
Data length int unsigned No
Byte enable pointer byte unsigned [ ] No
Byte enable length int unsigned No
Streaming width int unsigned No
Response status uvm_tlm_response_status_e Target only
Extensions uvm_tlm_extension_base [ ] Yes
• Pre-defined bus transaction
66 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Connecting to SystemC
• Tool-specific mechanism
– Not part of UVM
•SystemVerilog •SystemC
•Copy across
at method call
and return
67 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
TLM-2.0 Bridge Between SV & SC
• Proxy sockets terminate the TLM2
connections in each language
– Create SV/SC bridge
•Initiator •Target
•Pack/unpack
•Proxy Trgt •Proxy Init
•TLM2 Bridge
•Predefined
for GP in VCS
•User-defined for
GP extensions
or non-GP
•Unaware of
language
crossing
•Unaware of
language
crossing
UVM Register Model
Janick Bergeron
Synopsys
69 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Overall Architecture
AdapterGeneric
physical r/w
Backdoor
Any bus
agent
Register Model
Pre-Defined
SequencesPre-Defined
SequencesUser-Defined
Sequences
Pre-Defined
SequencesPre-Defined
SequencesPre-Defined
Sequences
DUT
Spec
Generator
Abstract
read/write
Bus-specific
r/w item
70 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Specification & Generation
Register Model
IP-XACT
Generator
System
RDL
SQL CSV
MS-
Word
...
UVM
UVM
X EDA
Vendors
Generator
Generator
Generator
71 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Physical Interfaces
• Register model abstracts
– Physical interfaces
– Addresses
– Endianness
Register
Model
User
perspective
R1.read(...);
...
R2.write(...);
...
R3.read(...);
R1
R2
R3
DUT may
change
Perspective
stays the same
72 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Mirror
• Register model mirrors content of registers
in DUT
– “Scoreboard” for registers
– Updated on read and write()
– Optionally checked on read()
Register
Model R1
R2
R3
R1
R3
R2
API
73 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Back-door Access
• Must define HDL path to register in DUT
– Generator-specific
• Access RTL directly in zero-time via VPI
– May affect simulator performance
R1
R2
R3
R1
R3
R2
API
Mirror is
implicitly
updated
74 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Programmer’s View
F1 F2 F3
R0
F4...
...F4
R1
R0
R2
F5 F6
F5 F6
F5 F6
A[0]
A[1]
A[255]
F7 F8
F9 F10
RF0[0]
RF1[0]
F7 F8
F9 F10
RF0[0]
RF1[0]
F7 F8
F9 F10
RF0[7]
RF1[7]
M0 M0[0..65535]
Array of Registers
Array of Register Files
Memory
Multi-address Register
75 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
F1
Class View
• One class per field
• One class per register
– Name
– Address
– Contained fields
– Read/Write methods
F3
F4...
F2
R0
...F4
R1
R0
R2
F5 F6
F5 F6
F5 F6
A[0]
A[1]
A[255]
F7 F8
F9 F10
RF0[0]
RF1[0]
F7
F9 F10
RF0[0]
RF1[0]
F7 F8
F9 F10
RF0[7]
RF1[7]
M0 M0[0..65535]
F8
class R1_reg extends uvm_reg;
uvm_reg_field F1;
uvm_reg_field F2;
uvm_reg_field F3;
endclass
Generated
Make sure names
are different from
base class methods
76 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
F1
Class View
• One class per block
– Name, Base address
– Contained registers,
register files, memories
• May be arrays
• Optional: contained fields
F3
F4...
F2
R0
...F4
R1
R0
R2
F5 F6
F5 F6
F5 F6
A[0]
A[1]
A[255]
F7 F8
F9 F10
RF0[0]
RF1[0]
F7
F9 F10
RF0[0]
RF1[0]
F7 F8
F9 F10
RF0[7]
RF1[7]
M0 M0[0..65535]
F8
class B_blk extends uvm_reg_block;
R0_reg R0;
R1_reg R1;
R2_reg R2;
A_reg A[256];
RF_rfile RF[8];
ovm_ral_mem M0;
endclass
Generated
Make sure names
are different from
base class methods
77 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
API View
• Methods in relevant
class instance
F1 F2 F3
R0
F4...
...F4
R1
R0
R2
F5 F6
F5 F6
F5 F6
A[0]
A[1]
A[255]
F7 F8
F9 F10
RF0[0]
RF1[0]
F7 F8
F9 F10
RF0[0]
RF1[0]
F7 F8
F9 F10
RF0[7]
RF1[7]
M0 M0[0..65535]
blk.R0.get_full_name()
blk.F4.read(...)
blk.A[1].write(...)
blk.A[255].F5.write(...)
foreach (blk.RF[i]) begin
blk.RF[i].R0.F7.read(..._);
end
blk.M0.read(...)
78 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Reading and Writing
• Specify target register by hierarchical
reference in register model
– Compile-time checking
• Use read() and write() method on
– Register
– Field
– Memory
blk.blk[2].regfile[4].reg.fld
blk.blk[2].regfile[4].reg.fld.read(...);
blk.mem.write(...);
By-name API
also available
79 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Register Sequences
• Sequences accessing registers should be
virtual sequences
– Not associated with a particular sequencer
type
• Contain a reference
to register model
• Access registers in
body() task
class my_test_seq
extends uvm_sequence;
my_dut_model regmodel;
virtual task body();
regmodel.R1.write(...);
regmodel.R2.read(...);
...
endtask
endclass
80 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Register Sequences
• Includes pre-defined sequences
– Check reset values
– Toggle & check every bit
– Front-door/back-door accesses
– Memory walking
81 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Introspection
• Rich introspection API
Block
Register
Field
Register File Map
get_regfile()
get_maps()
is_in_map()
get_offset()
get_fields()
get_block()
get_blocks()
get_parent()
get_parent()
get_maps()
get_registers()
get_access()
get_reset()
get_n_bits()
get_lsp_pos()
is_volatile()
82 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Coverage Models
• Register models may contain coverage
models
– Up to the generator
• Not instantiated by default
– Can be large. Instantiate only when needed.
– To enable:
• Not collected by default
– To recursively enable
uvm_reg::include_coverage(“*”, UVM_CVR_ALL);
All coverage
models
In all blocks
and registers
blk.set_coverage(UVM_CVR_ALL);
All coverage
models in block
83 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Customization Opportunities
Register Model
Spec
Generator Pre-Build
Post-Build
Best
Options,
value-add
DON’T!
Factory
Callbacks
84 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
There’s a LOT more!
• DUT integration
• Multiple interfaces
• Randomization
• Vertical Reuse
• “Offline” access
• User-defined front-door accesses
• Access serialization
• Pipelined accesses
85 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Workshop Outline
10:00am – 10:05am Dennis Brophy Welcome
10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture
10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing
11:25am – 11:40am Break
11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package
12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches
12:50pm – 1:00pm All Q & A
Putting Together UVM Testbenches
Ambar Sarkar
Paradigm Works, Inc.
87 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Agenda
• Case studies
– Several UVM1.0 environments deployed
– Currently in production
– Novice to sophisticated teams
• Getting started with UVM is relatively easy
– Basic tasks remain simple
– Were able to use a “prescriptive” approach
– Iteratively developed and scales to any complexity
• Advanced uses
– Unit to system-level
– VIP Stacking/Layering
88 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Implementing Basic Steps
Connect DUT to testbench
Send clocks and resets
Initialize the DUT
Send traffic
Add checking
Write tests
Once plumbing in
place, a simple
prescriptive approach
works
Increasing
sophistication,
but scalable
89 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Example
Channel Engine
Host Interface
Read/Write
Packet Input
Packet Output 1
Packet Output 3
Packet Output 2
90 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Example Environment in UVM
DUT
unit_tb
test cases ...
interrupt
scoreboard
packet
scoreboard
host agent
Config:
active
Config:
active
pi agent
clk_rst agent
Config
:active
clk_rst agent
Config
:active
po agent
active
Config:
po agent
active
Config:
po agent
active
Config:
[x3]
91 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Connect DUT to Testbench
Always use SystemVerilog interface
Use clocking blocks for testbench per
interface
Use modports for DUT
Pass interface to the environment
Use uvm_config_db
Channel Engine
Host Interface
Read/Write
Packet Input
Packet Output 1
Packet Output 3
Packet Output 2
Set (Top level initial block)
uvm_config_db#(virtual host_if)::set(
null, “my_tb.*”,“vif”, vif);
Get (In build phase of the agent)
if(!uvm_config_db#(virtual host_if)::get(
this,,"vif",vif))
`uvm_fatal(“NOVIF”, . . . );
92 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Connect Clock and Resets
Combine clock and reset as agents in one env
Define reset as sequences
class clk_rst_env extends uvm_env;
clk_rst_cfg cfg; //! VIP configuration object
//! bring ports out for convenience
uvm_analysis_port #(uvm_transaction) rst_mon_ap_out;
//! Agents in env
clk_agent clk_agt;
rst_agent rst_agt;
. . .
task clk_rst_reset_pulse_sequence::body();
`uvm_do_with(change_sequence, { level == 0;
hold_cycles == init_cycles;
`uvm_do_with(change_sequence, { level == 1;
hold_cycles == assert_cycles;
`uvm_do_with(change_sequence, { level == 0;
hold_cycles == negate_cycles;
93 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Initializing the DUT
Add transaction definitions for configuration interface (host)
Add driver code for host
Setup host initialization seq
class host_transaction extends uvm_sequence_item;
...
rand bit[31:0] hi_addr;
rand bit[7:0] hi_wr_data;
. . .
task pwr_hi_master_driver::drive_transaction(host_transaction trans);
if (trans.trans_kind == PWR_HI_WR) begin
intf.hif_address = trans.hi_addr;
intf.hif_data = trans.hi_wr_data;
. . .
task my_env_init_sequence::body();
regmodel.R1.write(...);
regmodel.R2.read(...);
. . .
94 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Sending traffic
Similar to initialization
Sequences differ
//! sequence body.
task pi_sequence::body();
pi_transaction#(. . .) req_xn;
cfg_inst = p_sequencer.cfg;
forever begin
p_sequencer.peek_port.peek(req_xn);
if (!this.randomize()) begin
`uvm_fatal({get_name(), "RNDFLT"}, "Can't randomize");
end
`uvm_do_with(this_transaction,
{ trans_kind == req_xn.trans_kind;
read_vld_delay inside { [0:15] };
. . .
});
. . .
95 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Checking and Writing Tests
Add checking in the environment
Add monitor code for all components
Connect the scoreboards
Add test-specific checking in the test as needed
class my_env extends uvm_env;
unit_scoreboard#(uvm_transaction, uvm_transaction) sb;
function void my_env::build_phase(uvm_phase phase);
...
sb = unit_scoreboard#(uvm_transaction, uvm_transaction)
::type_id::create({get_name(), "_sb"}, this);
function void pwc_env::connect_phase(uvm_phase phase);
. . .
pi_mon.mon_ap_out.connect(sb.post_export);
po_mon.mon_ap_out.connect(sb.check_export);
96 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Connecting Unit to System Level
97 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
• Scoreboarding
• Reuse SB encapsulated within sub-envs
• Chain the scoreboards
• Functional Coverage
• Needed to filter coverage points
• Reuse monitors
• Avoid duplicated instances
• Gate Simulations
• Disable monitors
• Disable internal scoreboards
• Registers
• Register abstraction reused, but different interfaces used
• Configurations
• Defined separate system configuration
• Top level instantiated sub-env configurations
• Sequences
• Virtual sequencer only at the system level
• Initialization sequences reused from unit-level
• Traffic sequences created from scratch at the system level
Connecting Unit to System Level:
Reuse
98 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Connecting Unit to System Level:
Prescription
For each sub-env class
Extend sub-env base class
Make all internal components passive
Added sub-env config object to your system config
Turn off virtual sequencer at the unit level
Declare at system-level:
unit_env_cfg unit_env_cfg_inst;
`uvm_field_object(unit_env_cfg_inst, UVM_REFERENCE)
99 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
VIP Stacking/Layering
VIP Agent Bottom
Monitor Driver
Config
is_active=1
has_interface=1
Sequencer
vi vi
Analysis
VIP Agent Top
Monitor
Design Under Test
Analysis
Config
is_active=1
has_interface=0
Convert Monitor
Convert Sequencer
Sequencer
Converts
upwards
Converts
Downwards
100 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Summary
• Getting started with UVM was relatively easy
Once initial plumbing in place
Basic tasks remain simple
Were able to use a “prescriptive” approach
• Able to iteratively develop testbench
Scales to any complexity
Unit to system
Stacking of VIPs
• Deployed across projects and simulation vendors
Worked with minor gotchas
No UVM issues found
Some SystemVerilog support issues among vendors
e.g. Inout ports and modports and clocking blocks
101 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Workshop Outline
10:00am – 10:05am Dennis Brophy Welcome
10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture
10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing
11:25am – 11:40am Break
11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package
12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches
12:50pm – 1:00pm All Q & A
102 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Questions?
• Download UVM from www.accellera.org
– Reference Guide
– User Guide
– Reference Implementation
– Discussion Forum
103 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Accellera at DAC
• Accellera Breakfast at DAC: UVM User Experiences
– An Accellera event sponsored by Cadence, Mentor, and Synopsys
– Tuesday, June 7th, 7:00am-8:30am, Room 25AB
• Accellera IP-XACT Seminar
– An introduction to IP-XACT, IEEE 1685, Ecosystem and Examples
– Tuesday, June 7th, 2:00pm-4:00pm, Room 26AB
• Birds-Of-A-Feather Meeting
– Soft IP Tagging Standardization Kickoff
– Tuesday, June 7, 7:00 PM-8:30 PM, Room 31AB
104 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Lunch in Room 20D
Show your Workshop Badge
for entry
105 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems
Thank You

Weitere ähnliche Inhalte

Was ist angesagt?

Session 6 sv_randomization
Session 6 sv_randomizationSession 6 sv_randomization
Session 6 sv_randomizationNirav Desai
 
SystemVerilog based OVM and UVM Verification Methodologies
SystemVerilog based OVM and UVM Verification MethodologiesSystemVerilog based OVM and UVM Verification Methodologies
SystemVerilog based OVM and UVM Verification MethodologiesRamdas Mozhikunnath
 
SystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features SummarySystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features SummaryAmal Khailtash
 
Uvm cookbook-systemverilog-guidelines-verification-academy
Uvm cookbook-systemverilog-guidelines-verification-academyUvm cookbook-systemverilog-guidelines-verification-academy
Uvm cookbook-systemverilog-guidelines-verification-academyRaghavendra Kamath
 
Session 9 advance_verification_features
Session 9 advance_verification_featuresSession 9 advance_verification_features
Session 9 advance_verification_featuresNirav Desai
 
Efficient Methodology of Sampling UVM RAL During Simulation for SoC Functiona...
Efficient Methodology of Sampling UVM RAL During Simulation for SoC Functiona...Efficient Methodology of Sampling UVM RAL During Simulation for SoC Functiona...
Efficient Methodology of Sampling UVM RAL During Simulation for SoC Functiona...Sameh El-Ashry
 
APB protocol v1.0
APB protocol v1.0APB protocol v1.0
APB protocol v1.0Azad Mishra
 
System verilog assertions
System verilog assertionsSystem verilog assertions
System verilog assertionsHARINATH REDDY
 
System verilog control flow
System verilog control flowSystem verilog control flow
System verilog control flowPushpa Yakkala
 
System verilog coverage
System verilog coverageSystem verilog coverage
System verilog coveragePushpa Yakkala
 
SOC Verification using SystemVerilog
SOC Verification using SystemVerilog SOC Verification using SystemVerilog
SOC Verification using SystemVerilog Ramdas Mozhikunnath
 
Spi master core verification
Spi master core verificationSpi master core verification
Spi master core verificationMaulik Suthar
 
AMBA 3 APB Protocol
AMBA 3 APB ProtocolAMBA 3 APB Protocol
AMBA 3 APB ProtocolSwetha GSM
 

Was ist angesagt? (20)

Ral by pushpa
Ral by pushpa Ral by pushpa
Ral by pushpa
 
Session 6 sv_randomization
Session 6 sv_randomizationSession 6 sv_randomization
Session 6 sv_randomization
 
SystemVerilog based OVM and UVM Verification Methodologies
SystemVerilog based OVM and UVM Verification MethodologiesSystemVerilog based OVM and UVM Verification Methodologies
SystemVerilog based OVM and UVM Verification Methodologies
 
SystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features SummarySystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features Summary
 
Uvm cookbook-systemverilog-guidelines-verification-academy
Uvm cookbook-systemverilog-guidelines-verification-academyUvm cookbook-systemverilog-guidelines-verification-academy
Uvm cookbook-systemverilog-guidelines-verification-academy
 
Uvm dac2011 final_color
Uvm dac2011 final_colorUvm dac2011 final_color
Uvm dac2011 final_color
 
Session 9 advance_verification_features
Session 9 advance_verification_featuresSession 9 advance_verification_features
Session 9 advance_verification_features
 
Efficient Methodology of Sampling UVM RAL During Simulation for SoC Functiona...
Efficient Methodology of Sampling UVM RAL During Simulation for SoC Functiona...Efficient Methodology of Sampling UVM RAL During Simulation for SoC Functiona...
Efficient Methodology of Sampling UVM RAL During Simulation for SoC Functiona...
 
axi protocol
axi protocolaxi protocol
axi protocol
 
APB protocol v1.0
APB protocol v1.0APB protocol v1.0
APB protocol v1.0
 
System verilog assertions
System verilog assertionsSystem verilog assertions
System verilog assertions
 
System verilog control flow
System verilog control flowSystem verilog control flow
System verilog control flow
 
System verilog coverage
System verilog coverageSystem verilog coverage
System verilog coverage
 
SOC Verification using SystemVerilog
SOC Verification using SystemVerilog SOC Verification using SystemVerilog
SOC Verification using SystemVerilog
 
Spi master core verification
Spi master core verificationSpi master core verification
Spi master core verification
 
Ambha axi
Ambha axiAmbha axi
Ambha axi
 
system verilog
system verilogsystem verilog
system verilog
 
AMBA 3 APB Protocol
AMBA 3 APB ProtocolAMBA 3 APB Protocol
AMBA 3 APB Protocol
 
AMBA 2.0 PPT
AMBA 2.0 PPTAMBA 2.0 PPT
AMBA 2.0 PPT
 
AMBA_APB_pst
AMBA_APB_pstAMBA_APB_pst
AMBA_APB_pst
 

Andere mochten auch

Fuzzing101 uvm-reporting-and-mitigation-2011-02-10
Fuzzing101 uvm-reporting-and-mitigation-2011-02-10Fuzzing101 uvm-reporting-and-mitigation-2011-02-10
Fuzzing101 uvm-reporting-and-mitigation-2011-02-10Codenomicon
 
Uvm dcon2013
Uvm dcon2013Uvm dcon2013
Uvm dcon2013sean chen
 
Functional verification techniques EW16 session
Functional verification techniques  EW16 sessionFunctional verification techniques  EW16 session
Functional verification techniques EW16 sessionSameh El-Ashry
 
System Verilog Tutorial - VHDL
System Verilog Tutorial - VHDLSystem Verilog Tutorial - VHDL
System Verilog Tutorial - VHDLE2MATRIX
 
UVM Update: Register Package
UVM Update: Register PackageUVM Update: Register Package
UVM Update: Register PackageDVClub
 
VLSI technology
VLSI technologyVLSI technology
VLSI technologyAidell2583
 
Etica y estilo forense (1)
Etica y estilo forense (1)Etica y estilo forense (1)
Etica y estilo forense (1)mauricio mendoza
 

Andere mochten auch (12)

Fuzzing101 uvm-reporting-and-mitigation-2011-02-10
Fuzzing101 uvm-reporting-and-mitigation-2011-02-10Fuzzing101 uvm-reporting-and-mitigation-2011-02-10
Fuzzing101 uvm-reporting-and-mitigation-2011-02-10
 
Uvm dcon2013
Uvm dcon2013Uvm dcon2013
Uvm dcon2013
 
Functional verification techniques EW16 session
Functional verification techniques  EW16 sessionFunctional verification techniques  EW16 session
Functional verification techniques EW16 session
 
Vlsi
VlsiVlsi
Vlsi
 
SOC Design Challenges and Practices
SOC Design Challenges and PracticesSOC Design Challenges and Practices
SOC Design Challenges and Practices
 
System Verilog Tutorial - VHDL
System Verilog Tutorial - VHDLSystem Verilog Tutorial - VHDL
System Verilog Tutorial - VHDL
 
UVM Update: Register Package
UVM Update: Register PackageUVM Update: Register Package
UVM Update: Register Package
 
VLSI technology
VLSI technologyVLSI technology
VLSI technology
 
10. verification
10. verification10. verification
10. verification
 
Verilog HDL
Verilog HDLVerilog HDL
Verilog HDL
 
Presentation on vouching and verification
Presentation on vouching and verificationPresentation on vouching and verification
Presentation on vouching and verification
 
Etica y estilo forense (1)
Etica y estilo forense (1)Etica y estilo forense (1)
Etica y estilo forense (1)
 

Ähnlich wie Uvm presentation dac2011_final

DEF CON 27 - ALI ISLAM and DAN REGALADO WEAPONIZING HYPERVISORS
DEF CON 27 - ALI ISLAM and DAN REGALADO WEAPONIZING HYPERVISORSDEF CON 27 - ALI ISLAM and DAN REGALADO WEAPONIZING HYPERVISORS
DEF CON 27 - ALI ISLAM and DAN REGALADO WEAPONIZING HYPERVISORSFelipe Prado
 
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...Puppet
 
Challenges in Using UVM at SoC Level
Challenges in Using UVM at SoC LevelChallenges in Using UVM at SoC Level
Challenges in Using UVM at SoC LevelDVClub
 
Getting started with RISC-V verification what's next after compliance testing
Getting started with RISC-V verification what's next after compliance testingGetting started with RISC-V verification what's next after compliance testing
Getting started with RISC-V verification what's next after compliance testingRISC-V International
 
Security defined routing_cybergamut_v1_1
Security defined routing_cybergamut_v1_1Security defined routing_cybergamut_v1_1
Security defined routing_cybergamut_v1_1Joel W. King
 
Early Software Development through Palladium Emulation
Early Software Development through Palladium EmulationEarly Software Development through Palladium Emulation
Early Software Development through Palladium EmulationRaghav Nayak
 
Summit 16: The Hitchhiker/Hacker's Guide to NFV Benchmarking
Summit 16: The Hitchhiker/Hacker's Guide to NFV BenchmarkingSummit 16: The Hitchhiker/Hacker's Guide to NFV Benchmarking
Summit 16: The Hitchhiker/Hacker's Guide to NFV BenchmarkingOPNFV
 
Performance Tuning Oracle Weblogic Server 12c
Performance Tuning Oracle Weblogic Server 12cPerformance Tuning Oracle Weblogic Server 12c
Performance Tuning Oracle Weblogic Server 12cAjith Narayanan
 
HKG18-TR14 - Postmortem Debugging with Coresight
HKG18-TR14 - Postmortem Debugging with CoresightHKG18-TR14 - Postmortem Debugging with Coresight
HKG18-TR14 - Postmortem Debugging with CoresightLinaro
 
DvClub 2102 tlm based software control of uvcs for vertical verification re...
DvClub 2102   tlm based software control of uvcs for vertical verification re...DvClub 2102   tlm based software control of uvcs for vertical verification re...
DvClub 2102 tlm based software control of uvcs for vertical verification re...Amit Bhandu
 
System Architecture Exploration Training Class
System Architecture Exploration Training ClassSystem Architecture Exploration Training Class
System Architecture Exploration Training ClassDeepak Shankar
 
Python on Rails - Victory Levy
Python on Rails - Victory LevyPython on Rails - Victory Levy
Python on Rails - Victory LevyHakka Labs
 
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...GlobalLogic Ukraine
 
Web Template Mechanisms in SOC Verification - DVCon.pdf
Web Template Mechanisms in SOC Verification - DVCon.pdfWeb Template Mechanisms in SOC Verification - DVCon.pdf
Web Template Mechanisms in SOC Verification - DVCon.pdfSamHoney6
 
Polyteda: Power DRC/LVS, October 2016
Polyteda: Power DRC/LVS, October 2016Polyteda: Power DRC/LVS, October 2016
Polyteda: Power DRC/LVS, October 2016Oleksandra Nazola
 
NCM Training - Part 2 - Automation, Notification, Compliance and Reports
NCM Training - Part 2 - Automation, Notification, Compliance and ReportsNCM Training - Part 2 - Automation, Notification, Compliance and Reports
NCM Training - Part 2 - Automation, Notification, Compliance and ReportsManageEngine, Zoho Corporation
 

Ähnlich wie Uvm presentation dac2011_final (20)

PhD Slides
PhD SlidesPhD Slides
PhD Slides
 
DEF CON 27 - ALI ISLAM and DAN REGALADO WEAPONIZING HYPERVISORS
DEF CON 27 - ALI ISLAM and DAN REGALADO WEAPONIZING HYPERVISORSDEF CON 27 - ALI ISLAM and DAN REGALADO WEAPONIZING HYPERVISORS
DEF CON 27 - ALI ISLAM and DAN REGALADO WEAPONIZING HYPERVISORS
 
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
 
Challenges in Using UVM at SoC Level
Challenges in Using UVM at SoC LevelChallenges in Using UVM at SoC Level
Challenges in Using UVM at SoC Level
 
Getting started with RISC-V verification what's next after compliance testing
Getting started with RISC-V verification what's next after compliance testingGetting started with RISC-V verification what's next after compliance testing
Getting started with RISC-V verification what's next after compliance testing
 
Security defined routing_cybergamut_v1_1
Security defined routing_cybergamut_v1_1Security defined routing_cybergamut_v1_1
Security defined routing_cybergamut_v1_1
 
Early Software Development through Palladium Emulation
Early Software Development through Palladium EmulationEarly Software Development through Palladium Emulation
Early Software Development through Palladium Emulation
 
Summit 16: The Hitchhiker/Hacker's Guide to NFV Benchmarking
Summit 16: The Hitchhiker/Hacker's Guide to NFV BenchmarkingSummit 16: The Hitchhiker/Hacker's Guide to NFV Benchmarking
Summit 16: The Hitchhiker/Hacker's Guide to NFV Benchmarking
 
Performance Tuning Oracle Weblogic Server 12c
Performance Tuning Oracle Weblogic Server 12cPerformance Tuning Oracle Weblogic Server 12c
Performance Tuning Oracle Weblogic Server 12c
 
HKG18-TR14 - Postmortem Debugging with Coresight
HKG18-TR14 - Postmortem Debugging with CoresightHKG18-TR14 - Postmortem Debugging with Coresight
HKG18-TR14 - Postmortem Debugging with Coresight
 
Prasad_Meduri
Prasad_MeduriPrasad_Meduri
Prasad_Meduri
 
DvClub 2102 tlm based software control of uvcs for vertical verification re...
DvClub 2102   tlm based software control of uvcs for vertical verification re...DvClub 2102   tlm based software control of uvcs for vertical verification re...
DvClub 2102 tlm based software control of uvcs for vertical verification re...
 
System Architecture Exploration Training Class
System Architecture Exploration Training ClassSystem Architecture Exploration Training Class
System Architecture Exploration Training Class
 
Python on Rails - Victory Levy
Python on Rails - Victory LevyPython on Rails - Victory Levy
Python on Rails - Victory Levy
 
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
 
Web Template Mechanisms in SOC Verification - DVCon.pdf
Web Template Mechanisms in SOC Verification - DVCon.pdfWeb Template Mechanisms in SOC Verification - DVCon.pdf
Web Template Mechanisms in SOC Verification - DVCon.pdf
 
Polyteda: Power DRC/LVS, October 2016
Polyteda: Power DRC/LVS, October 2016Polyteda: Power DRC/LVS, October 2016
Polyteda: Power DRC/LVS, October 2016
 
ASIC design verification
ASIC design verificationASIC design verification
ASIC design verification
 
UVM Basics.pdf
UVM Basics.pdfUVM Basics.pdf
UVM Basics.pdf
 
NCM Training - Part 2 - Automation, Notification, Compliance and Reports
NCM Training - Part 2 - Automation, Notification, Compliance and ReportsNCM Training - Part 2 - Automation, Notification, Compliance and Reports
NCM Training - Part 2 - Automation, Notification, Compliance and Reports
 

Mehr von sean chen

Example my hdl
Example my hdlExample my hdl
Example my hdlsean chen
 
0021.system partitioning
0021.system partitioning0021.system partitioning
0021.system partitioningsean chen
 
0015.register allocation-graph-coloring
0015.register allocation-graph-coloring0015.register allocation-graph-coloring
0015.register allocation-graph-coloringsean chen
 
0006.scheduling not-ilp-not-force
0006.scheduling not-ilp-not-force0006.scheduling not-ilp-not-force
0006.scheduling not-ilp-not-forcesean chen
 
Dominator tree
Dominator treeDominator tree
Dominator treesean chen
 
Lect.10.arm soc.4 neon
Lect.10.arm soc.4 neonLect.10.arm soc.4 neon
Lect.10.arm soc.4 neonsean chen
 
Image scalar hw_algorithm
Image scalar hw_algorithmImage scalar hw_algorithm
Image scalar hw_algorithmsean chen
 
Virtual platform
Virtual platformVirtual platform
Virtual platformsean chen
 

Mehr von sean chen (20)

Demo
DemoDemo
Demo
 
Example my hdl
Example my hdlExample my hdl
Example my hdl
 
0021.system partitioning
0021.system partitioning0021.system partitioning
0021.system partitioning
 
0015.register allocation-graph-coloring
0015.register allocation-graph-coloring0015.register allocation-graph-coloring
0015.register allocation-graph-coloring
 
0006.scheduling not-ilp-not-force
0006.scheduling not-ilp-not-force0006.scheduling not-ilp-not-force
0006.scheduling not-ilp-not-force
 
Lecture07
Lecture07Lecture07
Lecture07
 
Lecture04
Lecture04Lecture04
Lecture04
 
Lecture03
Lecture03Lecture03
Lecture03
 
Dominator tree
Dominator treeDominator tree
Dominator tree
 
Work items
Work itemsWork items
Work items
 
Work items
Work itemsWork items
Work items
 
ocelot
ocelotocelot
ocelot
 
Lect.10.arm soc.4 neon
Lect.10.arm soc.4 neonLect.10.arm soc.4 neon
Lect.10.arm soc.4 neon
 
Image scalar hw_algorithm
Image scalar hw_algorithmImage scalar hw_algorithm
Image scalar hw_algorithm
 
Virtual platform
Virtual platformVirtual platform
Virtual platform
 
Spi
SpiSpi
Spi
 
Serializer
SerializerSerializer
Serializer
 
Defense
DefenseDefense
Defense
 
Defense
DefenseDefense
Defense
 
I2 c
I2 cI2 c
I2 c
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 

Kürzlich hochgeladen (20)

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 

Uvm presentation dac2011_final

  • 1. Universal Verification Methodology (UVM) Verifying Blocks to IP to SOCs and Systems Organizers: Dennis Brophy Stan Krolikoski Yatin Trivedi San Diego, CA June 5, 2011
  • 2. 2 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Workshop Outline 10:00am – 10:05am Dennis Brophy Welcome 10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture 10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing 11:25am – 11:40am Break 11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package 12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches 12:50pm – 1:00pm All Q & A
  • 3. 3 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Workshop Outline 10:00am – 10:05am Dennis Brophy Welcome 10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture 10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing 11:25am – 11:40am Break 11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package 12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches 12:50pm – 1:00pm All Q & A
  • 4. UVM Concepts and Architecture Sharon Rosenberg Cadence Design Systems
  • 5. 5 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM Core Capabilities • Universal Verification Methodology – A methodology and a class library for building advanced reusable verification components – Methodology first! • Relies on strong, proven industry foundations – The core of the success is adherence to a standard (architecture, stimulus creation, automation, factory usage, etc’) • We added useful enablers and tuned a few to make UVM1.0 more capable • This section covers the high-level concepts of UVM – Critical to successful deployment of UVM – Mature and proven
  • 6. 6 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems The Goal: Automation • Coverage Driven Verification (CDV) environments  Automated Stimulus Generation  Independent Checking  Coverage Collection Packaged for Reuse 23098432 38748932 23432239 17821961 10932893 20395483 18902904 23843298 23432432 24324322 55252255 09273822 13814791 4098e092 23432424 24242355 25262622 26452454 24524522 seed Monitor Scoreboard Checking Coverage Monitor Driver DUT APB UARTTestsTests Stimulus Generator Coverage Coverage Random Sequence Generator
  • 7. 7 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM Architecture: Interface Level Encapsulation • Agents provide all the verification logic for a device in the system • Instantiation and connection logic is done by the developer in a standard manner • A Standard agent has: – Sequencer for generating traffic – Driver to drive the DUT – Monitor • The monitor is independent of the driving logic • Agent has standard configuration parameters for the integrator to use uvm_agent uvm_ sequencerConfig: uvm_monitor events, status, data uvm_driver DUT interface sequences vivi
  • 8. 8 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Agent Standard Configuration uvm_agent Config: is_active: UVM_ACTIVE min_addr: 16’h0100 uvm_monitor events, status, data DUT • A standard agent is configured using an enumeration field: is_active • UVM_ACTIVE: • Actively drive an interface or device • Driver, Sequencer and Monitor are allocated • UVM_PASSIVE: • Only the Monitor is allocated • Still able to do checking and collect coverage • Other user-defined configuration parameters can also be added • Example: address configuration for slave devices uvm_ sequencer uvm_driver sequences vivi passive
  • 9. 9 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems uvm: Configurable Bus Environment Environment slave agent sequencer Config: monitor events, status, data driver seq vivi i/f i/f vi master agent sequencer Config: monitor events, status, data driver seq vivi i/f i/f vi Config: slave agent sequencer Config: monitor events, status, data driver seq arbiter agent sequencer Config: monitor events, status, data driver seq monitor events, status, data Some agent config parameters come from the environment config Allows changing the number of agents without further configuration per agent master agent sequencer Config: monitor events, status, data driver seq vivi i/f i/f vi master agent sequencer Config: monitor events, status, data driver seq Virtual interface Sometimes common for all agents DUT interfaceEnv’s allow reuse at the interface level! num_masters=3 num_slaves=2 Bus level monitoring can be used by all agents
  • 10. 10 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM Configuration Mechanism • The configuration mechanism allows a powerful way for attribute configuration • Configuration mechanism advantages: – Mechanism semantic allows an upper component to override contained components values • No file changes are required – Can configure attributes at various hierarchy locations – Wild cards and regular expressions allow configuration of multiple attributes with a single command – Debug capabilities – Support for user defined types (e.g. SV virtual interfaces) – Run-time configuration support – Type safe solution
  • 11. 11 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM1.0 Configuration Enhancements (Cont’) class uvm_config_db#(type T=int) extends uvm_resource_db#(T); static function bit set ( uvm_component cntxt, string inst_name,string field_name, T value); static function bit get ( uvm_component cntxt, string inst_name,string field_name, ref T value); static function bit exists(…); static function void dump(); static task wait_modified(…); endclass // run-time configuration example: task mycomp::run_phase (uvm_phase phase); uvm_config_db#(int)::set(this, “*”, “field”, 10); #10; uvm_config_db#(int)::set(this, “a.b.c”, “field”, 20); endtask Note – all uvm_config_db functions are static so they must be called using the :: operator Check if configuration exists Dump the data base Wait for value to be set in the uvm_config_db
  • 12. 12 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems // setting the virtual interface from the top module module ubus_top; … ubus_if ubus_if0(); // instance of the interface initial begin uvm_config_db#(virtual ubus_if):: set(null,"*.ubus_demo_tb0.ubus0","vif", ubus_if0); run_test(); … end endmodule Virtual Interface Configuration Example function void ubus_bus_monitor:: connect_phase( uvm_phase phase); if (!uvm_config_db#(virtual ubus_if):: get(this, “”,"vif", vif)) else `uvm_error("NOVIF",{"virtual interface must be set for: ", get_full_name(),".vif"}) endfunction: connect_phase Setting in the top removes hierarchy dependencies in the testbench, allows consistency and other configuration capabilities Built-in checking
  • 13. 13 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Where SV Language Stops and UVM Begins Example: Data Items Does language alone support all the necessary customization operations? • Randomization • Printing • Cloning • Comparing • Copying • Packing • Transaction Recording class data_packet_c ; string pkt_name; pkt_header _c header; byte payload [ ]; byte parity; parity_e parity_type; int ipg_delay; endclass class data_packet_c ; string pkt_name; rand pkt_header _c header; rand byte payload [ ]; byte parity; rand parity_e parity_type; rand int ipg_delay; endclass UVM provides the rest! No! Only randomization is defined in the SystemVerilog LRM
  • 14. 14 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Enabling Data Item Automation class data_packet_c ; string rev_no = “v1.1p”; rand pkt_hdr _c header; //class:{dest_addr, pkt_length} rand byte payload [ ]; byte parity; rand parity_e parity_type; rand int ipg_delay; // Constraints, constructor, methods . . . endclass: data_packet_c extends uvm_sequence_item; derived from uvm_sequence_item // field declarations and automation flags `uvm_object_utils_begin(data_packet_c) `uvm_field_string( rev_no, UVM_DEFAULT+ UVM_NOPACK) `uvm_field_object( header, UVM_DEFAULT) `uvm_field_array_int( payload, UVM_DEFAULT) `uvm_field_int( parity, UVM_DEFAULT) `uvm_field_enum( parity_e, parity_type, UVM_DEFAULT) `uvm_field_int( ipg_delay, UVM_DEFAULT + UVM_NOCOMPARE) `uvm_object_utils_end // Additional: constraints, constructor, methods endclass : data_packet_c Specify field level flags: UVM_NOCOMPARE, UVM_NOPRINT, etc. Enables all automation for data_packet_c fields
  • 15. 15 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems // two instances of data_packet_c data_packet_c packet1, packet2; initial begin // create and randomize new packet packet1 = new(“my_packet”); assert(packet1.randomize()); // print using UVM automation packet1.print(); // copy using UVM automation packet2 = new(“copy_packet”); packet2.copy(packet1)); packet2.rev_no = “v1.1s”; // print using UVM tree printer packet2.print( uvm_default_tree_printer); end Data Type Automation--------------------------------------- Name Type Value --------------------------------------- my_packet data_packet_c @479 rev_no string v1.1p header pkt_header_c @520 dest_addr integral 'h25 pkt_length integral 'd29 payload da(integral) - [0] integral 'h2a [1] integral 'hdb ... ... ... [28] integral 'h21 parity integral 'hd9 parity_type parity_e GOOD_PARITY ipg_delay integral 'd20 --------------------------------------- copy(): Copies all fields of packet1 to packet2, including sub-classes and arrays UVM also allows manual implementation for performance or other reasons copy_packet: (data_packet_c@489) { rev_no: v1.1s header: (pkt_header_c@576) { dest_addr: 'h25 pkt_length: 'd29 } payload: { [0]: 'h2a [1]: 'hdb ... ... [28]: 'h21 } parity: 'hd9 parity_type: GOOD_PARITY ipg_delay: 'd20 }
  • 16. 16 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM Messaging Facility • Simple Messaging: – `uvm_*(string id, string message, <verbosity>); • Where * (severity) is one of fatal, error, warning, info • <verbosity> is only valid for uvm_info UVM_INFO myfile.sv(15) @10 uvm_test_top.test.generator [PKT]: Packet Sent •Output `uvm_info("PKT", "Packet Sent“, UVM_LOW); • Messages print trace information with advantages over $display: • Aware of its hierarchy/scope in testbench • Allows filtering based on hierarchy, verbosity, and time severity file/line time message body scope id
  • 17. 17 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM Sequences • A sequencer controls the generation of random stimulus by executing sequences • A sequence captures meaningful streams of transactions – A simple sequence is a random transaction generator – A more complex sequence can contain timing, additional constraints, parameters • Sequences: – Allow reactive generation – react to DUT – Have many built-in capabilities like interrupt support, arbitration schemes, automatic factory support, etc – Can be nested inside other sequences – Are reusable at higher levels
  • 18. 18 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM Tests and Testbenches • Placing all components in the test requires lot of duplication • Separate the env configuration and the test – TB class instantiates and configures reusable components • Tests instantiate a testbench – Specify the nature of generated traffic – Can modify configuration parameters as needed • Benefits – Tests are shorter, and descriptive – Less knowledge to create a test – Easier to maintain – changes are done in a central location module top ( ); class test extends … class tb extends uvm_env… VirtualSequencer VC3 Mon BFM Mon BFM VC 2 Mon DRV SEQR VC3 Mon BFM Mon BFM BUS VC Mon DRV SEQR VC3 Mon BFM Mon BFM VC1 Mon DRV SEQR DUT MemCPU PeriphPeriph Module VC Scoreboard coverage
  • 19. 19 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM Simulation Phases • When using classes, you need to manage environment creation at run-time • Test execution is divided to phases – Configuration, testbench creation, run-time, check, etc • Unique tasks are performed in each simulation phase – Set-up activities are performed during “testbench creation” while expected results may be addressed in “check” – Phases run in order – next phase does not begin until previous phase is complete • UVM provides set of standard phases enabling VIP plug&play – Allows orchestrating the activity of components that were created by different resources
  • 20. 20 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM Simulation Phases Post-elaboration activity (e.g. print topology) UVM component’s built-in phases - run in order Build Top-Level Testbench Topology tasks - Run-time execution of the test Gathers details on the final DUT state Processes and checks the simulation results. Simulation results analysis and reporting Configure verification components Connect environment topology build connect start_of_simulation run extract check report end of elaboration Note: All phases except run() execute in zero time reset configure main shutdown All phase names have postfix “_phase”
  • 21. 21 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM Testbench Example class bridge_tb extends uvm_env; `uvm_component_utils(bridge_tb) apb_env apb; // APB OVC ahb_env ahb; // AHB OVC bridge_mod_env bridge_mod ; // Module OVC virtual function void build_phase(uvm_phase phase); super.build_phase(phase); uvm_config_db#(uvm_active_passive_enum)::set(this, “apb.slave*”,”is_active”, UVM_ACTIVE); uvm_config_db#(int)::set(this, “ahb”,”master_num”, 3); uvm_config_db#(uvm_active_passive_enum)::set(this, “ahb.slave[0]”, “is_active”, UVM_PASSIVE); apb = apb_env::type_id::create(“apb”, this); ahb = ahb_env::type_id::create(“ahb”, this); bridge_mod = bridge_mod_env::type_id::create(“bridge_mod”, this); endfunction endclass: bridge_tb Extends from uvm_env Instances of reusable verification components and module verif component Create and build using a standard mechanism Configure using wildcards The test creates an instance of the tesbench, overrides constraints, and sets the default sequences
  • 22. 22 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Overriding SV Components and Data Objects • UVM Provides a mechanism for overriding the default data items and objects in a testbench • “Polymorphism made easy” for test writers Replace data_packet_c in agent[0] sequencer & Replace agent[1]’s driver with new driver (v1) A B data_packet_c short_packet_c my_env agent[0] sequencer driver monitor A A A agent[1] sequencer driver monitor A A A my_env agent[0] sequencer driver monitor A A A agent[1] sequencer driver monitor A A A B driver A driver driver_v1 For a specific test, we want to replace all data_packet_c packets with short_packet_c packets B B B B B B Replace specific instances: object::type_id::set_inst_override (derived_obj::get_type(), “hierarchical_path”); Example: data_packet_c::type_id::set_inst_override (short_packet_c::get_type(), “my_env.agent[0].sequencer”); my_driver::type_id::set_inst_override (driver_v1::get_type(), “my_env.agent[1]”); Replace ALL instances: object::type_id::set_type_override( derived_obj::get_type()) Example: data_packet_c::type_id::set_type_override (short_packet_c::get_type());
  • 23. 23 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems The Test Launching Mechanism module top() import ... // uvm lib, tests, and packages endmodule : top DUT IF IF rst clksIF initial begin run_test(); end test3 tb envenvenv Creates test and starts simulation phases for all components Multiple tests DUT snapshot test2 tb envenv Allows execution of multiple tests on the same snapshot test1 tb envenvenv Function void build(); … endfunction Compile the entire test suite together and use command- line option to select a test: % <sim> –f run.f +UVM_TESTNAME=test3
  • 24. 24 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Extensions Using Callbacks • Like the factory, callbacks are a way to affect an existing component from outside • The SystemVerilog language includes built-in callbacks – e.g. post_randomize(), pre_body() • Callbacks requires the developer to predict the extension location and create a proper hook • Callbacks advantages: – They do not require inheritance – Multiple callbacks can be combined
  • 25. 25 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM Report Catcher Callback Goal: Message Manipulation class my_catcher extends uvm_report_catcher; virtual function action_e catch(); if(get_severity()==UVM_ERROR && get_id()=="MYID") begin set_severity(UVM_INFO); set_action(get_action() - UVM_COUNT); end return THROW; // can throw the message for more manipulation or catch it to avoid further processing endfunction endclass // In testbench run phase my_catcher catcher = new; uvm_report_cb::add(null,catcher); `uvm_error("MYID", "This one should be demoted") #100; catcher.callback_mode(0); //disable the catcher `uvm_error("MYID", "This one should not be demoted") • can disable a callback using the built-in callback_mode() method This example demotes MYID to be an Info
  • 26. 26 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Command-line Processor Class • Provide a vendor independent general interface to the command line arguments • Supported categories: – Basic Arguments and values • get_args, get_args_matches – Tool information • get_tool_name(), get_tool_version() – Built-in UVM aware Command Line arguments • Supports setting various UVM variables from the command line such as verbosity and configuration settings for integral types and strings • +uvm_set_config_int, +uvm_set_config_string
  • 27. 27 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Command-line Processor Example class test extends uvm_test; … function void start_of_simulation(); uvm_cmdline_processor clp; string arg_values[$]; string tool, version; clp = uvm_cmdline_processor::get_inst(); tool = clp.get_tool_name(); version = clp.get_tool_version(); `uvm_info("MYINFO1", ("Tool: %s, Version : %s", tool, version, UVM_LOW) void'(clp.get_arg_values("+foo=", arg_values)); `uvm_info("MYINFO1","arg_values size : %0d", arg_values.size(), UVM_LOW)); for(int i = 0; i < arg_values.size(); i++) begin `uvm_info("MYINFO1", "arg_values[%0d]: %0s", i, arg_values[i], UVM_LOW)); end endfunction endclass Fetching the command line processor singleton class Use the class methods Get argument values
  • 28. 28 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM Concepts Summary • UVM Basics are proven and widely in use with all simulators • Provides both reuse and productivity • UVM1.0 adds additional features to complement and tune the existing capabilities – UVM 1.1 includes bug fixes after initial users’ feedback • If you have a new project, UVM is the way to go!
  • 29. 29 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Workshop Outline 10:00am – 10:05am Dennis Brophy Welcome 10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture 10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing 11:25am – 11:40am Break 11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package 12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches 12:50pm – 1:00pm All Q & A
  • 30. UVM Sequences & Phasing Tom Fitzpatrick Mentor Graphics
  • 31. 31 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Sequences • Decouple stimulus specification from structural hierarchy – Simple test writer API • Sequences define transaction streams – May start on any matching sequencer • Sequences can call children • Built-in get_response() task • Sequences & transactions customizable via the factory • Driver converts transaction to pin wiggles u1u1 u1 s5 s1 s4 s3 s2 s1
  • 32. 32 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Using Sequences And Sequence Items • A sequence is a UVM object – to start it: – Construction using the factory: • spi_tfer_seq spi_seq = spi_tfr_seq::type_id::create(“spi_seq”); – Configure - explicitly or via constrained randomization – Start execution on the target sequencer: • spi_seq.start(spi_sequencer); • Within a sequence a sequence_item is: – Constructed – Scheduled on a sequencer with start_item() • Blocking call that returns when the driver is ready – Configured – explicitly or via constrained randomization – Consumed with finish_item()
  • 33. 33 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Sequence_Item Example class spi_seq_item extends uvm_sequence_item; // UVM Factory Registration Macro `uvm_object_utils(spi_seq_item) // Data Members (Outputs rand, inputs non-rand) rand logic[127:0] spi_data; rand bit[6:0] no_bits; rand bit RX_NEG; // Analysis members: logic[127:0] mosi; logic[7:0] cs; // Methods extern function new(string name = "spi_seq_item"); extern function void do_copy(uvm_object rhs); extern function bit do_compare(uvm_object rhs, uvm_comparer comparer); extern function string convert2string(); extern function void do_print(uvm_printer printer); extern function void do_record(uvm_recorder recorder); endclass:spi_seq_item •Data fields: •Request direction rand (stimulus generation) •Response direction non-rand •UVM Object Methods •These methods get generated by the automation macros •Write them yourself to improve performance if desired
  • 34. 34 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Basic Sequence-Driver API class my_seq extends uvm_sequence #(my_req, my_rsp); task body(); for(int unsigned i = 0; i < 20000; i++) begin req = my_req::type_id::create(“req”); start_item(req); assert(req.randomize()); finish_item(req); get_response(rsp); end endtask endclass class my_driver extends uvm_driver; task run_phase(uvm_phase phase); … begin seq_item_port.get_next_item(req); drive_transfer(req); rsp.set_id_info(rsp); seq_item_port.item_done(); seq_item_port.put_response(rsp); end endtask endclass Sequence parameterized by request/response types body() method defines what happens
  • 35. 35 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Sequence API Options • Macros allow constraints to be passed in • Macros require pre-defined callbacks to modify behavior • Multiple macro variations • Explicit API provides greater control and easier debug Using Macros req = my_req::type_id::create(“req”); start_item(req); assert(req.randomize()); finish_item(req); get_response(rsp); `uvm_do(req) get_response(rsp); Explicit
  • 36. 36 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Sequencer and Driver typedef uvm_sequencer#(my_req,my_rsp) my_sequencer; class my_master_agent extends uvm_agent; function void build_phase(uvm_phase phase); void’(uvm_config_db#(bitstream_t)::get(this,“”, “is_active”, is_a); if(is_a) begin seqr = my_sequencer::type_id::create(“seqr”, this); driver = my_driver::type_id::create(“driver”, this); end endfunction function void connect_phase(uvm_phase phase); if(is_a) driver.seq_item_port.connect(seqr.seq_item_export); endfunction endclass my_sequencer uvm_sequencer#(my_req,my_rsp) agent driverseqr By default, you don’t need to extend uvm_sequencer
  • 37. 37 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Starting a Sequence • Explicit • Implicit (Default Sequence) – Using wrapper – Using instance task xxx_phase(uvm_phase phase); my_seq.start(seqr); uvm_config_db#(uvm_object_wrapper)::set(this,“agent.sqr.xxx_phase", "default_sequence", my_seq::type_id::get()); myseq = my_seq::type_id::create(“myseq”); uvm_config_db#(uvm_sequence_base)::set(this,“agent.sqr.xxx_phase", "default_sequence", myseq); my_seq.set_priority(200); “xxx_phase” can be any run-time phase Wrapper Sequence Sequencer Phase
  • 38. 38 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Calling start() my_seq.pre_start() my_seq.pre_body(); parent.pre_do(0); parent.mid_do(this); my_seq.body(); parent.post_do(this); my_seq.post_body(); my_seq.post_start(); my_seq.start(uvm_sequencer_base seqr, uvm_sequencer_base parent = null, integer priority = 100, bit call_pre_post = 1); task xxx_phase(uvm_phase phase); my_seq.start(seqr); on sequencer If parent!=null If call_pre_post ==1 Stimulus code
  • 39. 39 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Sequence Library (Beta) class my_seq_lib extends uvm_sequence_library #(my_item); `uvm_object_utils(my_seq_lib) `uvm_sequence_library_utils(my_seq_lib) function new(string name=""); super.new(name); init_sequence_library(); endfunction ... endclass class uvm_sequence_library #(type REQ=int,RSP=REQ) extends uvm_sequence #(REQ,RSP); class my_seq1 extends my_seq; `uvm_object_utils(my_seq1) `uvm_add_to_seq_lib(my_seq1,my_seq_lib) … endclass my_seq_lib my_seq1 my_seq2 Sequence Library IS-A Sequence class my_seq2 extends my_seq; `uvm_object_utils(my_seq2) `uvm_add_to_seq_lib(my_seq2,my_seq_lib) … endclass `uvm_sequence_utils `uvm_sequencer_utils et. al. deprecated
  • 40. 40 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Sequence Library typedef enum { UVM_SEQ_LIB_RAND, UVM_SEQ_LIB_RANDC, UVM_SEQ_LIB_ITEM, UVM_SEQ_LIB_USER } uvm_sequence_lib_mode; uvm_config_db #(uvm_sequence_lib_mode)::set(this, "sequencer.xxx_phase“, “default_sequence.selection_mode”, MODE); •Random sequence selection •Random cyclic selection •Emit only items,no sequence execution •User-defined random selection function int unsigned select_sequence(int unsigned max); // pick from 0 <= select_sequence < max; endfunction
  • 41. 41 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems UVM Phasing uvm •shutdown post_shutdown main pre_main •post_configure •configure pre_configure •post_reset •reset pre_reset pre_shutdown •post_main common build end_of_elaboration connect start_of_simulation run extract check report final Several new runtime phases in parallel with run_phase() To simplify examples, these slides will show a reduced set of phases new vip Legacy OVM VIP time reset configure main shutdown
  • 42. 42 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Phase Synchronization • By default, all components must allow all other components to complete a phase before all components move to next phase time reset configure main shutdown reset configure main shutdown reset configure main shutdownVIP 1: VIP 2: VIP 3:
  • 43. 43 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Phase Semantics • In UVM Reference Guide, the semantics for each phase are defined, e.g. reset Upon Entry •Indicates that the hardware reset signal is ready to be asserted. Typical Uses •Assert reset signals. •Components connected to virtual interfaces should drive their output to their specified reset or idle value. •Components and environments should initialize their state variables. •Clock generators start generating active edges. •De-assert the reset signal(s) just before exit. •Wait for the reset signal(s) to be de-asserted. Exit Criteria •Reset signal has just been de-asserted. •Main or base clock is working and stable. •At least one active clock edge has occurred. •Output signals and state variables have been initialized.
  • 44. 44 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems uvm_component Basic API task/function <name>_phase(uvm_phase phase) phase.raise_objection(this); phase.drop_objection(this); function void phase_started(uvm_phase phase) function void phase_ended(uvm_phase phase) Call these to prevent and re-allow the current phase ending Implement these to specify behavior for the start/end of each phase; threads started here are not auto-killed Implement these to specify behavior for a specific phase; threads started here are auto-killed
  • 45. 45 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems uvm_component Example task main_phase(uvm_phase phase); phase.raise_objection(this); … main test behavior, e.g. send 100 items… phase.drop_objection(this); endtask function void phase_started(uvm_phase phase); if (phase.get_name()==“post_reset”) fork background_thread(); join_none endfunction Called automatically when main phase starts (after all phase_started() calls) Called automatically when phase first starts. Thread forks when phase is post_reset.
  • 46. 46 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems User-defined Phases • Integrator can create one or more phases • Integrator can create schedules with any mix of standard and user-defined phases then assign components to use one of those schedules configure post_configure New sched: cfg2 “want new phase named cfg2 after configure and before post_configure” uvm_domain common = uvm_domain::get_common_domain(); common.add(cfg2_phase::get(), .after_phase(configure_phase::get(), .before_phase(post_configure_phase.get()) );
  • 47. 47 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Separate Domains • Sometimes it is OK for a part of the design/environment to do behavior that is out of alignment with the remainder – e.g. mid-sim reset of a portion of the chip – e.g. one side starts main functionality while other side is finishing configuration
  • 48. 48 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Domain B Domain A Domains • Domains are collections of components that must advance phases in unison – By default, no inter-domain synchronization time reset configure main shutdown reset configure main shutdown reset configure main shutdownVIP 1: VIP 2: VIP 3:
  • 49. 49 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Domain Synchronization • Domains can be synchronized at one, many, or all phase transitions. Domain B Domain A time reset configure main shutdown reset configure main shutdownVIP 1: VIP 2: Two domains sync’d at main domainA.sync(.target(domainB),.phase(uvm_main_phase::get()));
  • 50. 50 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Fully Synchronized Domains • If two domains are fully synchronized and one domain jumps back, the second domain will continue in its current phase and wait for the first to catch up Domain B Domain A time reset configure main shutdown reset configure main shutdownVIP 1: VIP 2: reset config main phase.jump(uvm_reset_phase::get())
  • 51. 51 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Sequences and Phases class my_seq extends uvm_sequence#(my_req,my_rsp); virtual task body(); if (starting_phase != null) starting_phase.raise_objection(this, “Starting my_seq”); …//body of sequence if (starting_phase != null) starting_phase.drop_objection(this, “Ending my_seq”); endtask endclass Raise objection first Drop objection last Phase won’t end until my_seq completes Unless you do a jump()
  • 52. 52 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Ending Phases VIP: task run_phase(uvm_phase phase); phase.raise_objection(); seq.start(); phase.drop_objection(); endtask my_seq run extract check report Must raise_objection() before first NBA Phase ends when all objections are dropped
  • 53. 53 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Ending Phases VIP: task main_phase(uvm_phase phase); phase.raise_objection(); seq.start(); phase.drop_objection(); endtask main_seq main Must raise_objection() before first NBA Phase ends when all objections are dropped post_main
  • 54. 54 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems task main_phase(uvm_phase phase); while(!ending) begin … if(ending) phase.drop_objection(); … endtask virtual function void phase_ready_to_end(uvm_phase phase); if(phase.get_name==“main”) begin ending = 1; if(busy) phase.raise_objection(); end endfunction Delaying Phase End VIP: task main_phase(uvm_phase phase); phase.raise_objection(); seq.start(); phase.drop_objection(); endtask main_seq main Drop when really done all_dropped resets phase objection post_main calls phase_ready_to_end() last chance to raise an objection
  • 55. 55 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Ending Phases • Phase objection must be raised before first NBA • Phase forks off processes – wait for phase.all_dropped – call phase_ready_to_end() • component can raise objection – Check objection count – call phase_ended() – kill_processes – execute successors
  • 56. 56 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Test Phase Example task reset_phase (uvm_phase phase); reset_seq rst = reset_seq::type_id::create(“rst”); phase.raise_objection(this, “resetting”); rst.start(protocol_sqr); phase.drop_objection(this, “ending reset”); endtask: reset_phase task configure_phase (uvm_phase phase); configure_seq cfg = configure_seq::type_id::create(“cfg”); phase.raise_objection(this, “configuring dut”); cfg.start(protocol_sqr); phase.drop_objection(this, “dut configured”); endtask: configure_phase task main_phase (uvm_phase phase); test_function1_seq tst = test_function1_seq ::type_id::create(“tst”); phase.raise_objection(this, “functionality test”); tst.start(protocol_sqr); phase.drop_objection(this, “functionality tested”); endtask: main_phase (Test) Component runs different sequences in each phase. Phase level sequences may run on different sequences in parallel
  • 57. 57 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Workshop Outline 10:00am – 10:05am Dennis Brophy Welcome 10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture 10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing 11:25am – 11:40am Break 11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package 12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches 12:50pm – 1:00pm All Q & A
  • 58. 58 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Accellera at DAC • Accellera Breakfast at DAC: UVM User Experiences – An Accellera event sponsored by Cadence, Mentor, and Synopsys – Tuesday, June 7th, 7:00am-8:30am, Room 25AB • Accellera IP-XACT Seminar – An introduction to IP-XACT, IEEE 1685, Ecosystem and Examples – Tuesday, June 7th, 2:00pm-4:00pm, Room 26AB • Birds-Of-A-Feather Meeting – Soft IP Tagging Standardization Kickoff – Tuesday, June 7, 7:00 PM-8:30 PM, Room 31AB
  • 59. 59 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Workshop Outline 10:00am – 10:05am Dennis Brophy Welcome 10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture 10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing 11:25am – 11:40am Break 11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package 12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches 12:50pm – 1:00pm All Q & A
  • 60. UVM Transaction Level Modeling (TLM2) Janick Bergeron Synopsys
  • 61. 61 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems TLM-1.0 • Unidirectional put/get interfaces • Simple message-passing semantics • No response model – E.g. What did I read back?? • Never really caught on in SystemC •Initiator •Target •put •Initiator •Target •get
  • 62. 62 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Why TLM-2.0? • Better interoperability over TLM-1.0 – Semantics – Pre-defined transaction for buses • Performance – Pass by reference (in SystemC) – Temporal decoupling
  • 63. 63 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems TLM-2.0 in SV vs SC • Blocking transport interface • Nonblocking transport interfaces • Direct memory interface • Debug transport interface • Initiator sockets • Target sockets • Generic payload • Phases • Convenience sockets • Payload event queue • Quantum keeper • Instance-specific extensions • Non-ignorable and mandatory extensions • Temporal decoupling
  • 64. 64 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems TLM-2.0 Semantics • Blocking – When the call returns, the transaction is done – Response is annotated • Nonblocking – Call back and forth • Protocol state changes • Transaction is updated – Until one says “done” •Initiator •Target •Initiator •Target
  • 65. 65 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Generic Payload Attributes Attribute Type Modifiable? Command uvm_tlm_command_e No Address bit [63:0] Interconnect only Data byte unsigned [ ] Yes (read command) Data length int unsigned No Byte enable pointer byte unsigned [ ] No Byte enable length int unsigned No Streaming width int unsigned No Response status uvm_tlm_response_status_e Target only Extensions uvm_tlm_extension_base [ ] Yes • Pre-defined bus transaction
  • 66. 66 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Connecting to SystemC • Tool-specific mechanism – Not part of UVM •SystemVerilog •SystemC •Copy across at method call and return
  • 67. 67 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems TLM-2.0 Bridge Between SV & SC • Proxy sockets terminate the TLM2 connections in each language – Create SV/SC bridge •Initiator •Target •Pack/unpack •Proxy Trgt •Proxy Init •TLM2 Bridge •Predefined for GP in VCS •User-defined for GP extensions or non-GP •Unaware of language crossing •Unaware of language crossing
  • 68. UVM Register Model Janick Bergeron Synopsys
  • 69. 69 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Overall Architecture AdapterGeneric physical r/w Backdoor Any bus agent Register Model Pre-Defined SequencesPre-Defined SequencesUser-Defined Sequences Pre-Defined SequencesPre-Defined SequencesPre-Defined Sequences DUT Spec Generator Abstract read/write Bus-specific r/w item
  • 70. 70 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Specification & Generation Register Model IP-XACT Generator System RDL SQL CSV MS- Word ... UVM UVM X EDA Vendors Generator Generator Generator
  • 71. 71 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Physical Interfaces • Register model abstracts – Physical interfaces – Addresses – Endianness Register Model User perspective R1.read(...); ... R2.write(...); ... R3.read(...); R1 R2 R3 DUT may change Perspective stays the same
  • 72. 72 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Mirror • Register model mirrors content of registers in DUT – “Scoreboard” for registers – Updated on read and write() – Optionally checked on read() Register Model R1 R2 R3 R1 R3 R2 API
  • 73. 73 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Back-door Access • Must define HDL path to register in DUT – Generator-specific • Access RTL directly in zero-time via VPI – May affect simulator performance R1 R2 R3 R1 R3 R2 API Mirror is implicitly updated
  • 74. 74 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Programmer’s View F1 F2 F3 R0 F4... ...F4 R1 R0 R2 F5 F6 F5 F6 F5 F6 A[0] A[1] A[255] F7 F8 F9 F10 RF0[0] RF1[0] F7 F8 F9 F10 RF0[0] RF1[0] F7 F8 F9 F10 RF0[7] RF1[7] M0 M0[0..65535] Array of Registers Array of Register Files Memory Multi-address Register
  • 75. 75 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems F1 Class View • One class per field • One class per register – Name – Address – Contained fields – Read/Write methods F3 F4... F2 R0 ...F4 R1 R0 R2 F5 F6 F5 F6 F5 F6 A[0] A[1] A[255] F7 F8 F9 F10 RF0[0] RF1[0] F7 F9 F10 RF0[0] RF1[0] F7 F8 F9 F10 RF0[7] RF1[7] M0 M0[0..65535] F8 class R1_reg extends uvm_reg; uvm_reg_field F1; uvm_reg_field F2; uvm_reg_field F3; endclass Generated Make sure names are different from base class methods
  • 76. 76 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems F1 Class View • One class per block – Name, Base address – Contained registers, register files, memories • May be arrays • Optional: contained fields F3 F4... F2 R0 ...F4 R1 R0 R2 F5 F6 F5 F6 F5 F6 A[0] A[1] A[255] F7 F8 F9 F10 RF0[0] RF1[0] F7 F9 F10 RF0[0] RF1[0] F7 F8 F9 F10 RF0[7] RF1[7] M0 M0[0..65535] F8 class B_blk extends uvm_reg_block; R0_reg R0; R1_reg R1; R2_reg R2; A_reg A[256]; RF_rfile RF[8]; ovm_ral_mem M0; endclass Generated Make sure names are different from base class methods
  • 77. 77 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems API View • Methods in relevant class instance F1 F2 F3 R0 F4... ...F4 R1 R0 R2 F5 F6 F5 F6 F5 F6 A[0] A[1] A[255] F7 F8 F9 F10 RF0[0] RF1[0] F7 F8 F9 F10 RF0[0] RF1[0] F7 F8 F9 F10 RF0[7] RF1[7] M0 M0[0..65535] blk.R0.get_full_name() blk.F4.read(...) blk.A[1].write(...) blk.A[255].F5.write(...) foreach (blk.RF[i]) begin blk.RF[i].R0.F7.read(..._); end blk.M0.read(...)
  • 78. 78 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Reading and Writing • Specify target register by hierarchical reference in register model – Compile-time checking • Use read() and write() method on – Register – Field – Memory blk.blk[2].regfile[4].reg.fld blk.blk[2].regfile[4].reg.fld.read(...); blk.mem.write(...); By-name API also available
  • 79. 79 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Register Sequences • Sequences accessing registers should be virtual sequences – Not associated with a particular sequencer type • Contain a reference to register model • Access registers in body() task class my_test_seq extends uvm_sequence; my_dut_model regmodel; virtual task body(); regmodel.R1.write(...); regmodel.R2.read(...); ... endtask endclass
  • 80. 80 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Register Sequences • Includes pre-defined sequences – Check reset values – Toggle & check every bit – Front-door/back-door accesses – Memory walking
  • 81. 81 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Introspection • Rich introspection API Block Register Field Register File Map get_regfile() get_maps() is_in_map() get_offset() get_fields() get_block() get_blocks() get_parent() get_parent() get_maps() get_registers() get_access() get_reset() get_n_bits() get_lsp_pos() is_volatile()
  • 82. 82 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Coverage Models • Register models may contain coverage models – Up to the generator • Not instantiated by default – Can be large. Instantiate only when needed. – To enable: • Not collected by default – To recursively enable uvm_reg::include_coverage(“*”, UVM_CVR_ALL); All coverage models In all blocks and registers blk.set_coverage(UVM_CVR_ALL); All coverage models in block
  • 83. 83 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Customization Opportunities Register Model Spec Generator Pre-Build Post-Build Best Options, value-add DON’T! Factory Callbacks
  • 84. 84 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems There’s a LOT more! • DUT integration • Multiple interfaces • Randomization • Vertical Reuse • “Offline” access • User-defined front-door accesses • Access serialization • Pipelined accesses
  • 85. 85 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Workshop Outline 10:00am – 10:05am Dennis Brophy Welcome 10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture 10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing 11:25am – 11:40am Break 11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package 12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches 12:50pm – 1:00pm All Q & A
  • 86. Putting Together UVM Testbenches Ambar Sarkar Paradigm Works, Inc.
  • 87. 87 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Agenda • Case studies – Several UVM1.0 environments deployed – Currently in production – Novice to sophisticated teams • Getting started with UVM is relatively easy – Basic tasks remain simple – Were able to use a “prescriptive” approach – Iteratively developed and scales to any complexity • Advanced uses – Unit to system-level – VIP Stacking/Layering
  • 88. 88 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Implementing Basic Steps Connect DUT to testbench Send clocks and resets Initialize the DUT Send traffic Add checking Write tests Once plumbing in place, a simple prescriptive approach works Increasing sophistication, but scalable
  • 89. 89 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Example Channel Engine Host Interface Read/Write Packet Input Packet Output 1 Packet Output 3 Packet Output 2
  • 90. 90 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Example Environment in UVM DUT unit_tb test cases ... interrupt scoreboard packet scoreboard host agent Config: active Config: active pi agent clk_rst agent Config :active clk_rst agent Config :active po agent active Config: po agent active Config: po agent active Config: [x3]
  • 91. 91 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Connect DUT to Testbench Always use SystemVerilog interface Use clocking blocks for testbench per interface Use modports for DUT Pass interface to the environment Use uvm_config_db Channel Engine Host Interface Read/Write Packet Input Packet Output 1 Packet Output 3 Packet Output 2 Set (Top level initial block) uvm_config_db#(virtual host_if)::set( null, “my_tb.*”,“vif”, vif); Get (In build phase of the agent) if(!uvm_config_db#(virtual host_if)::get( this,,"vif",vif)) `uvm_fatal(“NOVIF”, . . . );
  • 92. 92 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Connect Clock and Resets Combine clock and reset as agents in one env Define reset as sequences class clk_rst_env extends uvm_env; clk_rst_cfg cfg; //! VIP configuration object //! bring ports out for convenience uvm_analysis_port #(uvm_transaction) rst_mon_ap_out; //! Agents in env clk_agent clk_agt; rst_agent rst_agt; . . . task clk_rst_reset_pulse_sequence::body(); `uvm_do_with(change_sequence, { level == 0; hold_cycles == init_cycles; `uvm_do_with(change_sequence, { level == 1; hold_cycles == assert_cycles; `uvm_do_with(change_sequence, { level == 0; hold_cycles == negate_cycles;
  • 93. 93 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Initializing the DUT Add transaction definitions for configuration interface (host) Add driver code for host Setup host initialization seq class host_transaction extends uvm_sequence_item; ... rand bit[31:0] hi_addr; rand bit[7:0] hi_wr_data; . . . task pwr_hi_master_driver::drive_transaction(host_transaction trans); if (trans.trans_kind == PWR_HI_WR) begin intf.hif_address = trans.hi_addr; intf.hif_data = trans.hi_wr_data; . . . task my_env_init_sequence::body(); regmodel.R1.write(...); regmodel.R2.read(...); . . .
  • 94. 94 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Sending traffic Similar to initialization Sequences differ //! sequence body. task pi_sequence::body(); pi_transaction#(. . .) req_xn; cfg_inst = p_sequencer.cfg; forever begin p_sequencer.peek_port.peek(req_xn); if (!this.randomize()) begin `uvm_fatal({get_name(), "RNDFLT"}, "Can't randomize"); end `uvm_do_with(this_transaction, { trans_kind == req_xn.trans_kind; read_vld_delay inside { [0:15] }; . . . }); . . .
  • 95. 95 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Checking and Writing Tests Add checking in the environment Add monitor code for all components Connect the scoreboards Add test-specific checking in the test as needed class my_env extends uvm_env; unit_scoreboard#(uvm_transaction, uvm_transaction) sb; function void my_env::build_phase(uvm_phase phase); ... sb = unit_scoreboard#(uvm_transaction, uvm_transaction) ::type_id::create({get_name(), "_sb"}, this); function void pwc_env::connect_phase(uvm_phase phase); . . . pi_mon.mon_ap_out.connect(sb.post_export); po_mon.mon_ap_out.connect(sb.check_export);
  • 96. 96 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Connecting Unit to System Level
  • 97. 97 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems • Scoreboarding • Reuse SB encapsulated within sub-envs • Chain the scoreboards • Functional Coverage • Needed to filter coverage points • Reuse monitors • Avoid duplicated instances • Gate Simulations • Disable monitors • Disable internal scoreboards • Registers • Register abstraction reused, but different interfaces used • Configurations • Defined separate system configuration • Top level instantiated sub-env configurations • Sequences • Virtual sequencer only at the system level • Initialization sequences reused from unit-level • Traffic sequences created from scratch at the system level Connecting Unit to System Level: Reuse
  • 98. 98 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Connecting Unit to System Level: Prescription For each sub-env class Extend sub-env base class Make all internal components passive Added sub-env config object to your system config Turn off virtual sequencer at the unit level Declare at system-level: unit_env_cfg unit_env_cfg_inst; `uvm_field_object(unit_env_cfg_inst, UVM_REFERENCE)
  • 99. 99 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems VIP Stacking/Layering VIP Agent Bottom Monitor Driver Config is_active=1 has_interface=1 Sequencer vi vi Analysis VIP Agent Top Monitor Design Under Test Analysis Config is_active=1 has_interface=0 Convert Monitor Convert Sequencer Sequencer Converts upwards Converts Downwards
  • 100. 100 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Summary • Getting started with UVM was relatively easy Once initial plumbing in place Basic tasks remain simple Were able to use a “prescriptive” approach • Able to iteratively develop testbench Scales to any complexity Unit to system Stacking of VIPs • Deployed across projects and simulation vendors Worked with minor gotchas No UVM issues found Some SystemVerilog support issues among vendors e.g. Inout ports and modports and clocking blocks
  • 101. 101 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Workshop Outline 10:00am – 10:05am Dennis Brophy Welcome 10:05am – 10:45am Sharon Rosenberg UVM Concepts and Architecture 10:45am – 11:25am Tom Fitzpatrick UVM Sequences and Phasing 11:25am – 11:40am Break 11:40am – 12:20pm Janick Bergeron UVM TLM2 and Register Package 12:20pm – 12:50pm Ambar Sarkar Putting Together UVM Testbenches 12:50pm – 1:00pm All Q & A
  • 102. 102 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Questions? • Download UVM from www.accellera.org – Reference Guide – User Guide – Reference Implementation – Discussion Forum
  • 103. 103 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Accellera at DAC • Accellera Breakfast at DAC: UVM User Experiences – An Accellera event sponsored by Cadence, Mentor, and Synopsys – Tuesday, June 7th, 7:00am-8:30am, Room 25AB • Accellera IP-XACT Seminar – An introduction to IP-XACT, IEEE 1685, Ecosystem and Examples – Tuesday, June 7th, 2:00pm-4:00pm, Room 26AB • Birds-Of-A-Feather Meeting – Soft IP Tagging Standardization Kickoff – Tuesday, June 7, 7:00 PM-8:30 PM, Room 31AB
  • 104. 104 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Lunch in Room 20D Show your Workshop Badge for entry
  • 105. 105 DAC Workshop on Universal Verification Methodology (UVM) - Verifying Blocks to IP to SOCs and Systems Thank You