在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1735|回复: 2

[原创] sequence机制

[复制链接]
发表于 2021-9-24 16:47:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

      Everybody,now,let me start my journey of skill highlights!


                               
登录/注册后可看大图



       sequence --->>sequencer--->>driver 之间的通讯。首先是(顶层)sequence的启动,分多种方式,第一种是手动启动,即调用start()函数,但是书写位置可以在某一component(如sequencer,agent,env,test)的main_phase中。第二种是使用default_sequence,只需要在某个component(如sequencer,agent,env,test)的build_phase中设置如下代码(以test为例):
uvm_config_db#(uvm_object_wrapper)::set(
                                          this,
                                          "env.kernel.main_phase",
                                          "defualt_sequence",
                                          vsequence::type_id::get());
第三种仍然使用defualt_sequence,只是要先例化sequence,然后再设置如下代码
uvm_config_db#(vsequence)::set(
                                          this,
                                          "env.kernel.main_phase",
                                          "defualt_sequence",
                                          vsequence_t::type_id::get());

其中vsequence_t是vsequence的一个对象。
对于底层sequence,则可以在vsequence的body任务中使用`uvm_do系列宏和start.()。
进入到main_phase后,sequence被sequencer启动后则会调用sequence的body任务中(实际上会依次pre_body,body,post_body),最底层的sequence中使用的`uvm_do或者start_item和finish_item会通过sequencer等待driver的seq_item_port.item_done()的回应,然后跳出`uvm_do或者start_item和finish_item。


                               
登录/注册后可看大图



      在最底层sequence中产生transaction的方式有`uvm_do()系列宏和start_item()、finish_itme(),其中`uvm_do实质上是包含了
tr=new("tr");

start_item(tr);

assert(tr.randomize()with{tr.pload.size()==100;});

finish_item(tr);

当然,start_item()和finish_item()被调用前tr要先被例化。嵌套sequence主要侧重于在同一个sequencer上启动不同的sequence,而vsequence也是嵌套的一种,但更侧重于在不同的sequencer中启动不同的sequence,以及他们之间同步。在上层sequence和vsequence中可以使用`uvm_do()系列宏产生下层sequence或者手动调用start.()启动sequence,但不能使用start_item()和finish_item(),因为它们的参数只能为transaction。

       vsequence天然具有同步不同底层sequence的作用,同时我们也只在vsequence中raise_objection和drop_objection,而且也只需要在test的buil_phase中设置vsequence为vsequencer的defualt_sequence即可,不需要再分别设置底层sequence为底层sequencer的defualt_sequence。




发表于 2021-9-24 16:55:38 | 显示全部楼层
这是uvm1.1中关于sequence的启动方式么
 楼主| 发表于 2021-9-24 17:08:31 | 显示全部楼层


mioyo 发表于 2021-9-24 16:55
这是uvm1.1中关于sequence的启动方式么


是的,加点个人理解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-27 03:41 , Processed in 0.014785 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表