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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6496|回复: 17

[求助] HELP:什么情况下仿真会在“0”时刻停止?

[复制链接]
发表于 2013-3-15 17:05:44 | 显示全部楼层 |阅读模式

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

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

x
各位:
      最近还是折腾UVM。现在仿真遇到一个莫名其妙的问题,不管是vcs还是nc都没有报error或者warning,但是仿真就是莫名其妙在“0”时刻一开始就结束了。
      在top模块中,一开始将rst_n信号置“0”,然后111ns延时之后,解复位。然后时钟clock是20ns的周期。问题是"0"时刻就结束了,根本就来不及产生时钟与复位呀,更不用说其他UVC组件,都还没捞着工作呢。
      不知道在遇到什么情况的时候,会出现这种开始就结束的情况,还连个报警都没有。。。。一头雾水,无法入手的感觉太难受了。高手们有没有谁也遇到过这种问题呀?指点一下呀,好歹让我知道按照什么顺序去查错误。
发表于 2013-3-15 19:38:48 | 显示全部楼层
你没有raise_objection吗
 楼主| 发表于 2013-3-16 09:20:57 | 显示全部楼层
以下是代码,在base_seq中已经raise_objection了,然后在write_seq中还需要再写一遍么?



  1. class axi_master_write_base_seq extends uvm_sequence #(axi_transfer);

  2.     function new(string name ="axi_master_write_base_seq");
  3.         super.new(name);
  4.     endfunction

  5.     `uvm_object_utils(axi_master_write_base_seq)

  6.     virtual task pre_body();
  7.         if(starting_phase != null)
  8.             starting_phase.raise_objection(this,{"Running sequence '",get_full_name(),"'"});
  9.     endtask : pre_body

  10.     virtual task post_body();
  11.         if(starting_phase != null)
  12.             starting_phase.drop_objection(this,{"Completed sequence '",get_full_name(),"'"});
  13.     endtask : post_body

  14. endclass : axi_master_write_base_seq

  15. class write_seq extends axi_master_write_base_seq;
  16.    
  17.     `uvm_object_utils(write_seq)

  18.     function new(string name="write_seq");
  19.         super.new(name);
  20.     endfunction : new
  21.     virtual task body();
  22.         `uvm_info(get_type_name(),"Starting...",UVM_MEDIUM)
  23.         `uvm_do_with(req,{req.burst==INCR;})
  24.     endtask

  25. endclass : write_seq


复制代码
 楼主| 发表于 2013-3-16 09:50:10 | 显示全部楼层
另外,好像还没走到raise_objection就已经退出了,因为”Running sequence....."这个message并没有打印出来。
发表于 2013-3-16 15:45:00 | 显示全部楼层
那可能starting_phase = null。
 楼主| 发表于 2013-3-16 16:09:18 | 显示全部楼层
本帖最后由 oscillator_cn1 于 2013-3-16 16:14 编辑

那什么情况下starting_phase会是null呢?
另外,刚才试了一下,在"if(!starting_phase!=null)......"后面增加了”else  $display("starting_phase is NULL!!!)"的语句,但是并没有打印出来,我觉得更像是还没开始跑到检查starting_phase这一步。
发表于 2013-3-16 18:18:17 | 显示全部楼层
如果能打印出来,那后面的也能执行了。
改下你的sequence 执行方式试试。
 楼主| 发表于 2013-3-18 09:17:01 | 显示全部楼层
不大明白什么是sequence的执行方式,是不是如何让sequence为默认sequence的方式?
那个,我只会在test中使用设置default_sequence这种方式,请问,还可以怎么弄?
发表于 2013-3-18 21:57:27 | 显示全部楼层
比如这样:
task main_phase(uvm_phase phase);
   seq.randomize();
   seq.starting_phase = phase;
   seq.start(seqr);
endtask
 楼主| 发表于 2013-3-19 09:21:09 | 显示全部楼层
哦。知道了。是将这段代码放到test的代码中么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-13 09:04 , Processed in 0.026860 second(s), 6 queries , Gzip On, Redis On.

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