Vengineerの妄想(準備期間)

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

SequenceとScenarioの比較、その2

Verification Engineerの戯言

SequenceとScenarioでは、ドライバ内で実行するget_next_itemタスクが違います。また、応答の方法も違います。

Sequenceでは、ドライバ(ovm_driverクラスを継承する)の'runタスクではseq_item_prod_ifインスタンスget_next_itemタスクを呼びます。
応答(ドライバ->シーケンス)は、seq_item_prod_if.item_done関数を使います。itemを指定したい場合は、引数を与えればいいです。
      task run ();
        while(1) begin
          #10;
          seq_item_prod_if.get_next_item(item);
          ovm_report_info("Driver", "Printing received item :");
          item.print();
          seq_item_prod_if.item_done();
        end
      endtask: run

Scenarioでは、ドライバ(ovm_scenario_driverクラスを継承する)のrunタスクでは自分のget_next_itemタスクを呼びます。
応答(ドライバ->シナリオ)は、put_rsp.putタスクを使います。
     task run();
 
        REQ req;
        RSP rsp;

        forever begin
          get_next_item(req);
          #1;
          rsp = new();
          rsp.copy_req(req);

          // Actually do the read or write here
          if (req.op == BUS_READ) begin
	    rsp.data = data_array[req.addr[8:0]];
	    $display("Driver Read, addr: %0d, rdata: %0d",
		     req.addr, rsp.data);
          end else begin
            data_array[req.addr[8:0]] = req.data;
	    $display("Driver Write, addr: %0d, data: %0d",
	             req.addr, req.data);
          end
          $display("Driver about to call put rsp");
          put_rsp.put(rsp);
          $display("Driver called put rsp");
        end
      endtask

検証、Verification、SystemVerilog、OVM、Open Verification Methodology

P.S
本日、450エントリを達成できました。