【发布时间】:2018-02-06 20:12:02
【问题描述】:
在 systemverilog 中进行数字设计时,我遇到了有关赛车条件的问题。
驱动我的设计的测试台(我无法修改)驱动输入的方式是,设计中的某些寄存器由于竞争条件而无法正常工作。
这是一个 eda-playground 示例,它说明了正在发生的事情(输入在时钟“之前”发生变化,时间为 15ns):
http://www.edaplayground.com/x/rWJ
有没有办法让设计(在这种情况下是一个简单的寄存器)能够抵抗这个特定的问题?我需要的是像“out_data
我已阅读 SystemVerilog LRM 中的#1step,但我不确定如何使用它,也不确定它是否能帮助我解决这个特定问题。
【问题讨论】:
-
时钟发生器一开始就写得不好。它应该是
clock = ~clock,那里有 blocking 分配。另外,如果你的输入和时钟同时改变,你会期待什么样的行为? -
我同意,但时钟生成器故意写得不好,以说明设计中如何出现竞争条件。如果两者同时变化,那么我希望寄存器输出获得输入信号在任何变化之前的值。
-
没有好的方法可以避免由测试台人为创建的比赛而不修复后者。您需要使您的任务不可合成才能尝试其他方式。即为您的 in_data 增加 #1ns 延迟
-
这就是我害怕的...谢谢你的回复。
-
@Serge 我不确定延迟是否会使设计无法综合。工具可能会忽略它们。
标签: scheduling system-verilog race-condition digital-design