8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 1/19
www.verificationacademy.com
Basic OVMConnecting Components
John Aynsley CTO, Doulos
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 2/19
Verification Components
Agent
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 3/19
OVM Class Hierarchy
ovm_env ovm_agent ovm_driver
ovm_monitor
ovm_scoreboard
ovm_test ovm_sequencer
Structureovm_component
ovm_object
ovm_report_object
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 4/19
Component
class my_agent extends ovm_agent;
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 5/19
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 6/19
Component
class my_agent extends ovm_agent;
`ovm_component_utils(my_agent)
my_sequencer my_sequencer_h;
my_driver my_driver_h;
function new(string name, ovm_component parent);
super.new(name, parent);
endfunction: new
function void build;
...
function void connect;
...
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 7/19
Factory Method
function void build;
super.build();
my_sequencer_h =
my_sequencer::type_id::create("my_sequencer_h", this);
my_driver_h =
my_driver ::type_id::create("my_driver_h" , this);
endfunction: build
"Factory methods" can be overridden in tests
Instance name Parent
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 8/19
Connect
function void build;
super.build();
my_sequencer_h =
my_sequencer::type_id::create("my_sequencer_h", this);
my_driver_h =
my_driver ::type_id::create("my_driver_h" , this);
endfunction: build
function void connect;
my_driver_h.seq_item_port.connect(
my_sequencer_h.seq_item_export );
endfunction: connect
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 9/19
Connect
function void build;
super.build();
my_sequencer_h =
my_sequencer::type_id::create("my_sequencer_h", this);
my_driver_h =
my_driver ::type_id::create("my_driver_h" , this);
endfunction: build
function void connect;
my_driver_h.seq_item_port.connect(
my_sequencer_h.seq_item_export );
endfunction: connect
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 10/19
Phase Methods
class my_component extends ovm_component;...
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 11/19
Phase Methods
class my_component extends ovm_component;...
function new(string name, ovm_component parent);
super.new(name, parent);
endfunction: new
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 12/19
Phase Methods
class my_component extends ovm_component;...
function new(string name, ovm_component parent);
super.new(name, parent);
endfunction: new
function void build;
super.build();...
Called top-down
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 13/19
Phase Methods
class my_component extends ovm_component;...
function new(string name, ovm_component parent);
super.new(name, parent);
endfunction: new
function void build;
super.build();...
function void connect;
...
Called bottom-up
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 14/19
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 15/19
Phase Methods
class my_component extends ovm_component;...
function new(string name, ovm_component parent);
super.new(name, parent);
endfunction: new
function void build;
super.build();...
function void connect;
...
function void start_of_simulation;
...
task run;...
The only task
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 16/19
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 17/19
Anatomy of an OVM Component
class my_component extends ovm_component;`ovm_component_utils(my_component)
virtual dut_if dut_if_h;
my_sequencer my_sequencer_h;
my_driver my_driver_h;
function new(string name, ovm_component parent); ...
function void build; ...
function void connect; ...
function void start_of_simulation; ...
task run; ...function check; ...
function report; ...
endclass
Factory registration
External interfaces
Internal component handles
Standard phase methods
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 18/19
Summary
8/2/2019 Module Ovmb Session5 Connecting Components
http://slidepdf.com/reader/full/module-ovmb-session5-connecting-components 19/19
www.verificationacademy.com
Basic OVMConnecting Components
John Aynsley CTO, Doulos