【问题标题】:Why don't delays synthesize in Verilog?为什么不在 Verilog 中进行延迟合成?
【发布时间】:2019-02-14 04:34:29
【问题描述】:

我试图了解 Verilog 的幕后情况。为什么不在 Verilog 中进行延迟合成?防止这种情况发生的门的实际合成是否发生了什么?

【问题讨论】:

    标签: verilog


    【解决方案1】:

    为什么不合成延迟

    因为众所周知,延迟难以实施。

    首先:延迟单元有很大的范围。取决于电压和温度,甚至更多:过程,实际延迟可能会变化 2 倍或更多。在 Verilog 中指定 2ns 的延迟非常简单,但制作起来非常非常困难,而且现在(几乎?)在没有参考时钟的情况下无法在硅中实现。我可以想象,如果有人可以合成延迟,您必须将它们指定为 (min,typ,max) 延迟。

    您发现延迟的地方是 I/O 单元、高速 SER-DES 端口、DDR 接口等。它们具有校准或其他一些学习电路来控制延迟。即使这样,您也会发现需要定期重新校准以补偿温度和电压引起的漂移。

    如果您有 FPGA,那就更难了。正如你在时间安排中看到的那样,现在的大部分延迟都在网络上。因此,如果您想要 2ns 的延迟,您必须减去延迟单元的延迟。仅当延迟仅驱动一个门时,这才有效。如果您需要驱动多个端点,则每个端点的延迟都会有所不同,除非您足够幸运,每条路径都具有相同的延迟(长度、电阻和电容。)

    除此之外,您还需要一个可编程延迟单元。我不知道它们有多大,范围是多少(延迟 2 秒怎么样?)或者你需要多少。

    底线:ASIC/FPGA 社区发现延迟造成的麻烦比他们解决的问题多。这是在大多数情况下往往被证明是“死胡同”的“捷径”之一。

    【讨论】:

      【解决方案2】:

      因为 RTL 综合工具选择保留在功能的数字域中。综合延迟需要了解模拟特性和实现细节。

      综合工具的工作方式是它们首先采用 RTL 描述并生成一组布尔方程。在布尔代数中没有办法表示延迟。

      【讨论】:

        【解决方案3】:

        使用编译器指令

        /* synthesis keep */
        

        它将保留具有微不足道响应的逻辑门序列,例如用于产生延迟的缓冲器或反相器。

        Verilog keep uses

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-29
          • 1970-01-01
          • 2020-07-02
          • 2016-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多