13 UVM sequence

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章节分别讨论基于宏和现有方法的以上两种方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值