微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > HELP:什么情况下仿真会在“0”时刻停止?

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

时间:10-02 整理:3721RD 点击:
各位:
最近还是折腾UVM。现在仿真遇到一个莫名其妙的问题,不管是vcs还是nc都没有报error或者warning,但是仿真就是莫名其妙在“0”时刻一开始就结束了。
在top模块中,一开始将rst_n信号置“0”,然后111ns延时之后,解复位。然后时钟clock是20ns的周期。问题是"0"时刻就结束了,根本就来不及产生时钟与复位呀,更不用说其他UVC组件,都还没捞着工作呢。
不知道在遇到什么情况的时候,会出现这种开始就结束的情况,还连个报警都没有。一头雾水,无法入手的感觉太难受了。高手们有没有谁也遇到过这种问题呀?指点一下呀,好歹让我知道按照什么顺序去查错误。

你没有raise_objection吗

以下是代码,在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. `uvm_object_utils(write_seq)

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

  24. endclass : write_seq

复制代码

另外,好像还没走到raise_objection就已经退出了,因为”Running sequence....."这个message并没有打印出来。

那可能starting_phase = null。

那什么情况下starting_phase会是null呢?
另外,刚才试了一下,在"if(!starting_phase!=null)......"后面增加了”else$display("starting_phase is NULL!)"的语句,但是并没有打印出来,我觉得更像是还没开始跑到检查starting_phase这一步。

如果能打印出来,那后面的也能执行了。
改下你的sequence 执行方式试试。

不大明白什么是sequence的执行方式,是不是如何让sequence为默认sequence的方式?
那个,我只会在test中使用设置default_sequence这种方式,请问,还可以怎么弄?

比如这样:
task main_phase(uvm_phase phase);
seq.randomize();
seq.starting_phase = phase;
seq.start(seqr);
endtask

哦。知道了。是将这段代码放到test的代码中么?



怎么解决的呢?

看9楼,这种情况很多时候是phase没有raise起来,可以再env的run_phase或者case的run_phase里面显式的phase.raise_objection,不过注意在0时刻就要做这件事

一般情况只在sequence中才raise_objection,不建议在UVM测试平台的其他地方raise_objection,

你这么最后是怎么解决的呢,我现在也遇到了这个问题,新手上路,多多指教

应该是进入了死循环,查看下initial块和while中是否有无延迟的语句。另外,加上UVM_PHASE_TRACE和UVM_OBJECTION_TRACE查看PHASE和OBJECTION的运行。

小编最后是怎么解决这个问题的啊

我也遇到了这个问题,请问你解决了吗

我也遇到了,折腾了几天了没找到原因,小编最后解决了没?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top