UVM中的sequencer

一、 p_sequencer 与m_sequencer 的关系

m_sequencer是在UVM 原码中定义的,
p_sequencer 需要我们在代码中进行宏定义才能使用,通过如下定义后, 可以直接引用p_sequencer变量。

class er_gtx_ast_seq  extends er_ast_transfer_seq;
  `uvm_object_param_utils(er_gtx_ast_seq)

  `uvm_declare_p_sequencer(er_ast_sequencer)


  function new(string name="er_gtx_ast_seq");
    super.new(name);
    job_desc_port = new($sformatf("%s.%s", "job_desc_port", get_inst_id()), p_sequencer);
  endfunction

下图描述了uvm 原码中 sequence 和 sequencer的各种集成关系,m_sequencer 是在uvm_sequence_item中例化的 uvm_sequencer_base类型的变量,p_sequencer是在用户定义的seq中定义的er_ast_sequencer类型的变量,他们的句柄类型不同,所以一些定义在er_ast_sequencer(sqr2,sqr3,sqr4)中的变量如ast_cfg,可以通过p_sequencer.ast_cfg 引用,如果通过m_sequencer.ast_cfg引用会报错找不到。
***p_sequencer与m_sequencer从本质上来说是指向同一个sequencer的实例(来自uvm 实战,怎样指向同一个实例, 可以看源码, 留作业)。

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
UVM sequence 的 response 用于表示 sequence 执行的结果或产生的数据。一般情况下,response 是一个包含所需信息的类对象,可以包含任何需要传递给其他组件或者验证环境的数据。 在 sequence ,可以通过以下方式设置 response: 1. 在 sequence 定义一个 response 对象,并在需要的时候为其赋值。 2. 将 response 对象作为任务或函数的参数传递给其他组件,以便其他组件可以读取该对象的值。 另外,response 对象通常被定义为一个 transaction 类,其包含需要传递的所有字段。这样可以方便地传递多个数据项,并且可以轻松地扩展和维护代码。 例如,以下是一个简单的 sequence 示例,展示了如何使用 response: ```systemverilog class MySequence extends uvm_sequence #(MyTransaction); `uvm_object_utils(MySequence) task body(); MyTransaction txn; // 设置 txn 的字段值 // ... // 设置 response response = txn; endtask endclass ``` 在上述示例,`MyTransaction` 是一个自定义的 transaction 类,它包含了需要传递的字段。在 `body()` 函数,我们创建了一个 `MyTransaction` 对象 `txn` 并设置其字段的值。然后,将其赋值给 `response` 对象。 这样,在 sequence 执行完成后,其他组件就可以通过读取 `response` 对象来获取执行结果或产生的数据。 希望这个回答能够帮到你!如果还有其他问题,请随时提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值