【问题标题】:System verilog assertion - $rose系统verilog断言 - $rose
【发布时间】:2016-08-04 00:15:11
【问题描述】:

我想写一个断言,它说在下一次完成后,req 应该变高 4 个周期。对我来说,重置完成已经很高了。我怎样才能在完成的下一个姿势时使请求变高。assert property {$rose(done) |-> ##4 req} 但我不知道为什么它不起作用。有人可以帮忙吗?

【问题讨论】:

  • “它不工作”到底是什么意思?

标签: system-verilog formal-verification system-verilog-assertions


【解决方案1】:

如果 done 开始时很高,而您想等待它下降然后再次上升,请尝试:

assert property (!done ##1 $rose(done) |-> ##4 req)

但这只是保证 req 在 done 的上升沿后四个周期为高。它没有说明何时发生(可能是两个周期前,甚至可能在断言之前完成)。如果您想在完成后严格执行 req 上升四个周期,请尝试以下操作:

assert property (!done ##1 $rose(done) |-> ##4 $rose(req))

【讨论】:

  • 感谢 T.J,但任何一个解决方案都不起作用。我无法控制完成信号我只能提供该信号的参考(我不能使完成变低)。我在问题中添加了一张图片以进行澄清。基本上它应该在下一个上升沿之后变高。
  • @TJ !done ##1 $rose(done) 在匹配时等价于$rose(done)。 (排除任何未知的已完成值,即 X 或 Z)。只是开始时间不同。
  • @TJ 如果你想强制 req 在完成后恰好 4 个周期变高,你必须说:$rose(done) |-> !req [*4] ##1 req
  • @Tudor 我在模拟器(和一些 FV 工具)中发现 $rose 本身与第一个周期虚假匹配,因为 done 从 unknown 更改为 1。此外,我允许 req 下降然后在之后再次上升done 断言,所以你的代码更严格。
  • @eshankanoje 我刚刚在测试设计中尝试过,它似乎可以工作。一旦我让那部分工作(新的 FV 工具,从 AE 获得帮助),我将使用见证波形更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 2015-12-19
  • 2014-06-01
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多