UVM sequence是一个容器,用于保存通过sequencer发送到driver的data items?(uvm_sequence_items)。
注意:?uvm_sequence 类有一个?uvm_sequence_item 类型的参数。
uvm_sequence 类声明:
virtual class uvm_seqence #( type REQ = uvm_sequence_item, type RSP = REQ) extends uvm_sequence_base
class my_sequence extends uvm_sequence #(my_seq_item);
`uvm_object_utils(my_sequence)
function new(string name = "my_sequnce");
super.new(name);
endfunction
task body();
...
endtask
endclass
为什么在sequence中使用`uvm_object_utils,为什么不使用`uvm_sequence_utils?
`uvm_sequence_utils 是一个基于字符串的sequence lib,在 UVM 中已弃用。
在body()方法中定义要做的事情。
除了 body() 方法之外,还会调用 pre_body 和 post_body 方法 by default。
class my_sequence extends uvm_sequence #(my_seq_item);
`uvm_object_utils(my_sequence)
function new(string name = "my_sequnce");
super.new(name);
endfunction
task pre_body();
...
endtask
task body();
...
endtask
task post_body();
...
endtask
endclass
Note:
目的是创建一个 seq_item,将其随机化,然后将其发送给driver。
让我们在UVM sequence macro和uvm_sequence_base class method章节分别讨论基于宏和现有方法的以上两种方法。