uvm_driver
class uvm_driver#(type REQ=uvm_sequence_item, type RSP=REQ) extend uvm_component;
用户在使用uvm_driver时,不应该直接调用uvm_driver,而应该定义一个继承于uvm_driver新driver类,其中的REQ,RSP类型也可以进行更改。
uvm_driver类的作用是和sequencer类的端口连接进行通信,从而实现事务对象的获取。通过pull实现:
driver.seq_item_port.connect(sequencer.seq_item_export); //双向
driver.rsp_port.connect(sequencer.rsp_export);
//实例
class dut_driver extends uvm_driver#(basic_transaction); // 定义,tansaction:sequence item类型
virtual chip_if vif;
bit[7:0] addr, data;
`uvm_component_utlis(dut_driver) //在factory中注册dut_driver类
function new(string name, uvm_component parent); //创建
super.new(name, parent);
endfunction: new
extern task run_phase(uvm_phase phase) //extern可以先声明方法,然后再外部进行定义
uvm_monitor
uvm_monitor中没有增添新的成员和方法,但在使用时用户应定义一个新的monitor类继承uvm_monitor。
uvm_monitor功能:
- 观测DUT的interface,收集总线信息
- 永远保持PASSIVE模式,即永远不会驱动DUT。passive,不主动修改内部信号
- 在总线协议或内部信号协议观察时,可以做一些功能和时序的检查
- 对于更加复杂的检查要求,可以将数据发送到其他的验证组件,如scoreboard,reference model,coverage collect
//实例
class serial_monitor extends uvm_monitor;
virtual serial_if.monitor mi;
function new(string name, uvm_component parent);
super.new(name, parent);
endfunction: new
function void build_phase(uvm_phase phase);
super.build_phase(phase);
endfunction: build_phase
extern task run_phase(uvm_phase)
.