13.2 uvm_sequence_base Methods

可以使用uvm_sequence_base类中的预定义方法调用将随机序列项驱动到driver。有两种方法使用一组uvm_sequence_base方法,sequence可以通过这些方法发送sequence items并从driver检索响应(如果适用)。

A: Using wait_for_grant(), send_request(), wait_for_item_done() etc

以下方法在派生自uvm_sequence_item类的uvm_setquence_base类中定义。

Steps: 

  1. Create a seq_item using create() method.
  2. wait_for_grant
  3. Randomize seq_item
  4. send_request(req)
  5. wait_for_item_done()
  6. get_response (rsp)
class my_sequence extends uvm_sequence #(seq_item);
  `uvm_object_utils(my_sequence)
  
   function new (string name = "my_sequence")
     super.new(name);
   endfunction

   task body();
     req = seq_item::type_id::create("req");
     wait_for_grant();
     assert(req.randomize());
     send_request(req);
     wait_for_item_done();
     get_respose(rsp);
   endtask
endclass

B: Using start_item/finish_item methods

start_item和finish_item任务也在uvm_sequence_base类中定义。这两种方法都会启动sequence item的操作。

注:start_item和finish_item调用之间不应消耗仿真时间。

Steps: 

  1. Create a seq_item using create() method.
  2. start_item(req)
  3. Randomize seq_item
  4. finish_item(req)
class my_sequence extends uvm_sequence #(seq_item);
  `uvm_object_utils(my_sequence)
  
   function new (string name = "my_sequence")
     super.new(name);
   endfunction

   task body();
     req = seq_item::type_id::create("req");
     start_item(req);
     assert(req.randomize());
     finish_item(req);
   endtask
endclass

重要提示:

方法B与方法A相同。start_item(req)方法在内部调用wait_for_grant()方法以从sequencer获取grant。finish_item(req)方法在内部调用send_request()和wait_for_item_done()方法。因此,start_item和finish_item方法是它们的wrapper 方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值