Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

OVM : ovm_do_withマクロ

Verification Engineerの戯言

ovm_doマクロについては、ここに書きましたが、
前回の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