|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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中对目标进行赋值。比如:
- 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
复制代码
- class vsequencer extends uvm_sequencer; virtual function void build_phase(uvm_phase phase);
- super.build_phase(phase);
- if(!uvm_config_db#(vdo_config)::get(this,"","vdo_cfg",vdo_cfg))
- `uvm_error("NO_VDO_CFG",{"config of video is not set for this component",get_full_name()})
- 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",这样程序才能跑起来。
我想知道是我之前的理解有问题,还是我实际操作中有问题呢?希望各位达人给我解惑。 |
|