我正在通过Verilog为一个芯片运行一些测试,我遇到了一个小问题,我有点摸不着头脑。我正在测试代码的覆盖率,以确保所有状态都发生在所有参数的随机测试中,等等。
在计算以下类型的两个值时:
case(state_vector)
STATE1:
...
STATE2:
if(!var1 && var2)
state_vector = STATE1;
else
state_vector = STATE2;
STATE3:
...
现在的问题是,在进行覆盖率分析时,else语句后面的语句永远不会到达,这意味着if语句总是计算为true。
我最初假设var1和var2的值分别为0和1。在完成我的报告之前,经过仔细检查,我注意到这个假设是不正确的,因为波形分析显示,在整个模拟过程中,var1始终为1,var2始终为0。
现在我将测试以确保值按我想要的方式改变,但我很好奇在Verilog中这是如何发生的。从本质上讲,我正在滑入一种状态,因为if语句在无穷小的时间单位内的计算结果为true。
对如何更好地评估这个问题有什么想法吗?我想在检查当前状态的同时,检查另一个函数是否没有更改我的state_vector。
发布于 2013-06-05 08:02:25
又快又脏的方法是在有问题的代码周围散布$display("%t %m got here",$time);
,并确保begin-end块有标签,例如:
begin : meaningful_label
$display("%t %m got here",$time);
... code ...
$display("%t %m got here too",$time);
end
如果调用了display语句,则会将state_vector
赋值到其他地方。否则,某些东西会阻止代码令人兴奋。
要进一步调试,请执行以下操作:
时的时间戳
https://stackoverflow.com/questions/16928742
复制相似问题