2017-08-29 143 views
0

在systemverilog中进行数字设计时,遇到了有关赛车条件的问题。SystemVerilog注册设计竞赛规避

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

下面是一个EDA-操场例子说明了所发生的事情(“之前”输入改变时钟确实,在时间为15ns):

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

有没有一种方法,使设计(一简单的注册在这种情况下)抵抗这个特殊的问题?我需要的是一个像“out_data < = preponed(in_data);”或类似的东西会使输入信号的顺序变化无关紧要。

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

+1

时钟发生器写得不好首先。它应该是'clock =〜clock',在那里有**阻塞**赋值。另外,如果您的输入和时钟同时发生变化,您会期望什么样的行为? – Serge

+0

我同意,但时钟发生器是故意写的,目的是为了说明设计中如何发生竞态条件。如果两者同时改变,那么我希望寄存器输出可以在任何改变之前获得输入信号的值。 –

+0

没有好的方法来避免由测试台人工创建而没有固定后者的比赛。你需要让你的dut不可综合才能尝试。即在您的in_data中添加#1ns延迟 – Serge

回答

1

您的测试平台本质上是创建刺激,违反您的注册表设置。你有两种选择:

  1. 说服他们错误的方式,并让他们修复它的测试台作家。
  2. 在延迟时钟的设计周围插入层次结构以消除竞争。