Professional Documents
Culture Documents
The Problem
The UVM 1.2 Library has 357 classes, 938 functions,
99 tasks, and 374 macros
If its in the
library, you
have to use it!
How do I find
what I need in
this huge library?
Im so
confused!
Which way
should I use?
2) The Sequence
Generates transactions
(stimulus)
3) The Environment
Delivers stimulus
Verifies DUT outputs
Environment Writer
Monitors
Scoreboards
Coverage collectors
The environment delivers
stimulus to the DUT and
verifies DUT outputs
Seen
Total
Classes
Methods
Macros
Classes
Methods
Macros
...
my_agent agent;
my_scoreboard scorebd;
`uvm_component_utils(my_agent)
UVM
First Time
Constructs
function new(string name, uvm_component
parent);Seen
super.new(name, parent);
Classes
2
endfunction: new
Methods
Running
Total
4
4
10
configuration object
handle into UVMs
configuration data base
Methods
Macros
11
No additional UVM
constructs needed!
...
function void connect_phase(uvm_phase phase);
UVM
First Time Running
Constructs
// set agent's ports to point to the
monitor'sSeen
ports Total
dut_inputs_port = mon.dut_inputs_port;
Classes
0
5
dut_outputs_port = mon.dut_outputs_port;
Methods
if (is_active == UVM_ACTIVE)
Macros
0
// connect driver to sequencer
drv.seq_item_port.connect(sqr.seq_item_export);
5
2
if (enable_coverage)
// connect monitor to coverage collector
mon.dut_inputs_port.connect(cov.analysis_export);
endfunction: connect_phase
endclass: my_agent
Stu Sutherland, Sutherland-HDL & Tom Fitzpatrick, Mentor Graphics
12
// virtual interface
pointer
Classes
1
13
14
Additional
Components
UVM
Constructs
First Time
Seen
Running
Total
10
Classes
Methods
A sequencer routes stimulus to the
driver
Macros
15
Test Writer
transaction
generator
(sequence)
environment
transaction
generator
(sequence)
DUT
interface
signals
interface
signals
interface
test
17
UVM
Constructs
First Time
Seen
Running
Total
Classes
Methods
12
Macros
my_dut_interface my_dut_if();
The set method is how the Test
my_dut_rtl my_dut(.if(my_dut_if()); Writer sends information down
the hierarchy
initial begin
uvm_config_db #(virtual my_dut_interface)::set(null,
"uvm_test_top", "DUT_IF", my_dut_if);
run_test();
run_test is the task that
end
starts the UVM execution
endmodule
18
UVM
Constructs
First Time
Seen
Running
Total
Classes
Methods
12
Macros
19
6
20
UVM
Constructs
First Time
Seen
Running
Total
Classes
Methods
19
Macros
21
Sequence Writer
23
24
28
Macros
25
task body();
aseq.start( bus_sequencer , this );Methods
Macros
bseq.start( gpio_sequencer , this );
endtask
endclass
Stu Sutherland, Sutherland-HDL & Tom Fitzpatrick, Mentor Graphics
Running
Total
11
28
26
Advanced Examples
phase_ready_to_end
Delay the end of a phase when necessary
function void my_comp:: phase_ready_to_end( uvm_phase phase );
if( !is_ok_to_end() ) begin
Delay
end of phase
phase.raise_objection( this , "not ready to end
phase"
);
when necessary
fork begin
wait_for_ok_end();
phase.drop_objection( this , "ok to end phase" );
end
join_none
end
endfunction : phase_ready_to_end
UVM
Constructs
First Time
Seen
Running
Total
Classes
11
Methods
29
Macros
28
Pipelined Protocols
Use the Response Handler in the sequence
class my_pipelined_seq extends uvm_sequence #(my_seq_item);
`uvm_object_utils(my_pipelined_seq)
...
task body();
my_seq_item req = my_seq_item::type_id::create("req");
use_response_handler(1);
UVM
First Time Running
...
Constructs
Seen
Total
start_item(req); Setup user-defined
Response Handler Classes
0
11
...
finish_item(req);
Methods
2
31
endtask
Macros
29
Pipelined Protocols
Driver uses one thread per pipeline stage
class my_pipelined_driver extends uvm_driver #(my_seq_item);
`uvm_component_utils(my_pipelined_driver)
...
UVM
First Time Running
task do_pipelined_transfer;
Constructs
Seen
Total
my_seq_item req;
Classes
0
11
forever begin
Methods
2
33
pipeline_lock.get();
seq_item_port.get(req);
Macros
0
7
...// execute first pipeline stage
pipeline_lock.put();
Alternate handshake
...// execute second pipeline stage
with the Sequence
seq_item_port.put(req);
end
endtask
endclass: my_pipelined_seq
Stu Sutherland, Sutherland-HDL & Tom Fitzpatrick, Mentor Graphics
30
31
The Solution
How do I find
what I need in
this huge library?
32