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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[求助] 求助:关于UVM中的config类

[复制链接]
发表于 2012-6-9 12:22:37 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 oscillator_cn1 于 2012-6-9 12:23 编辑

各位:
     我在my_sequence类中需要使用的配置变量太多,因此想把它们放在一个config类中。我想把这个config类放在my_test中,用它来配置sequence的操作,但是有些问题,我好像描述不清,还是直接贴代码吧。
my_test.sv中:
      ......   
      video_config vcfg;
      .....
      virtual function void build_phase(uvm_phase phase);
              .....
              vcfg = video_config::type_id::creata("vcfg",this);
              uvm_config_db#(video_config)::set(this,"venv.i_agt.sqr.vdo_seq","cfg",vcfg);
              ....
      ....

在my_sequence中:
      .......
      video_confg cfg;
      .......
      cfg.print();

      ......
这样,在每次执行到cfg.print()的时候,总是提示:Null objec access的Error。我猜问题在于没有把这个config类从my_test中传递到my_sequence中。可是该怎么传递呢,另外,我要对这个config类进行随机化,应该把assert(cfg.randomize())放在哪里比较合适呢?
 楼主| 发表于 2012-6-9 12:55:11 | 显示全部楼层
我知道一部分问题所在了。
刚才在my_test中要display一个my_sequence的变量,用venv.i_agt.sqr.vdo_seq.name这样的方式,提示错误是:Could not find member ‘vdo_seq' in class 'my_sequencer' 。那么,该怎么样才能在其他class中找到sequence呢?
发表于 2012-6-9 21:53:41 | 显示全部楼层
uvm sequence 不是component,层次结构的config机制是针对env中的component层次结构进行的。uvm sequencer是component,可以使用config机制。
你可以先把要配置的东西配置到sequencer中,然后在sequence中使用this.p_squencer.cfg来调用你说需要的config东西,也就是可以通过sequencer来牵线搭桥过度一下。
发表于 2012-6-9 23:38:14 | 显示全部楼层
本帖最后由 baddy2323 于 2012-6-10 07:07 编辑




在my_test.sv中:
      ......   
      video_config vcfg;
      .....
      virtual function void build_phase(uvm_phase phase);
              .....
              vcfg = video_config::type_id::creata("vcfg",this);
              uvm_config_db#(video_config)::set(this,"venv.i_agt.sqr.vdo_seq","cfg",vcfg);
              ....
      ....


   在my_sequence中,尝试下面代码,或许可以的。
      .......
      video_confg cfg;


      vritual task  body
     
          if(!uvm_config_db#(video_config)::get(this,get_full_name(),"cfg",cfg)) begin
             `uvm_info("","",UVM_NONE)
          end
          .......
          cfg.print();


      endtask : body
 楼主| 发表于 2012-6-11 08:15:17 | 显示全部楼层
谢谢两位!
真是帮了我大忙了。
发表于 2014-6-3 19:19:28 | 显示全部楼层
回复 1# oscillator_cn1


    3楼是正解, 必须用sequencer调度!
发表于 2014-6-19 18:24:14 | 显示全部楼层
yes, put the config into your sequence and randomize it
发表于 2014-11-13 18:14:40 | 显示全部楼层
最近研究了一下,可以不用sequencer 调度。
可以直接set到UVM_TEST_TOP这一层,然后sequence可以直接从UVM_TEST_TOP get。

四楼的代码还需要修改一下:
在my_test.sv中:
      ......   
      video_config vcfg;
      .....
      virtual function void build_phase(uvm_phase phase);
              .....
              vcfg = video_config::type_id::creata("vcfg",this);
              uvm_config_db#(video_config)::set(this,"","cfg",vcfg);
              ....
      ....

   在my_sequence中,尝试下面代码,或许可以的。
      .......
      video_confg cfg;

      vritual task  body
     
          if(!uvm_config_db#(video_config)::get(this,get_full_name(),"cfg",cfg)) begin
             `uvm_info("","",UVM_NONE)
          end
          .......
          cfg.print();

      endtask : body
发表于 2014-11-17 15:25:56 | 显示全部楼层
回复 3# asic_wang

cfg是可以直接配置到sequence中
uvm_config_db#(cfg)::set(null,"uvm_test_top.env.agt.sqr.seq","cfg",cfg)
这个写法是ok的;
似乎他的问题是在于cfg::type_type::create(), cfg不是一个component,不应该有父类this
发表于 2014-12-5 20:59:46 | 显示全部楼层
学习一下。。。。。。。。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-15 10:46 , Processed in 0.027941 second(s), 10 queries , Gzip On, Redis On.

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