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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5814|回复: 5

[求助] 求助:env的run_phase没问题,到了下面agent的run_phase就跑不动了

[复制链接]
发表于 2013-7-12 16:01:13 | 显示全部楼层 |阅读模式

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

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

x
各位:
      最近正在使用UVM搭建验证环境。现在遇到一个问题,就是环境跑起来之后,就卡在开始的那个时刻了。以前出现这个问题都是driver的reset函数没写好,但是这次我从test---tb---env---agent---driver这样的顺序一层一层往下debug的时候发现,到env的run_phase中加入“this.print()”的代码,能正常运行,而到了master_agent中的run_phase加入这个代码,就一直运行不了,而master_agent的其他phase中,比如build_phase和connect_phase则没问题。我觉得仿真应该是卡在这里了,但是为什么卡住?真是一头雾水。虽然严重怀疑自己是犯了低级错误,但是奈何这几天热的心浮气躁,两天都没找出问题所在。因此上来求助各位。代码如下:




  1. `ifndef VDO_HANDWAVE_MASTER_AGENT_SV
  2. `define VDO_HANDWAVE_MASTER_AGENT_SV

  3. class vdo_handwave_master_agent extends uvm_agent;
  4.     vdo_handwave_config cfg;

  5.     vdo_handwave_master_sequencer sequencer;
  6.     vdo_handwave_master_driver    driver;


  7.     `uvm_component_utils_begin(vdo_handwave_master_agent)
  8.         `uvm_field_object(cfg,UVM_DEFAULT|UVM_REFERENCE)
  9.         `uvm_field_object(sequencer,UVM_DEFAULT|UVM_REFERENCE)
  10.         `uvm_field_object(driver,UVM_DEFAULT|UVM_REFERENCE)
  11.     `uvm_component_utils_end

  12.     function new(string name,uvm_component parent);
  13.         super.new(name,parent);
  14.     endfunction : new

  15.     extern virtual function void build_phase(uvm_phase phase);
  16.     extern virtual function void connect_phase(uvm_phase phase);
  17.     extern virtual task run_phase(uvm_phase phase);
  18.     extern virtual function void update_config(input vdo_handwave_config cfg);
  19. endclass : vdo_handwave_master_agent

  20. function void vdo_handwave_master_agent::build_phase(uvm_phase phase);
  21.     super.build_phase(phase);
  22.     if(cfg==null) begin
  23.         if(!uvm_config_db#(vdo_handwave_config)::get(this,"","cfg",cfg))
  24.             `uvm_warning("NOCONFIG","Config not set for master agent")
  25.     end
  26.     sequencer = vdo_handwave_master_sequencer::type_id::create("sequencer",this);
  27.     driver    = vdo_handwave_master_driver::type_id::create("driver",this);
  28. endfunction : build_phase

  29. function void vdo_handwave_master_agent::connect_phase(uvm_phase phase);
  30.     super.connect_phase(phase);
  31.     driver.seq_item_port.connect(sequencer.seq_item_export);
  32. endfunction : connect_phase

  33. function void vdo_handwave_master_agent::update_config(input vdo_handwave_config cfg);
  34.     sequencer.cfg=cfg;
  35.     driver.cfg=cfg;
  36. endfunction : update_config

  37. task vdo_handwave_master_agent::run_phase(uvm_phase phase);
  38.     this.print();
  39. endtask : run_phase   

  40. `endif //VDO_MASTER_AGENT_SV


复制代码





  1. `ifndef VDO_HANDWAVE_ENV_SV
  2. `define VDO_HANDWAVE_ENV_SV
  3. class vdo_handwave_env extends uvm_env;
  4.     vdo_handwave_config cfg;
  5.     vdo_handwave_master_agent master;
  6.     vdo_handwave_slave_agent  slaves[];

  7.     `uvm_component_utils_begin(vdo_handwave_env)
  8.         `uvm_field_object(cfg,UVM_DEFAULT)
  9.     `uvm_component_utils_end

  10.     function new (string name , uvm_component parent);
  11.         super.new(name,parent);
  12.     endfunction : new

  13.     extern virtual function void build_phase(uvm_phase phase);
  14.     extern virtual function void connect_phase(uvm_phase phase);
  15.     extern virtual function void start_of_simulation_phase(uvm_phase phase);
  16.     extern virtual function void update_config(vdo_handwave_config cfg);
  17.     extern virtual task run_phase(uvm_phase phase);
  18.     //extern virtual task update_vif_enables();

  19. endclass : vdo_handwave_env

  20. function void vdo_handwave_env::build_phase(uvm_phase phase);
  21.     super.build_phase(phase);
  22.     if(cfg==null) begin
  23.         if(!uvm_config_db#(vdo_handwave_config)::get(this,"","cfg",cfg)) begin
  24.             `uvm_info("NOCONFIG","Using default_vdo_handwave_config",UVM_MEDIUM)
  25.             $cast(cfg,factory.create_object_by_name("default_vdo_handwave_config","cfg"));
  26.         end
  27.     end
  28.     uvm_config_object::set(this,"*","cfg",cfg);
  29.     foreach(cfg.slave_configs[i]) begin
  30.         string sname;
  31.         sname=$psprintf("slave[%0d]*",i);
  32.         uvm_config_object::set(this,sname,"cfg",cfg.slave_configs[i]);
  33.         master=vdo_handwave_master_agent::type_id::create(cfg.master_config.name,this);
  34.         slaves=new[cfg.slave_configs.size()];
  35.         for(int i=0;i<cfg.slave_configs.size();i++) begin
  36.             slaves[i]=vdo_handwave_slave_agent::type_id::create($psprintf("slave[%0d]",i),this);
  37.         end
  38.     end
  39. endfunction : build_phase

  40. function void vdo_handwave_env::connect_phase(uvm_phase phase);
  41.     super.connect_phase(phase);
  42. endfunction : connect_phase

  43. function void vdo_handwave_env::start_of_simulation_phase(uvm_phase phase);
  44.     set_report_id_action_hier("CFGOVR",UVM_DISPLAY);
  45.     set_report_id_action_hier("CFGSET",UVM_DISPLAY);
  46.     check_config_usage();
  47. endfunction : start_of_simulation_phase

  48. function void vdo_handwave_env::update_config(vdo_handwave_config cfg);
  49.     master.update_config(cfg);
  50.     foreach(slaves[i])
  51.         slaves[i].update_config(cfg.slave_configs[i]);
  52. endfunction : update_config

  53. task vdo_handwave_env::run_phase(uvm_phase phase);
  54. endtask : run_phase
  55. `endif //VDO_HANDWAVE_ENV_SV


复制代码
发表于 2013-7-13 23:25:30 | 显示全部楼层
初来乍到,发表一下拙见
我怀疑您在run_phase的0时刻出现了死循环,请你查看一下自己的code。
发表于 2014-7-20 16:54:04 | 显示全部楼层
你好,我也遇到这种问题了。你是怎么解决的?
发表于 2014-7-20 17:01:03 | 显示全部楼层
和questa的uvm例子比对了一下,文件层次和内容写法一样,就是在仿真的过程中,调用了sequence 的start方法,就卡死了。搞了好几天了。头大啊。。。。。。。
发表于 2014-7-21 17:01:05 | 显示全部楼层
monitor中是不是没有做时序的事情。
发表于 2014-7-21 17:01:48 | 显示全部楼层
我的问题这样解决了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-15 01:31 , Processed in 0.020425 second(s), 9 queries , Gzip On, Redis On.

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