我正在通过 Verilog 对芯片进行一些测试,但我遇到了一些问题,我有点摸不着头脑。我正在测试代码的覆盖率,以确保所有状态都发生在对所有参数等的随机测试中。
在评估以下类型的两个值时:
case(state_vector)
STATE1:
...
STATE2:
if(!var1 && var2)
state_vector = STATE1;
else
state_vector = STATE2;
STATE3:
...
现在的问题是,在进行覆盖分析时,永远不会到达 else 语句之后的语句,这意味着 if 语句总是评估为真。
我最初假设 var1 和 var2 的值分别为 0 和 1。在完成我的报告之前仔细检查后,我注意到这个假设是不正确的,因为波形分析表明在整个模拟过程中 var1 始终为 1 而 var2 始终为 0。
现在我将测试以确保值改变我想要的方式,但我很好奇在 Verilog 中这是如何发生的。本质上,我正在陷入一种状态,因为 if 语句在无限小的时间单位内评估为真。
关于如何更好地评估这个问题的任何想法?我想在尝试检查当前状态的同时检查另一个函数是否没有更改我的 state_vector。