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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6197|回复: 2

[求助] 求助:如何在UVM的class中传递register model?

[复制链接]
发表于 2012-8-30 16:18:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 oscillator_cn1 于 2012-8-30 16:24 编辑

各位:
      最近在跟UVM的register model死磕,还请各位帮帮忙。
      我想把register sequence放到virtual sequence中,再把这个virtual sequence设置为virtual sequencer的default_sequence,这样就可以将register_sequence跟其他sequence结合起来使用了。我具体操作如下:
      1.virtual sequencer:



  1. class vsequencer extends uvm_sequencer;
  2.    `uvm_component_utils(vsequencer)
  3.      apb_master_sequencer   apb_seq;
  4.      my_reg_block   regmodel;
  5.      function new(string name,uvm_component parent);
  6.          super.new(name,parent);
  7.      endfunction
  8. endclass:vsequencer


复制代码
2.virtual sequence:



  1. class  vsequence  extends uvm_sequence;
  2.    `uvm_object_utils(vsequence)
  3.    `uvm_declare_p_sequencer(vsequence)
  4.     my_reg_seq   reg_seq;
  5.     function  new(string name="vsequence");
  6.         super.new(name);
  7.     endfunction : new
  8.     virtual   task  body();
  9.         reg_seq=my_reg_seq::type_id::create("reg_seq");
  10.         reg_seq.regmodel=p_sequencer.regmodel;
  11.         reg_seq.start(null);
  12.     endtask : body
  13. endclass : vsequence


复制代码
3.test:



  1. class   my_reg_test  extends   uvm_test;
  2.    `uvm_component_utils(my_reg_test)
  3.     reg_tb   reg_tb0;
  4.     function new(string name,uvm_component parent);
  5.          super.new(name,parent);
  6.     endfunction : new
  7.     virtual function build_phase(uvm_phase phase);
  8.          super.build_phase(phase);
  9.          reg_tb0=reg_tb::type_id::create("reg_tb0",this);
  10.          vsqr=vsequencer::type_id::create("vsqr",this):
  11.          uvm_config_db#(uvm_object_wrapper)::set(this,"vsqr.run_phase","default_sequence",vsequence::type_id::get());
  12.     endfunction : build_phase
  13.     virtual function connect_phase(uvm_phase phase);
  14.          vsqr.regmodel=reg_tb0.regmodel;
  15.     endfunction : connect_phase
  16. endclass : my_reg_test


复制代码
但是,这样写出的代码,用irun跑的时候,出现错误,如下:
   reg_seq.regmodel=p_sequencer.regmodel;
                                                        |
nc_vlog:*E,NOTCLM(./my_reg/reg_seq_lib.sv,49|44):regmodel is not a class item.

因此,我觉得,可能是我不该这样传递regmode,但是我又不知道该怎么修改,请问,有知道的么?
发表于 2013-9-13 11:11:55 | 显示全部楼层
`uvm_declare_p_sequencer(vsequence)这句话是不是错了,该改为
`uvm_declare_p_sequencer(vsequencer)
 楼主| 发表于 2013-9-16 15:05:51 | 显示全部楼层
回复 2# see01995


    确实是。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-15 09:38 , Processed in 0.014457 second(s), 6 queries , Gzip On, Redis On.

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