【UVM基础】6、sequence和sequencer相关宏

本文探讨了UVM中的sequence机制、工厂和配置机制,重点讲解了sequence的启动与执行、item挂载、sequencer仲裁、锁定和有效性,以及virtualsequence的使用、嵌套和同步。通过实例展示了如何在实际验证环境中连接sequencer和virtualsequencer,以及如何利用这些技术进行sequence的高效管理与协调。

sequence首先是从driver中剥夺了产生激励的功能,目的是增强可扩展性,添加新的需求代码时就不需要重新编写main_phase了。

 解决办法就是:引入了sequence 机制,在解决的过程中还使用了factory机制、config机制。使用sequence机制之后,在不同的测试用例中,将不同的sequence设置 成sequencermain_phasedefault_sequence。当sequencer执行到main_phase时,发现有default_sequence,那么它就启动sequence 。

sequence的启动与执行

直接启动:start();

default_sequence启动:两种方法调用start任务

sequence宏

start()

使用场景:将sequence挂载到sequencer上的应用。

uvm_sequence::start(uvm_sequencer_base sequencer,
                    uvm_sequence_base parent_sequence=null
                    ini this_priority=-1,bit call_pre_post=1)

这个方法中,应该首先指明sequencer的句柄,如果这个sequence是顶部的sequence(没有上层嵌套他),那么可以省略对第二个parent_sequence的指定。

第三个参数的系统默认值是-1,会使得这个sequence会继承parent_sequence的优先值级,如果是顶部的sequence,会自动设置为100,也可以自己设置优先级数值。

第四个参数值一般使用默认值,这样uvm_sequence::pre_body()和uvm_sequence::post_body会在uvm_sequence::body()前后执行。

start_item()和finish_item()

使用场景:将item挂载到sequencer上的应用

uvm_sequence::start_item(uvm_sequencer_item item, ini this_priority=-1,
                    uvm_sequence_base sequence=null);
uvm_sequence::finish_item(uvm_sequencer_item item, ini this_priority=-1);                 

uvm_sequence::start_item中第三个参数需要用户注意是否将item和parent sequence挂载到不同的sequencer上面去。

使用item挂载到sequencer上的方法,需要创建item,还需要完成item的随机化,创建的方法;uvm_object::create()或者uvm_sequence::creat_item()

一个完整的item传送到driver有以下步骤:

1:创建item

2:通过start_item()方法获取的sequencer的授权许可,然后执行parent sequencer的方法pre_do();

3:对item进行随机化处理

4:通过finish_item()方法对随机化后的item进行mid_do()(也是parent sequence的方法 ),调用uvm_sequencer::send_request()和uvm_sequencer::wait_for_item_done()来完成item的发送以及sequence和driver的握手,最后在执行post_do()。

需要注意的是sequence和item的自身优先级,可以决定什么时候可以获得sequencer的授权。parent sequence的虚方法pre_do()、mid_do()、post_do()都是发生在发送item的过程中间。

以上两种方法的区别:

首先是挂载对象的不同,然后start()过程中,默认情况下或执行sequence的pre_body()和post_body(call_pre_post=0决定),但是并不是一定会执行。

start()方法执行顺序图:

 start_item()/finish_item执行顺序图:

 发送序列相关宏

uvm_do_on: 用于显式地指定使用哪个 sequencer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值