【问题标题】:How to get synthesizable delay in verilog如何在verilog中获得可合成的延迟
【发布时间】:2017-10-29 12:02:40
【问题描述】:

我在 verilog 中做了一个错误控制代码,因为我得到了延迟为 18000 ns 的解码数据。我需要将解码后的数据与原始数据进行比较,但我的原始数据开始大约 100 ns,那么如何对这两个信号进行比较。

如何在verilog中延迟我的输入数据并且应该是可合成的?

我需要实现这是硬件。

【问题讨论】:

  • 我认为您需要可能需要更正您的基础知识,请参阅here
  • 通常测试台不可综合?无论如何,对于硬件延迟,您使用一个在时钟的每个正沿更新的计数器。通过这种方式,您可以通过计算周期数来跟踪延迟。
  • 延迟无法合成。在后端处理之后,延迟将包含在标准单元延迟和路由网络延迟中。
  • 使用计数器产生延迟怎么样?这些应该是可合成的。

标签: verilog iverilog


【解决方案1】:

一种选择是手动实例化一个或多个缓冲单元。为此,您需要知道有关您的技术库的单元名称,并且您的 RTL 代码将取决于技术。如果你不想这样,你也可以创建自己的缓冲模块(例如带逆变器)并可以使用它。

这是 Verilog 实例化的示例。 BUFX1 是任意库中的单元名称。

BUFX1 my_buffer (.in(my_signal), .out(my_delayed_signal));

通常综合和 P&R 工具会优化此单元格,但您可以告诉工具您想保留它。下面的示例约束采用 Synopsys 设计约束 (SDC) 格式。大多数工具供应商都支持它。

set_dont_touch <path to my_buffer>

您应该注意,每个角落的单元格延迟会有所不同(例如,慢、典型、快)。所以延迟不是恒定的,而是在一个范围内。

【讨论】:

    【解决方案2】:

    产生延迟的同步方式是使用移位寄存器,它会根据需要将要比较的数据移位尽可能多的时钟周期。使用这种方法,或者使用评论中建议的计数器,您应该会达到接近目标的延迟。

    但是,如果你的时钟周期不适合移位寄存器,你可以通过半手动缓冲信号来产生延迟:

    使用您的综合工具生成所需的延迟。例如,使用 Synopsys 的 Design Compiler:set_min_delay delay_value_in_ns -from startpoint -to endpoint 将指示正确的工具,您至少需要在 startpointendpoint 之间的 delay_value_in_ns。也可以设置一个值来约束最大值:set_max_delay

    必须将这些约束转发到布局和布线等进一步的流程步骤,以保持正确的延迟。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多