我使用Xilinx ISE作为IDE。 如果我在always(Verilog)/进程(VHDL)中的每个赋值中添加100 ps延迟,敏感列表只有时钟和复位。 像这样。
always@(posedge clk)
if(rst)
a <= #100 'd0;
else
a <= #100 b;
end
我认为延迟功能只影响模拟过程。因为每本书和用户指南都告诉我们delay
不可综合。
但我仍然想知道延迟功能是否能真正影响地点或路线的结果?如静态时序或时钟报告? 就像可以使电路最大频率更高或更慢?
答案 0 :(得分:3)
当代码中的#delay加载到FPGA上时,不会影响设计的时序。
它也不会影响布局布线结果或静态时序分析。这两个步骤都使用制造商以设备模型的形式提供的时序信息。
答案 1 :(得分:2)
你是正确的,没有任何内在的延迟语句使它们不可合成,但尝试这样做是非常不切实际的。这样做的原因是,一旦在FPGA上处理物理电路,其性能随PVT(工艺,电压,温度)而变化,并且可以大量实现!对此唯一的对冲将是一个模拟电路,试图感知上述所有并相应地调整自己。这样的野兽在它能做的事情上仍然会受到限制,并且体力庞大且耗电很大,这取决于延迟的变化以及你想要支持的所有上述方面的差异。
因此,考虑到在特殊用途IO之外对此的需求非常少(读取:否),FPGA供应商不会提供任何此类组件,使构造无法解析。
答案 2 :(得分:1)
在Verilog的综合过程中,通常会忽略延迟语句(#100
)。所以在综合中它与:
always@(posedge clk)
if(rst)
a <= 0;
else
a <= b;
end
Xlinx Synthesis and Simuation Design Guide声明:
合成代码中的延迟
请勿使用等待XX ns(VHDL)或#XX(Verilog)语句 你的代码。 (...)此语句不会合成到组件。 在包含这种结构的设计中,功能包括 模拟设计并不总是与功能相匹配 合成设计。
(...)
等待XX ns语句Verilog编码示例
#XX;
不要在VHDL代码或Delay中使用After XX ns语句 在Verilog代码中分配
(...)
延迟分配Verilog编码示例
assign #XX Q=0;
XX指定在a之前必须经过的纳秒数 条件被执行。这句话通常被忽略 综合工具。在这种情况下,模拟的功能 设计与综合设计的功能不匹配。
答案 3 :(得分:0)
“通常”对合成和P&amp; R结果没有影响。
Xilinx:综合工具忽略了通常这句话。
什么时候有影响?
虽然综合工具忽略了延迟语句,但HDL代码略有不同。这可能会改变任何阶段(解析,精化,合成等)的随机化种子,因此可能会产生不同的结果。这些结果可能更好或更差。
如果代码中存在延迟语句,则Xilinx ISE需要以下警告:
警告:Xst:916 - design.v line x:合成时忽略延迟。