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を指定したい場合は、引数を与えればいいです。
応答(ドライバ->シーケンス)は、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タスクを使います。
応答(ドライバ->シナリオ)は、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エントリを達成できました。
本日、450エントリを達成できました。