UVM中的sequence

使用sequence机制之后,在不同的测试用例中,将不同的sequence设置成sequencer的main_phase的default_sequence。

当sequencer执行到main_phase时,发现又default_sequence,那么它就启动sequence。

sequence的启动

(1)start直接启动

my_seq.start(sequencer);

(2)使用default_sequence启动:当一个sequence启动后会自动执行sequence的body任务

  uvm_config_db#(uvm_object_wrapper)::set(this,"env.agt.sqr.main_phase",

                                                "default_sequence",

                                                base_sequence::type_id::get());

sequence的仲裁机制

UVM支持同一时刻在同一sequencer上启动多个sequence。

对于transaction来说,存在优先级的概念,优先级越高越容易被选中。

  • uvm_do或者uvm_do_with:默认优先级-1
  • uvm_do_pri或者uvm_do_pri_with:[ `uvm_do_pri("tr,100") ] 第二个参数改变transaction的优先级,这个数值必须是大于-1的整数。数字越大优先级越高
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` 对象来获取执行结果或产生的数据。 希望这个回答能够帮到你!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值