1、一个sequencer上启动不同的sequence
需要并发手动起两个,不能使用default_sequence机制了:
class dut_sequence extends uvm_sequence #(dut_transaction);
dut_transaction tr;
`uvm_object_utils(dut_sequence);
function new(string name = "dut_sequence");
super.new(name);
endfunction
virtual task body();//每个sequence都有body的任务,启动sequence后自动执行该任务
if(starting_phase != null) begin
starting_phase.raise_objection(this);//sequence启动后起objection
`uvm_info("dut_sequence", "raise", UVM_LOW)
end
repeat(3) begin
`uvm_do(tr);//创建tr并随机化,并发送给sequencer
`uvm_info("dut_sequence", "seq1 send", UVM_LOW);
end
#1000;
if(starting_phase != null)
starting_phase.drop_objection(this);
endtask
endclass
class dut_sequence_0 extends uvm_sequence #(dut_transaction);
dut_transaction tr;
`uvm_object_utils(du