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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4661|回复: 11

[求助] 求助:如何给sequence中的变量赋值?

[复制链接]
发表于 2012-9-19 15:02:02 | 显示全部楼层 |阅读模式

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

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

x
各位:
     最近在折腾config机制。这次是在已经能跑通的case中添加东西,在一个sequence中加入frame_cnt变量,然后,在testcase中,用uvm_config_db#(int)::set(this,"vsqr.apb_vdo_seq.vdo_seq"."frame_cnt",9);
可是结果跑的时候该sequence打印的log信息入下:
sequence is uvm_test_top.vsqr.apb_vdo_seq.vdo_seq
frame_cnt =   0
为什么没有配置上呢?
发表于 2012-9-19 20:40:35 | 显示全部楼层
你UVM还没有入门。

sequence不是继承自UVM component而是uvm object,所以不能用uvm_config_db#(int)::set(this,"vsqr.apb_vdo_seq.vdo_seq"."frame_cnt",9);这种方式进行config(不是不能config,uvm object有set_int_local()函数,可以用,但是需要你自己在合适的地方调用。但是UVM的本意肯定是不希望我们这么来用这个函数的,而是为了后面的uvm component服务,关于这个不多说了)。
发表于 2012-9-19 20:45:00 | 显示全部楼层
你应该这么用:
在sequence所对应的sequencer中声明frame_cnt,因为sequencer是继承自UVM component,可以使用你上述的config机制进行配置。

然后再sequence中使用p_sequencer.frame_cnt来访问frame_cnt就可以了,任何sequence需要的一些东西都可以在对应的sequencer中声明,然后sequence通过它来搭桥进行配置和访问。
 楼主| 发表于 2012-9-20 08:52:36 | 显示全部楼层
谢谢了!
OK,我现在改在sequencer中使用uvm_config_db,结果还是一样,在sequencer中打印出来的还是 frame_cnt=0.不过该sequencer是个virtual sequencer,这个应该没什么影响吧?
发表于 2012-9-20 10:03:32 | 显示全部楼层
在sequence中有没有使用 `declare_p_sequencer(xxxx)?

好好看看UVM的userguide和class reference再说。
 楼主| 发表于 2012-9-20 10:34:15 | 显示全部楼层
恩,再试了一次,同样是使用uvm_config_db没有用,但是在connect_phase中直接将vsqr.frame_cnt=cfg.frame_cnt就可以。算是暂时过关了(虽然还不知道该怎么用uvm_config_db来配置)。
但是又出现了新问题:因为我总共有3个不同类型的sequence,所以写了一个sequence来包含这三个sequence,命名为3all_sequence。然后给3all_sequence指定virtual sequencer : vsequencer。
现在在3all_sequence中使用p_sequencer.frame_cnt能得到正确的数值,然后使用vdo_seq.frame_cnt=p_sequencer.frame_cnt貌似行得通,在3all_sequence中赋值完了后再$display("vdo_seq.frame_cnt=%d“,vdo_seq.frame_cnt)也是正确的值,但是,到了vdo_seq内部,它的body中,我第一句就是让它$display("frame_cnt=%d",frame_cnt);结果数值是0,这显然不是期望的。而且从后面跑仿真的结果来看,它确实是执行了“0”次。我就很郁闷,明明上一步还是好好的,为什么下来之后就完全不起作用了?
 楼主| 发表于 2012-9-21 08:41:36 | 显示全部楼层
回复 5# asic_wang

已经使用了
发表于 2014-12-29 18:37:03 | 显示全部楼层
试下了,发现用get_full_name()可以实现传递数据到sequence的变量上
uvm_config_db #(int)::get(null, get_full_name(), "frame_cnt", frame_cnt);

在test里边用
uvm_config_db #(int)::set(this,"path_of_sqr.pkg::seq", frame_cnt, 9);
发表于 2015-1-11 17:15:49 | 显示全部楼层
试下了,发现用get_full_name()可以实现传递数据到sequence的变量上
uvm_config_db #(int)::get(null, get_full_name(), "frame_cnt", frame_cnt);

在test里边用
uvm_config_db #(int)::set(this,"path_of_sqr.pkg::seq", frame_cnt, 9);

在程序中试了很多次,还是不行,不知道还要设置什么?
发表于 2015-1-12 14:24:40 | 显示全部楼层
回复 2# asic_wang


   老兄,uvm_config_db机制支持对uvm_sequence进行set和get操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-15 01:30 , Processed in 0.025004 second(s), 11 queries , Gzip On, Redis On.

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