13 UVM sequence
2023-12-27 19:53:04
UVM sequence是一个容器,用于保存通过sequencer发送到driver的data items?(uvm_sequence_items)。
13.1 uvm_sequence hierarchy
注意:?uvm_sequence 类有一个?uvm_sequence_item 类型的参数。
uvm_sequence 类声明:
virtual class uvm_seqence #( type REQ = uvm_sequence_item, type RSP = REQ) extends uvm_sequence_base
13.2 uvm_sequence class structure
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 中已弃用。
13.3 What is the body() method?
在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:
- 这些 pre_body 和 post_body 任务是附加任务(可以命名为回调函数),可用于在执行 body() 方法之前和之后执行任何操作。?
- pre_body() 和 post_body() 方法是可选的。
13.4 How to write a sequence?
目的是创建一个 seq_item,将其随机化,然后将其发送给driver。
- 使用`uvm_do、`uvm_create、`uvm_send 等宏
- 使用基类中现有的方法
- 使用 wait_for_grant()、send_request()、wait_for_item_done()等?
- 使用 start_item/finish_item 方法。
让我们在UVM sequence macro和uvm_sequence_base class method章节分别讨论基于宏和现有方法的以上两种方法。
文章来源:https://blog.csdn.net/Bonnie_89/article/details/135250500
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!