HELP:什么情况下仿真会在“0”时刻停止?
最近还是折腾UVM。现在仿真遇到一个莫名其妙的问题,不管是vcs还是nc都没有报error或者warning,但是仿真就是莫名其妙在“0”时刻一开始就结束了。
在top模块中,一开始将rst_n信号置“0”,然后111ns延时之后,解复位。然后时钟clock是20ns的周期。问题是"0"时刻就结束了,根本就来不及产生时钟与复位呀,更不用说其他UVC组件,都还没捞着工作呢。
不知道在遇到什么情况的时候,会出现这种开始就结束的情况,还连个报警都没有。一头雾水,无法入手的感觉太难受了。高手们有没有谁也遇到过这种问题呀?指点一下呀,好歹让我知道按照什么顺序去查错误。
你没有raise_objection吗
以下是代码,在base_seq中已经raise_objection了,然后在write_seq中还需要再写一遍么?
- class axi_master_write_base_seq extends uvm_sequence #(axi_transfer);
- function new(string name ="axi_master_write_base_seq");
- super.new(name);
- endfunction
- `uvm_object_utils(axi_master_write_base_seq)
- virtual task pre_body();
- if(starting_phase != null)
- starting_phase.raise_objection(this,{"Running sequence '",get_full_name(),"'"});
- endtask : pre_body
- virtual task post_body();
- if(starting_phase != null)
- starting_phase.drop_objection(this,{"Completed sequence '",get_full_name(),"'"});
- endtask : post_body
- endclass : axi_master_write_base_seq
- class write_seq extends axi_master_write_base_seq;
- `uvm_object_utils(write_seq)
- function new(string name="write_seq");
- super.new(name);
- endfunction : new
- virtual task body();
- `uvm_info(get_type_name(),"Starting...",UVM_MEDIUM)
- `uvm_do_with(req,{req.burst==INCR;})
- endtask
- 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的运行。
小编最后是怎么解决这个问题的啊
我也遇到了这个问题,请问你解决了吗
我也遇到了,折腾了几天了没找到原因,小编最后解决了没?