微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 求助:如何给sequence中的变量赋值?

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

时间:10-02 整理:3721RD 点击:
各位:
最近在折腾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
为什么没有配置上呢?

你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服务,关于这个不多说了)。

你应该这么用:
在sequence所对应的sequencer中声明frame_cnt,因为sequencer是继承自UVM component,可以使用你上述的config机制进行配置。
然后再sequence中使用p_sequencer.frame_cnt来访问frame_cnt就可以了,任何sequence需要的一些东西都可以在对应的sequencer中声明,然后sequence通过它来搭桥进行配置和访问。

谢谢了!
OK,我现在改在sequencer中使用uvm_config_db,结果还是一样,在sequencer中打印出来的还是 frame_cnt=0.不过该sequencer是个virtual sequencer,这个应该没什么影响吧?

在sequence中有没有使用 `declare_p_sequencer(xxxx)?
好好看看UVM的userguide和class reference再说。

恩,再试了一次,同样是使用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”次。我就很郁闷,明明上一步还是好好的,为什么下来之后就完全不起作用了?

已经使用了

试下了,发现用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);

试下了,发现用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);
在程序中试了很多次,还是不行,不知道还要设置什么?

老兄,uvm_config_db机制支持对uvm_sequence进行set和get操作。

试试
uvm_config_db#(int)::set(this,"","frame_cnt",9);
uvm_config_db#(int)::get(null,"uvm_test_top","fram_cnt", frame_cnt)

个人习惯于定义成seq成员变量,然后用`uvm_do_with(seq,{frame_cnt==9;})

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top