等待硬件事件
虽然通常driver会负责正常的硬件同步,但sequence运行过程中可能需要与硬件事件同步,例如边界信号的转换或复位事件的结束。 不应该去修改driver然后为sequence_item添加一个新的字段,而是建议在包含指向virtual interface的指针的配置对象中实现 wait_for_hardware_event 方法。
举个例子,可以利用一个配置类,内含虚接口,传递给sequence,然后在配置类中实现相关方法。
/ Transaction Class
class transaction extends uvm_sequence_item;
`uvm_object_utils(transaction)
rand logic [31:0] addr;
rand logic [31:0] write_data;
rand bit read;
rand int delay;
bit error;
logic [31:0] read_data;
function new (string name);
super.new(name);
endfunction: new
constraint at_least_1 { delay inside {[1:20]};}
constraint 32bit_align {addr[1:0] == 0;}
endclass: transaction
/ Bus Configuration Object
class bus_config extends uvm_object;
`uvm_object_utils(bus_config)
virtual bus_i