ドライバは、シーケンサからのトランザクションを受け取り、
その結果をシーケンサに戻します。
ドライバは、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