2

我一直读到 RTL 代码中声明的延迟永远无法合成。它们仅用于模拟目的,现代综合工具只会忽略代码中的延迟声明。

例如:x = #10 y;将被视为x = y;由综合工具。

有人能解释一下为什么不能合成任何硬件描述语言(即VHDL、Verilog或Sytem-Verilog)中的延迟声明吗?

4

2 回答 2

3

在 Verilog 中,我们可以暗示在时钟边沿改变值的逻辑,这综合到触发器。我们可以暗示非时钟布尔逻辑,这合成为组合逻辑,只是一堆 AND 和 OR。

在合成时钟树时,合成工具通过添加延迟来平衡这些,以便所有节点同时接收时钟,因此看起来合成工具确实具有添加延迟的能力。

但是,当制造 ASIC 时,速度会有所不同,在高水平上可以被视为慢速、典型和快速。在实践中,这些角落有数百种变化,其中硅中的某些类型的设备运行速度快,而其他类型的设备运行速度慢。

硅的这些角落也有一个温度等级,最坏的情况可能是 +140C 快速硅和 -40C 慢速硅。在这种情况下,通过缓冲器的延迟变化可能是 1ns 到 30ns。

将其带回 Verilog,如果#10是可合成的,您实际上将得到 155+-145,即 10ns 到 300ns,如果您还设计了一些东西#20作为相同接口或控制结构的一部分,它将具有 20ns 到 600ns 的范围. 因此,整个事情对您的设计并不真正有效。

时钟树的设计方式限制了最大和最小延迟,因此时钟树上的所有节点将相对于彼此进行缩放。他们从来没有被赋予如此严格的规则,#10ns因为这在组合电路中物理上是不可能保证的。

于 2014-07-12T09:09:46.967 回答
3

没有永远无法合成的代码。如果您可以编写可以在一块硬件上编译和执行的代码,则可以将其合成为硬件。这只是综合工具供应商选择解释什么的问题。过去有一些行为综合工具在知道时钟周期为 100 时进行解释,即

assign #120 A = B * C;

表示结果 A 将出现在下一个时钟周期。但是那些工具已经不存在了。这种方法的一个大问题是您不知道这些延迟是假设还是要求。

大多数综合工具的编写方式是,所有时序信息都与您的 Verilog 描述分开指定。只有您的描述的功能方面是从您的 Verilog 代码中提取的。从单独的文件中获取时钟和输入/输出要求的时序信息比尝试分析您的测试台要容易得多。

于 2014-07-12T15:11:18.383 回答