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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6412|回复: 7

[求助] 求问一个uvm starting phase 为 null 的问题

[复制链接]
发表于 2015-1-26 21:02:36 | 显示全部楼层 |阅读模式

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

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

x
在做的项目使用了一个比较老的VIP环境,VIP自带的squence机制使用的是比较老的`uvm_sequence_utils的宏注册到VIP自带的sequencer上,现有的环境吧原来的VIP sequence作为子sequence放到seq lib基类中,在seq lib中用



  1. virtual task pre_body();
  2.         if(starting_phase != null)
  3.             starting_phase.raise_objection(this,{"Running sequence '",get_full_name(),"'"});
  4.     endtask : pre_body

  5.     virtual task post_body();
  6.         if(starting_phase != null)
  7.             starting_phase.drop_objection(this,{"Completed sequence '",get_full_name(),"'"});
  8.     endtask : post_body


复制代码


raise 和drop objection
原有的VIP的sequencer加入到virtual sequencer中,
新增加的virtual sequence继承seq lib基类而来,然后在test阶段将vseq绑定到v sequencer上


仿真报告中,seq lib基类中pre_body和post_body的信息没有打印
在vseq中检查starting_phase phase !=null,但是vseq用`uvm_do_on 调用的VIP seq中 starting_phase=null
run_phase阶段仿真时间没有推进,但是进入了body函数 ,使用工具 irun 12.20-s15 ,uvm版本1.1c,请问这种现象是什么原因引起的,在网上看到介绍说starting_phase 是seq成功指向sequencer的指针,那么我环境的问题是否是由于seq和sequencer的transaction类型不导致的
发表于 2015-1-26 22:48:10 | 显示全部楼层
这个是正常的,vseq只会调用自己的pre&post,不会调用原来seq的,所以这种情况是必然的,
你在vseq的pre&post加上raise跟drop应该就可以了
 楼主| 发表于 2015-1-26 23:18:45 | 显示全部楼层
回复 2# ia2ptk

先谢谢, vseq不能调用自己父类中的pre和post吗
发表于 2015-1-27 21:18:25 | 显示全部楼层
2楼正解,这种情况是必然的,v_seq不会对这两个函数的
发表于 2015-1-29 12:50:32 | 显示全部楼层
不推荐使用pre/post body两个函数,有时不会被call, 完全可以在基类的body中实现,然后实际用到的sequence的body中调用super.body()
发表于 2016-5-20 20:45:22 | 显示全部楼层
本帖最后由 thekiller 于 2016-5-20 20:55 编辑

starting phase的赋值发生的机制是1.run_test()->excute_phases()->traverse->excute()->sqr.start_phase_sequence();
2.start_phase_sequence()中会通过uvm_config_db::get 得到default_sequence的名字,如果get 到了default sequence的名字就会create default_sequence,并且将当前phase(uvm_main_phase或者uvm_run_phase)的句柄赋值给starting phase,如果没有get 到就会直接return退出当前函数;
3.由于uvm_config_db::set default sequence只针对的是virtual sequencer,当执行你调用的子sequencer的时候由于没有uvm_config_db::get到default sequence的名字,所以会直接退出return;4.所以如果使用了default_sequence机制,并且default sequence中有子sequence,这个时候要在子sequence使用starting_phase.raise_object要非常小心;4.这个跟pre body,post body貌似没有多大关系;
4.具体代码请见uvm1.1 中文件 uvm_sequencer_base.svh
uvm_sequence_base.jpg
发表于 2020-10-15 14:08:28 | 显示全部楼层


thekiller 发表于 2016-5-20 20:45
starting phase的赋值发生的机制是1.run_test()->excute_phases()->traverse->excute()->sqr.start_phase_s ...


解释的很好,学习了
发表于 2023-6-20 10:05:24 | 显示全部楼层


thekiller 发表于 2016-5-20 20:45
starting phase的赋值发生的机制是1.run_test()->excute_phases()->traverse->excute()->sqr.start_phase_s ...


不错不错,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-27 08:13 , Processed in 0.046608 second(s), 9 queries , Gzip On, Redis On.

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