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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 8628|回复: 14

[求助] 求助:关于UVM中uvm_config_db传递config类

[复制链接]
发表于 2013-5-8 15:18:11 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 oscillator_cn1 于 2013-5-8 15:24 编辑

各位:
      最近在使用UVM搭建验证环境,在实际使用过程中对使用uvm_config_db来传递一些配置信息有点疑惑。因为照我理解,应该是一头使用uvm_config_db#(my_config)::set()来设置,然后另外一头使用uvm_config_db#(my_config)::get()来取得配置,这样就成功了。
      但是,在我使用的时候,发现光这样好像不大够,我还需要再在connect_phase中对目标进行赋值。比如:




  1. class base_test extends uvm_test;    virtual function void build_phase(uvm_phase phase);
  2.         super.build_phase(phase);
  3.         tb0  = tb::type_id::create("tb0",this);
  4.         vsqr = vsequencer::type_id::create("vsqr",this);
  5.         uvm_config_db#(vdo_config)::set(this,"*","vdo_cfg",tb0.vdo_cfg);    endfunction : build_phase



复制代码




  1. class vsequencer extends uvm_sequencer;      virtual function void build_phase(uvm_phase phase);
  2.         super.build_phase(phase);
  3.         if(!uvm_config_db#(vdo_config)::get(this,"","vdo_cfg",vdo_cfg))
  4.             `uvm_error("NO_VDO_CFG",{"config of video is not set for this component",get_full_name()})
  5.     endfunction            virtual task run_phase(uvm_phase phase);         super.run_phase(phase);         $display("**************************************");         vdo_cfg.print();    endtask



复制代码

这样跑的时候并没有报出“NO_VDO_CFG”的error出现,但是在运行“vdo_cfg.print()"的时候,出了error说ncsim: “*E,TRNULLID: NULL pointer dereference.
然后我在class base_test的connect_phase中添加一行”vseq.vdo_cfg=tb0.vdo_cfg",这样程序才能跑起来。
我想知道是我之前的理解有问题,还是我实际操作中有问题呢?希望各位达人给我解惑。
 楼主| 发表于 2013-5-8 15:58:01 | 显示全部楼层
另外,补充一下,我刚才在verquencer的run_phase中加入“if(vdo_cfg==null) $display("in vsequencer : vdo_cfg is null");"
然后出来的结果显示vdo_cfg确实是null的。不知道这是为什么呀。
发表于 2013-5-8 17:18:42 | 显示全部楼层




    你的 vdo_cfg 在vsequencer中声明了没有?
 楼主| 发表于 2013-5-8 17:20:53 | 显示全部楼层
肯定申明了呀,不然会报错的。



  1. class vsequencer extends uvm_sequencer;
  2.     apb_master_sequencer apb_sqr;
  3.     vdo_master_sequencer vdo_sqr;
  4.     ral_block_apb_basic_block regmodel;
  5.     vdo_config vdo_cfg;
  6.     ...



复制代码
发表于 2013-5-8 17:32:34 | 显示全部楼层


肯定申明了呀,不然会报错的。
oscillator_cn1 发表于 2013-5-8 17:20




    那个Test_base里面的tb0.vdo_cfg是null吗?
 楼主| 发表于 2013-5-9 08:33:27 | 显示全部楼层
那个不是,它的print可执行,没问题
发表于 2013-5-9 10:30:50 | 显示全部楼层


那个不是,它的print可执行,没问题
oscillator_cn1 发表于 2013-5-9 08:33




   class base_test extends uvm_test;    virtual function void build_phase(uvm_phase phase);        super.build_phase(phase);
        tb0  = tb::type_id::create("tb0",this);
        vsqr = vsequencer::type_id::create("vsqr",this);
        uvm_config_db#(vdo_config)::set(this,"*","vdo_cfg",tb0.vdo_cfg);    endfunction : build_phase

根据你现在的code,你的tb0是指base_test的build_phase里面create的,但它下面的vdo_cfg是在哪里create和赋值的呢?难道是在tb0的new里面?!所以我怀疑它一直是null的。
 楼主| 发表于 2013-5-9 11:14:28 | 显示全部楼层
vdo_cfg是在tb0里面create的。你的意思是否是:因为它是在tb0中create的,因此,在base_test中调用的时候它其实还是null的?
发表于 2013-5-9 14:05:36 | 显示全部楼层


vdo_cfg是在tb0里面create的。你的意思是否是:因为它是在tb0中create的,因此,在base_test中调用的时候它 ...
oscillator_cn1 发表于 2013-5-9 11:14




     我估计你是在tb0(env)的build_phase里面,create vdo_cfg的,cfg里面内容一般都是要被test case可控,所以还是放到test case的build_phase里面去赋值,当然要等tb0被create以后。     如果你是在tb0的build_phase里面create cfg,但没有成功,我分析是因为UVM要执行test的build_phase之后才执行env的build_phase. 所以不知道你把这个create过程放到test的后面的phase,比如connect_phase,是否可以。当然感觉会非常奇怪。

     UVM我也正在学习,大家多讨论。
发表于 2013-5-9 14:09:17 | 显示全部楼层
你vsequencer中的vdo_cfg有没有create?是在什么地方create的呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-23 00:52 , Processed in 0.022666 second(s), 7 queries , Gzip On, Redis On.

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