13 UVM sequence

发布时间:2023年12月27日

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:

  1. 这些 pre_body 和 post_body 任务是附加任务(可以命名为回调函数),可用于在执行 body() 方法之前和之后执行任何操作。?
  2. pre_body() 和 post_body() 方法是可选的。

13.4 How to write a sequence?

目的是创建一个 seq_item,将其随机化,然后将其发送给driver。

  1. 使用`uvm_do、`uvm_create、`uvm_send 等宏
  2. 使用基类中现有的方法
    1. 使用 wait_for_grant()、send_request()、wait_for_item_done()等?
    2. 使用 start_item/finish_item 方法。

让我们在UVM sequence macro和uvm_sequence_base class method章节分别讨论基于宏和现有方法的以上两种方法。

文章来源:https://blog.csdn.net/Bonnie_89/article/details/135250500
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。