正如我在“高性能 FPGA 设计的艺术”中所解释的,您需要“知识”。http://www.fpgacpu.org/log/aug02.html#art http://www.fpgacpu.org/log/aug02.html#art“你必须......启动你的工具并设计一些测试电路,然后打开时序分析仪和 FPGA 编辑器并仔细研究结果、延迟(逻辑和路由)往往是什么,等等。”
当你这样做了一段时间之后,你就会看到这类问题,并且就知道(或者有一个很好的想法)。
在这种情况下,例如,我知道在 FPGA 中,16 输入 XOR 将由 4 或 6 输入查找表(4-LUT 或 6-LUT)两层深度的树构建,并且它不能在仅一个 LUT 深度的电路中实现。因此,流水线实现中此类电路的最小延迟将为(按照 Xilinx 时序命名法):
对于 Virtex-6 速度 -1,我预计该值为 ~1.5 ns。
正如其他人所说,组件切换延迟数据位于相关设备的数据表中,但网络路由延迟则不在。事实上,随着时间的推移,您甚至可能开始记住关键延迟,并了解您可以使用多少 FPGA 原语(例如 LUT)并且仍然制定特定的时钟周期/时钟频率目标。
无论如何,我只是用一些我编码的一次性 Verilog 尝试了这个:
module t(clk, i, o);
input clk;
input [15:0] i;
output reg o;
reg [15:0] d;
always @(posedge clk) begin
d <= i;
o <= ^d;
end
endmodule
和一个简单的 UCF 文件:
net clk period = 1.5 ns;
我的设备的总延迟约为 1.4 ns。亲自尝试一下看看!
以下是静态时序分析器输出的一种路径:
Paths for end point o (SLICE_X3Y68.A5), 6 paths
--------------------------------------------------------------------------------
Slack (setup path): 0.198ns (requirement - (data path - clock path skew + uncertainty))
Source: d_13 (FF)
Destination: o (FF)
Requirement: 1.500ns
Data Path Delay: 1.248ns (Levels of Logic = 2)
Clock Path Skew: -0.019ns (0.089 - 0.108)
Source Clock: clk_BUFGP rising at 0.000ns
Destination Clock: clk_BUFGP rising at 1.500ns
Clock Uncertainty: 0.035ns
Clock Uncertainty: 0.035ns ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE
Total System Jitter (TSJ): 0.070ns
Total Input Jitter (TIJ): 0.000ns
Discrete Jitter (DJ): 0.000ns
Phase Error (PE): 0.000ns
Maximum Data Path at Slow Process Corner: d_13 to o
Location Delay type Delay(ns) Physical Resource
Logical Resource(s)
------------------------------------------------- -------------------
SLICE_X3Y67.BQ Tcko 0.337 d<15>
d_13
SLICE_X2Y68.A2 net (fanout=1) 0.590 d<13>
SLICE_X2Y68.A Tilo 0.068 d<11>
d[15]_reduce_xor_21_xo<0>1
SLICE_X3Y68.A5 net (fanout=1) 0.180 d[15]_reduce_xor_21_xo<0>
SLICE_X3Y68.CLK Tas 0.073 d<10>
d[15]_reduce_xor_21_xo<0>3
o
------------------------------------------------- ---------------------------
Total 1.248ns (0.478ns logic, 0.770ns route)
(38.3% logic, 61.7% route)
正如您所看到的,数据表中的逻辑延迟仅为 480 ps 左右,而网络布线延迟为 770 ns,时钟偏差等稍多一些,总计低于 1.3 ns。这实际上比 700 MHz / 1.43 ns 全局时钟树上的组件切换限制 / Fmax 更快......
总之,当您尝试一些测试电路并尝试对其进行调整时,您将获得经验,帮助您估计电路在 LUT 等 FPGA 原语中实现时的运行速度。
如果这真的很重要,那么通过综合、布局布线和静态时序分析来实现设计是无可替代的。不要忘记添加时序约束来为工具提供一些目标,然后尝试迭代地降低最小时钟周期,直到收敛到最小周期。
快乐黑客!