UVMになって、`uvm_do_onマクロというものが追加されました。
macros/uvm_sequence_defines.svh内で次のように定義されています。
macros/uvm_sequence_defines.svh内で次のように定義されています。
`define uvm_do_on(UVM_SEQUENCE_ITEM, SEQUENCER_REF) \ begin \ `uvm_create_on(UVM_SEQUENCE_ITEM, SEQUENCER_REF) \ start_item(UVM_SEQUENCE_ITEM); \ if (!UVM_SEQUENCE_ITEM.randomize()) begin \ uvm_report_warning("RNDFLD", "Randomization failed in uvm_do action"); \ end \ finish_item(UVM_SEQUENCE_ITEM); \ end
uvm_doマクロは、次のようになっています。
2つのマクロの違いは、'''create_itemの第2引数が違うだけ(m_sequencer と SEQUENCER_REF)。
シーケンサーの指定ができるがどうかだけね!
`define uvm_do(UVM_SEQUENCE_ITEM) \ begin \ `uvm_create(UVM_SEQUENCE_ITEM) \ start_item(UVM_SEQUENCE_ITEM); \ if(!UVM_SEQUENCE_ITEM.randomize()) begin \ uvm_report_warning("RNDFLD", "Randomization failed in uvm_do action"); \ end \ finish_item(UVM_SEQUENCE_ITEM); \ end違いuvm_create_onとuvm_createだけ。
2つのマクロの違いは、'''create_itemの第2引数が違うだけ(m_sequencer と SEQUENCER_REF)。
シーケンサーの指定ができるがどうかだけね!
`define uvm_create(UVM_SEQUENCE_ITEM) \ begin \ uvm_object_wrapper w_; w_ = UVM_SEQUENCE_ITEM.get_type(); \ $cast(UVM_SEQUENCE_ITEM , create_item(w_, m_sequencer, `"UVM_SEQUENCE_ITEM`"));\ end\ `define uvm_create_on(UVM_SEQUENCE_ITEM, SEQUENCER_REF) \ begin \ uvm_object_wrapper w_; w_ = UVM_SEQUENCE_ITEM.get_type(); \ $cast(UVM_SEQUENCE_ITEM , create_item(w_, SEQUENCER_REF, `"UVM_SEQUENCE_ITEM`"));\ end
検証、Verification、SystemVerilog、UVM、Unified Verification Methodology