【发布时间】:2020-05-14 19:33:57
【问题描述】:
假设我要检查这两个信号的变化顺序:sigA和sigB。
设计规范是sigB必须比sigA更早改变(B先变后A变)
这里假设我已经简化了 RTL,它对上述规范有一个错误。
// buggy RTL
sigB = ~sigA;
在此代码中,sigB 在sigA 之后由于逆变器延迟而发生变化。
但在 RTL 中,通常我们可能无法注意到问题 - 因为它是一种零延迟事件。
我们只能在门级模拟中实现它,延迟出乎意料地sigB实际上比sigA稍晚改变。
我正在寻找一种使用 SVA 或其他可以在 RTL 仿真期间检测到此问题的方法,而不是在门级仿真期间检测到它(这为时已晚)。
【问题讨论】:
-
您需要更多信息。假设没有错误,所以
sigB在sigA之前按指定更改。因此,您的更改将像这样运行:sigB change ... sigA change --- sigB change ... sigA change。在中间我们有sigA change --- sigB change。所以,sigB在sigA之前发生了变化,而且sigA在sigB之前也发生了变化。
标签: verilog system-verilog system-verilog-assertions