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中还需要再写一遍么?
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
复制代码
作者:
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