Layered Stimulusの例題、その4
Verification Engineerの戯言
examples/layered_stimulus/basic_scenario_norandomizeは、
シナリオのbodyタスクでapplyタスクを実行するときに、
第三引数を0にし、第一引数の制約付きランダム生成を実行しないようにしています。
シナリオのbodyタスクでapplyタスクを実行するときに、
第三引数を0にし、第一引数の制約付きランダム生成を実行しないようにしています。
apply(req,rsp, 0);
applyタスクについては、ovm_scenario::apply_send/applyタスクで説明しましたね!
実際には、applyタスクで実行するapply_requestタスク内で次のようにdata_req.randomize()を実行しないようにしているだけです。
実際には、applyタスクで実行するapply_requestタスク内で次のようにdata_req.randomize()を実行しないようにしているだけです。
if (randomize == 1) begin assert(data_req.randomize()); end
一方、examples/layered_stimulus/basic_scenario_apply_withは、
シナリオのbodyタスクでapply_withタスクで制約条件を追加しています。
シナリオのbodyタスクでapply_withタスクで制約条件を追加しています。
req = new(); taddr = (get_id() * `num_loops) + i; tdata = get_id() + i + 55; `apply_with(req,rsp,{ req.op == BUS_WRITE; req.addr == taddr; req.data == tdata; } ) req = new(); `apply_with(req,rsp,{ req.op == BUS_READ; req.addr == taddr;} )applyタスクとapply_withタスクの関係は、OVM : ovm_doマクロとOVM : ovm_do_withマクロの関係と同じだといえるでしょう!
検証、Verification、SystemVerilog、OVM、Open Verification Methodology