时序逻辑电路模块中的时间延迟是否会影响合成、放置或路由的结果?



我使用Xilinx ISE作为IDE。 如果我在具有敏感列表的always(Verilog(/进程(VHDL(中的每个分配中添加100 ps延迟,则只有时钟和重置。 喜欢这个。

always@(posedge clk)
if(rst)
a <= #100 'd0;
else
a <= #100 b;
end 

我认为延迟功能只影响模拟过程。因为每本书和用户指南都告诉我们delay是不可合成的。

但我仍然想知道延迟函数是否真的会影响地点或路线的结果?喜欢静态计时或时钟报告? 比如可以使电路的最大频率更高或更慢?

否 代码中的 #delay 不会影响设计加载到 FPGA 上的时序。

它也不会影响地点和路径结果或静态时序分析。这两个步骤都使用制造商以设备模型形式提供的计时信息。

您是对的,延迟语句没有任何内在的东西使它们无法合成,但是尝试这样做是非常不切实际的。 这样做的原因是,一旦在FPGA上,您正在处理一个物理电路,其性能随PVT(工艺,电压,温度(而变化,并且可以这样做很多! 唯一的对冲是模拟电路,它试图检测上述所有内容并相应地调整自己。 这样的野兽在它能做的事情上仍然受到限制,并且会体型庞大,需要电力,这取决于延迟的愤怒和你想要支持的上述所有差异。

因此,考虑到除了特殊用途的IO FPGA之外,对此的需求很少(阅读:没有(,供应商不提供任何此类组件,使结构难以系统化。

延迟语句(#100(在Verilog的合成过程中通常被忽略。所以在综合中它与

always@(posedge clk)
if(rst)
a <= 0;
else
a <= b;
end 

Xlinx 合成和模拟设计指南指出:

合成代码延迟

不要在 中使用等待 XX ns (VHDL( 或 #XX (Verilog( 语句 您的代码。 (...)此语句不会合成为组件。 在包含此构造的设计中,的功能 仿真设计并不总是与 综合设计。

(...

等待 XX ns 语句验证日志编码示例

#XX;

不要在 VHDL 代码中使用 XX ns 之后语句或延迟 在 Verilog 代码中分配

(...

延迟分配验证日志编码示例

assign #XX Q=0;

XX 指定在 条件被执行。此语句通常被 合成工具。在这种情况下,模拟的功能 设计与合成设计的功能不匹配。

">

通常"对合成和P&R结果没有影响。

Xilinx:这个陈述通常被综合工具忽略。

那么它什么时候有影响呢?

虽然合成工具忽略了延迟语句,但 HDL 代码略有不同。这可能会改变任何阶段(解析、阐述、综合等(的随机化种子,因此有可能产生不同的结果。这些结果可能更好或更糟。

如果代码中存在延迟语句,则 Xilinx ISE 预计会出现以下警告:

警告:Xst:916 - design.v 第 x 行:合成时忽略延迟。

最新更新