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

标题: HELP:什么情况下仿真会在“0”时刻停止? [打印本页]

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

   

    复制代码

作者: oscillator_cn1    时间: 2013-3-16 09:50
另外,好像还没走到raise_objection就已经退出了,因为”Running sequence....."这个message并没有打印出来。
作者: whxqq    时间: 2013-3-16 15:45
那可能starting_phase = null。
作者: oscillator_cn1    时间: 2013-3-16 16:09
本帖最后由 oscillator_cn1 于 2013-3-16 16:14 编辑

那什么情况下starting_phase会是null呢?
另外,刚才试了一下,在"if(!starting_phase!=null)......"后面增加了”else  $display("starting_phase is NULL!!!)"的语句,但是并没有打印出来,我觉得更像是还没开始跑到检查starting_phase这一步。
作者: whxqq    时间: 2013-3-16 18:18
如果能打印出来,那后面的也能执行了。
改下你的sequence 执行方式试试。
作者: oscillator_cn1    时间: 2013-3-18 09:17
不大明白什么是sequence的执行方式,是不是如何让sequence为默认sequence的方式?
那个,我只会在test中使用设置default_sequence这种方式,请问,还可以怎么弄?
作者: whxqq    时间: 2013-3-18 21:57
比如这样:
task main_phase(uvm_phase phase);
   seq.randomize();
   seq.starting_phase = phase;
   seq.start(seqr);
endtask
作者: oscillator_cn1    时间: 2013-3-19 09:21
哦。知道了。是将这段代码放到test的代码中么?
作者: 飞扬紫百合    时间: 2014-9-22 16:19
回复 1# oscillator_cn1


    怎么解决的呢?
作者: seabeam    时间: 2014-9-22 17:27
回复 11# 飞扬紫百合

看9楼,这种情况很多时候是phase没有raise起来,可以再env的run_phase或者case的run_phase里面显式的phase.raise_objection,不过注意在0时刻就要做这件事
作者: tmcb    时间: 2014-12-1 21:33
一般情况只在sequence中才raise_objection,不建议在UVM测试平台的其他地方raise_objection,
作者: 346995926tao    时间: 2017-2-23 11:16
回复 10# oscillator_cn1


   你这么最后是怎么解决的呢,我现在也遇到了这个问题,新手上路,多多指教
作者: shaoxl    时间: 2017-3-11 11:36
应该是进入了死循环,查看下initial块和while中是否有无延迟的语句。另外,加上UVM_PHASE_TRACE和UVM_OBJECTION_TRACE查看PHASE和OBJECTION的运行。
作者: 七点班车    时间: 2017-8-15 15:02
楼主最后是怎么解决这个问题的啊
作者: 七点班车    时间: 2017-8-15 15:03
回复 14# 346995926tao


   我也遇到了这个问题,请问你解决了吗
作者: xidianstudent    时间: 2017-12-4 20:11
我也遇到了,折腾了几天了没找到原因,楼主最后解决了没?




欢迎光临 EETOP 创芯网论坛 (原名:电子顶级开发网) (https://bbs.eetop.cn/) Powered by Discuz! X3.5