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