Verification Engineerの戯言
User GuideのP.90にVirtual Sequencesの説明があります。
OVM 1.1では、ovm_virtual_sequencerクラスというものがありましたが、
OVM 2.0では、ovm_virtual_sequencerクラスが無くなり、ovm_sequencerクラスを使って、
Virtual sequencerを実現します。
通常のシーケンサのときは、ovm_update_sequence_lib_and_itemマクロを使います。
この`ovm_update_sequence_libマクロでは、3つのovm_random_sequence/vm_exhaustive_sequence/ovm_simple_sequenceのうち
ovm_simple_sequenceを登録しません。それは、Virtual Sequencerでは、シーケンスのみを扱い、シーケンス・アイテムは使わないからです。
実際のコードは、
OVM 1.1では、ovm_virtual_sequencerクラスというものがありましたが、
OVM 2.0では、ovm_virtual_sequencerクラスが無くなり、ovm_sequencerクラスを使って、
Virtual sequencerを実現します。
User Guide P.92
class simple_virtual_sequencer extends ovm_sequencer;
eth_sequencer eth_seqr;
cpu_sequencer cpu_seqr;
// Constructor
function new(input string name="simple_virtual_sequencer",
input ovm_component parent=null);
super.new(name, parent);
// Automation macro for virtual sequencer (no data item)
`ovm_update_sequence_lib
endfunction
// OVM automation macros for sequencers
'ovm_sequencer_utils(simple_virtual_sequencer)
endclass: simple_virtual_sequencer
ポイントは、new関数で`ovm_update_sequence_libマクロを使っているところです。通常のシーケンサのときは、ovm_update_sequence_lib_and_itemマクロを使います。
この`ovm_update_sequence_libマクロでは、3つのovm_random_sequence/vm_exhaustive_sequence/ovm_simple_sequenceのうち
ovm_simple_sequenceを登録しません。それは、Virtual Sequencerでは、シーケンスのみを扱い、シーケンス・アイテムは使わないからです。
実際のコードは、
src/macros/ovm_sequence_defines.svh
`define ovm_update_sequence_lib \
m_add_builtin_seqs(0); \
ovm_update_sequence_lib();
m_add_builtin_seqs関数は、ovm_sequencerクラスで次のように定義されています。 src/methodology/sequences/ovm_sequencer.svh
virtual function void m_add_builtin_seqs(bit add_simple = 1);
if(!sequence_ids.exists("ovm_random_sequence"))
add_sequence("ovm_random_sequence");
if(!sequence_ids.exists("ovm_exhaustive_sequence"))
add_sequence("ovm_exhaustive_sequence");
if(add_simple == 1)
if(!sequence_ids.exists("ovm_simple_sequence"))
add_sequence("ovm_simple_sequence");
endfunction
m_add_buildin_seqs関数の引数が1のときは、ovm_simple_sequenceを登録しません。ついでに、ovm_update_sequence_lib_and_itemマクロは、
src/macros/ovm_sequence_defines.svh
`define ovm_update_sequence_lib_and_item(USER_ITEM) \
ovm_factory::set_inst_override({get_full_name(), "*.item"}, \
"ovm_sequence_item", `"USER_ITEM`"); \
m_add_builtin_seqs(1); \
ovm_update_sequence_lib();
ですので、3つすべてを登録しています。検証、Verification、SystemVerilog、OVM、Open Verification Methodology