我使用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 行:合成时忽略延迟。