Professional Documents
Culture Documents
Course Advanced Uvm Session2 Understanding The Factory and Configuration Tfitzpatrick PDF
Course Advanced Uvm Session2 Understanding The Factory and Configuration Tfitzpatrick PDF
Tom Fitzpatrick
Verification Evangelist
info@verificationacademy.com | www.verificationacademy.com
Two Customization Mechanisms
• Factory
• Allows test to change the type of a desired component
or object
• Typically set up at start of simulation
• Configuration
• Allows parents to define properties for children
- Static (build-time) – Highest parent “wins”
- Dynamic (run_time) – Last set “wins”
• All UVM components get their own configuration
- Optionally use to configure their children
© 2013 Mentor Graphics Corporation, all rights reserved.
Create() vs. New()
class my_env extends uvm_env; new() hard-codes the type
virtual function void build_phase(uvm_phase phase);
…without
comp1 = new(“comp1”, this);
modifying the
comp2 = my_comp::type_id::create(“comp2”, this);
instantiating
endfunction
code!
class my_comp extends uvm_component;
`uvm_component_utils(my_comp) create() returns a
… constructed instance
endclass comp1 from the factory
class my_Xcomp
my_comp extends
extendsuvm_component;
my_comp; Factory lets you change
`uvm_component_utils(my_Xcomp)
`uvm_component_utils(my_comp) the type of the created
… comp2 component…
endclass
…
endfunction
© 2013 Mentor Graphics Corporation, all rights reserved.
Overriding a Type
class test extends uvm_test;
New Desired
function void build_phase(uvm_phase phase);
type
e = my_env::type_id::create(“e”, this); All Instances
shape::type_id::set_type_override( circle::get_type() ); Overridden
…
endfunction
© 2013 Mentor Graphics Corporation, all rights reserved.
Overriding an Instance
class test extends uvm_test; New Desired type
function void build_phase(uvm_phase phase);
Instance Name
e = my_env::type_id::create(“e”, this);
shape::type_id::set_type_override( circle::get_type() ); Instance
shape::type_id::set_inst_override( triangle::get_type(), “e.u2” ); Changed
…
endfunction
© 2013 Mentor Graphics Corporation, all rights reserved.
Using Parameterized Types
class test extends uvm_test;
function void build_phase(uvm_phase phase);
e = my_env::type_id::create(“e”, this);
shape::type_id::set_type_override( circle::get_type() );
shape::type_id::set_inst_override( triangle::get_type(), “e.u2” );
…
endfunction
© 2013 Mentor Graphics Corporation, all rights reserved.
Using Parameterized Types
class test extends uvm_test; class red #(int SIDES=3)
function void build_phase(uvm_phase phase); extends uvm_component;
e = my_env::type_id::create(“e”, this); `uvm_component_param_utils(red#(SIDES))
shape::type_id::set_type_override( circle::get_type() );
shape::type_id::set_inst_override( triangle::get_type(), “e.u2” );
endmodule: top
Command line: vsim +UVM_TESTNAME=test
© 2013 Mentor Graphics Corporation, all rights reserved.
Tests are Components, too!
• Always call run_test() with null argument
class test extends uvm_test;
module top; `uvm_component_utils(test)
... …
endclass class test2 extends uvm_test;
`uvm_component_utils(test2)
initial …
begin: blk endclass
...
run_test();
end
endmodule: top
Command line: vsim +UVM_TESTNAME=test2
© 2013 Mentor Graphics Corporation, all rights reserved.
Use the Factory for Objects, too
class test extends uvm_test;
`uvm_component_utils(test)
…
virtual function void build_phase(phase);
e = my_env::type_id::create(“env”, this);
my_seq::type_id::set_type_override(my_seq2::get_type());
endfunction
endclass class my_env extends uvm_env;
virtual function void run_phase(uvm_phase phase);
rseq = my_seq::type_id::create(“rseq”);
endfunction
class my_seq2 extends my_seq;
`uvm_object_utils(my_seq2)
…
endclass
Tom Fitzpatrick
Verification Evangelist
info@verificationacademy.com | www.verificationacademy.com