Vengineerの戯言

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

Layered Stimulusの例題、その4

Layered Stimulusの例題、その4

Verification Engineerの戯言

examples/layered_stimulus/basic_scenario_norandomizeは、
シナリオのbodyタスクapplyタスクを実行するときに、
第三引数を0にし、第一引数の制約付きランダム生成を実行しないようにしています。
      apply(req,rsp, 0);

applyタスクについては、ovm_scenario::apply_send/applyタスクで説明しましたね!
実際には、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タスクで制約条件を追加しています。
      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