【问题标题】:Driving module output from combinatorial block从组合块驱动模块输出
【发布时间】:2014-03-12 18:17:10
【问题描述】:
  1. 在 VHDL/Verilog 中使用组合逻辑来驱动模块的输出是一种好的设计实践吗?

  2. 是否可以直接在组合块内使用模块输入,并使用该组合块的输出来驱动同一模块中的另一个顺序块?

【问题讨论】:

  • 我不确定这个问题是否适合 stackoverflow,因为答案将基于意见。
  • 我的偏好是输出干净(直接从触发器驱动)输入,然后直接用于组合逻辑,但有些规则被打破了。
  • 如果您向我们提供有关您的顾虑的提示可能会有所帮助。如果您建立这样的联系,您认为可能会出现什么问题?

标签: vhdl verilog system-verilog


【解决方案1】:

这两个问题的答案实际上取决于整体设计方法 正如 Morgan 在他的评论中指出的那样,将基于意见。

这些问题与时间推到的大型设计特别相关 限制,以及多个设计师使用不同的模块做出贡献的地方。在 在这种情况下,预先确定一种设计方法很重要 回答这两个问题,以确保提供的模块 不同的设计师可以顺利集成,没有时间问题。

在每个模块的所有输出上都使用触发器进行设计,具有优势 当一个输出用作其他模块的输入时,输入时序为 合理的定义好,并且只取决于路由延迟。这使它 a 对问题 1 表示肯定。

有一个合理的定义良好的输入时序可以使复杂的 直接在输入上的组合逻辑,因为大部分时钟周期将 可用于此。因此,这也使问题 2 成为“是”。

使用上述 Yes/Yes 设计方法,可用的周期时间仅为 使用过一次,即在模块的输入端,在触发器之前 继续输出。结果是多个模块会很好地点击 像乐高积木一样拼在一起,如下图所示。

如果不同的模块没有遵循严格的设计方法,那么 一些模块可能会在输入端放置触发器,而在输出端放置一些触发器。一种 然后需要更长的周期时间,因此更慢的频率,因为最坏的 案例路径经过两倍的组合逻辑深度。这样的设计 如下图所示,应避免使用。

存在第三种选择,其中触发器放置在所有输入上,并且 如果两个不同的模块使用相同的,设计将如下图所示 输出。

这种方法的一个缺点是触发器的数量可能 更高,因为相同的输出被用作多个触发器的输入,并且 综合工具可能无法组合这些等效的触发器。甚至更多 如果生成输出的模块,则可能需要比这更多的触发器 还必须制作一个供内部使用的触发器版本,这通常是 案例。

所以问题的简短回答是:是的,是的。

【讨论】:

    【解决方案2】:

    如果最终设计符合速度目标,并且输入信号干净,则上述两个问题的答案基本上都是肯定的。

    以这种方式设计的模块的问题在于,通过它们的信号时序没有被准确定义,因此组合几个这样的模块可能会导致设计速度非常慢,或者快速输入信号无法通过设计。

    如果您设计了这样的电路,并且它满足您所有的输入和输出时序约束以及您设置的任何时钟速度约束,它就会工作。

    但是,如果它无法满足时钟约束,您将不得不插入寄存器来“流水线化”设计,从而打破组合逻辑的长而慢的链。而且您必须观察综合和 PAR 报告的输入和输出时序,它们可能会变得复杂。

    在实践中(在 FPGA 中:ASIC 可能不同)每个逻辑块(Xilinx/Altera,Actel/Microsemi 并非如此)的寄存器是空闲的,并且在每个块的输入和/或输出上放置寄存器可以使时序更简单去理解和分析。

    而且因为这样的设计是流水线的,它通常也快得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2018-06-15
      相关资源
      最近更新 更多