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"); endfunctionm_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