【问题标题】:SystemVerilog register design race avoidanceSystemVerilog 寄存器设计竞争避免
【发布时间】: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


【解决方案1】:

您的测试台本质上是在创建与您的寄存器设置违规的激励。你有两个选择:

  1. 让测试台编写者相信他们的错误方法并让他们修复它。
  2. 在设计周围插入一层层次结构,延迟时钟以消除竞争。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2010-09-25
    • 2010-09-25
    • 2019-06-12
    • 1970-01-01
    相关资源
    最近更新 更多