我一直读到 RTL 代码中声明的延迟永远无法合成。它们仅用于模拟目的,现代综合工具只会忽略代码中的延迟声明。
例如:x = #10 y;
将被视为x = y;
由综合工具。
无法综合任何硬件描述语言(例如,VHDL、Verilog 或 Sytem-Verilog)中的延迟声明的原因是什么?
我一直读到 RTL 代码中声明的延迟永远无法合成。它们仅用于模拟目的,现代综合工具只会忽略代码中的延迟声明。
例如:x = #10 y;
将被视为x = y;
由综合工具。
无法综合任何硬件描述语言(例如,VHDL、Verilog 或 Sytem-Verilog)中的延迟声明的原因是什么?
合成意味着以某种方式将您所描述的内容(此处为 Verilog)转换为真正的硬件。
现在在你的 Verilog 中你说你有 50ns 的延迟。好的,但是现在,就硬件而言,您如何将其转换为实际的硬件?
如果您使用的是 FPGA,您将如何使用可用的 FPGA 资源(LUT、寄存器、Ram 元素……)实际构建 50ns 延迟?通过添加额外的路由延迟?假设您指定 1s 延迟!不使用芯片的所有路由功能是不可能的(可能还不够)。您的设计无法安装。ASIC 也是如此。您将使用 80% 的硅表面来为 ONE 线路添加延迟。
它应该工作的方式是您使用同步设计并使用计数器或其他技术自己实现延迟。但是延迟必须是该元素时钟的倍数。
通常你会发现诸如“10 ns 之后”之类的东西是传播延迟。在 Verilog 模拟器上进行理想模拟时,输出恰好在输入发生变化时发生。这是不现实的,也没有描述真实硬件的工作方式。考虑到这一点,您可以指定在多长时间后更改输出:使用延迟声明。
从SO移植我的答案。重点是为什么综合绝对延迟是不切实际的
在合成时钟树时,合成工具通过添加延迟来平衡这些,以便所有节点同时接收时钟,因此看起来合成工具确实具有添加延迟的能力。
但是,当制造 ASIC 时,速度会有所不同,在较高的水平上,这可以被视为慢速、典型和快速。在实践中,这些角有数百种变化,其中硅中的某些类型的设备运行速度快,而其他类型的设备运行速度慢。
硅的这些角落也有一个温度等级,最坏的情况可能是 +140C 快速硅和 -40C 慢速硅。在这种情况下,通过缓冲器的延迟变化可能是 1ns 到 30ns。
将其带回 Verilog,如果#10
是可合成的,您实际上将得到 155+-145,即 10ns 到 300ns,如果您还设计了一些东西#20
作为同一接口或控制结构的一部分,它将具有 20ns 到 600ns 的范围. 因此,整个事情对您的设计并不真正有效。你没有得到确切的#10
和#20
指定的。
时钟树的设计方式限制了最大和最小延迟,因此时钟树上的所有节点将相对于彼此进行缩放。他们从来没有得到如此严格的规则,它必须是#10ns,因为这在组合电路中物理上是不可能保证的。
唯一的绝对时间单位将来自外部时钟。任意延迟从何而来——什么样的离散数字逻辑等价物会从时钟产生它?
如果您想要一个可综合的延迟,那么您将需要使用外部时钟输入和一个适当的状态机/计数器,该状态机/计数器将计算特定数量的时钟周期。