答:sequence启动时,自动执行body。
- 每一个sequence都应该派生自uvm_sequence,并且在定义时指定要产生的transaction的类型,这里是my_transaction。
- 每一个 sequence都有一个body任务,当一个sequence启动之后,会自动执行body中的代码。
class my_sequence extends uvm_sequence #(my_transaction);
my_transaction m_trans;
function new(string name= "my_sequence");
super.new(name);
endfunction
virtual task body();
repeat (10) begin
`uvm_do(m_trans)
end
#1000;
endtask
`uvm_object_utils(my_sequence)
endclass
在上面的例子中,用到了宏: uvm_do。这个宏是UVM中最常用的宏之一,它用于:
- ①创建一个my_transaction的实例m_trans;
- ②将其随机化;
- ③最终将其送给 sequencer。
如果不使用uvm_do宏,也可以直接使用start_item与finish_item的方式产生transaction。