ドライバは、シーケンサからのトランザクションを受け取り、
その結果をシーケンサに戻します。
ドライバは、uvm_driverクラスを継承して、new関数とrun_phaseタスクを
実装するだけです。
その結果をシーケンサに戻します。
ドライバは、uvm_driverクラスを継承して、new関数とrun_phaseタスクを
実装するだけです。
// ドライバクラス
// REQにuvm_sequence_itemクラスを
// RSPにuvm_sequence_itemクラスをテンプレートに
class my_driver #(type REQ = uvm_sequence_item,
type RSP = uvm_sequence_item)
extends uvm_driver #(REQ, RSP);
int data_array[511:0];
function new(string name, uvm_component parent);
super.new(name, parent);
endfunction
// uvm_driverクラスを継承したときは、このタスクを実装する
task run_phase(uvm_phase phase);
REQ req;
RSP rsp;
forever begin
// シーケンスからトランザクションの要求をgetする
seq_item_port.get(req);
rsp = new();
rsp.set_id_info(req);
// Actually do the read or write here
if (req.op == BUS_READ) begin // リード時
rsp.addr = req.addr[8:0];
rsp.data = data_array[rsp.addr];
`uvm_info("my_driver",rsp.convert2string(),UVM_MEDIUM);
end
else begin // ライト時
data_array[req.addr[8:0]] = req.data;
`uvm_info("my_driver",req.convert2string(),UVM_MEDIUM);
end
// シーケンスへトランザクションの応答をputする
seq_item_port.put(rsp);
end
endtask
endclass
検証、Verification、SystemVerilog、UVM、Unified Verification Methodology