如何编写一个具有较长时间的恢复重置正式测试

时间:2016-01-11 12:36:54

标签: verilog system-verilog formal-languages formal-verification asic

我曾经通过动态测试来验证由带有一组寄存器的串口组成的模块。其中一项测试是恢复重置测试。时序是(i)从串口将一个随机数据写入寄存器(需要40个时钟周期)(ii)将该寄存器置于复位状态并释放它(iii)从串口读取该寄存器(再花40个时钟周期)

这很容易在动态测试中实现。现在我想正式编写这个时间,但我发现正式的工具很难确定这个断言,因为时间太长,大约82个周期,正式的工具无法探索这么多的空间状态。是否有可能正式编写这样的测试?

此外,常见的复位形式测试很简单,只需要1个周期,正式工具开始从复位状态探索空间状态。但是现在我正在尝试写一个测试,说在DUT做了什么后,把寄存器复位,读出来,值仍然是复位值。

1 个答案:

答案 0 :(得分:0)

您的问题可能是该工具正在探索可以应用重置的所有可能状态。也就是说,如果我用4加载寄存器A并且我用8加载寄存器B并且我应用复位,那么会发生什么。现在尝试寄存器A是5,寄存器B是8,我应用复位,会发生什么。现在尝试注册A是6和....你明白了。

您可以编写这些测试,但您需要做一些事情:

  • 一开始就没有重置。这样,所有寄存器都是未定义的,可以采用任何值。这使得该工具可以轻松访问设计中的所有状态。
  • 如果需要,添加一个约束,这样只会发生一次复位脉冲,否则它可能会尝试1次复位,2次复位,3次复位......等等。希望它应该意识到它们都会以相同的状态结束。< / LI>
  • 您可能必须将其他输入限制为空闲,以便它不会尝试使用它们来探索状态,但这可能是不必要的。

注意:这对于重置测试而言往往是一组不同于其他功能测试的约束,所以你需要一个单独的正式运行。