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

how to write a restore reset formal test which has a long timing

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

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

另外,普通的reset正式测试很简单,只需要1个周期,正式工具从reset状态开始探索space个状态。但是现在我正在尝试编写一个测试,说在 DUT 做了一些事情之后,将 reg 复位,读出,该值仍然是复位值。

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

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

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

注意:与其他功能测试相比,这往往是一组不同的重置测试约束,因此您需要单独的正式 运行。