SystemVerilog 寄存器设计竞争避免

SystemVerilog register design race avoidance

在 systemverilog 中进行数字设计时,我 运行 遇到了一个关于赛车条件的问题。

驱动我的设计的测试平台(我无法修改)驱动输入,导致设计中的某些寄存器由于竞争条件而无法正常工作。

这是一个 eda-playground 示例,它说明了正在发生的事情(输入变化 "before" 时钟在 15ns 时发生变化):

http://www.edaplayground.com/x/rWJ

有没有办法让设计(在这种情况下是一个简单的寄存器)抵抗这个特定问题?我需要的是 "out_data <= preponed(in_data);" 之类的语句或类似的语句,这将使输入信号更改的顺序无关紧要。

我已经阅读了 SystemVerilog LRM 中的#1step,但我不确定如何使用它,也不确定它是否可以帮助我解决这个特殊问题。

您的测试台实质上是在创建违反寄存器设置的刺激。您有两个选择:

  1. 说服测试平台作者他们的错误方法并让他们改正。
  2. 在设计周围插入一层层次结构,延迟时钟以消除竞争。