Verification Engineerの戯言
ovm_doマクロについては、ここに書きましたが、
前回のdefault_sequencerの設定にもあったovm_do_withマクロについて、みていきたいと思います。
ovm_doマクロと同様にovm_do_withマクロのコードは、src/macros/ovm_sequence_defines.svhにあります。
前回のdefault_sequencerの設定にもあったovm_do_withマクロについて、みていきたいと思います。
ovm_doマクロと同様にovm_do_withマクロのコードは、src/macros/ovm_sequence_defines.svhにあります。
`define ovm_do_with(OVM_SEQUENCE_ITEM, CONSTRAINTS) \ begin \ ovm_virtual_sequencer ovs; \ ovm_sequence os; \ OVM_SEQUENCE_ITEM = new(`"OVM_SEQUENCE_ITEM`");\ if ($cast(ovs, m_sequencer)) \ if(!$cast(os, OVM_SEQUENCE_ITEM)) \ ovm_report_fatal("ITMVSQ", "Cannot do items in a virtual sequence."); \ $cast(OVM_SEQUENCE_ITEM , create_item(OVM_SEQUENCE_ITEM, m_sequencer)); \ start_item(OVM_SEQUENCE_ITEM); \ assert(OVM_SEQUENCE_ITEM.randomize() with CONSTRAINTS ) else begin \ ovm_report_warning("RNDFLD", "Randomization failed in ovm_do_with action"); \ end \ finish_item(OVM_SEQUENCE_ITEM);\ endランダム生成のOVM_SEQUENCE_ITEM.randomize()の部分でwithで第2引数で指定した制約をしているだけですね。
検証、Verification、SystemVerilog、OVM、Open Verification Methodology