如何使用Verilog和FPGA通过一系列组合电路计算传播延迟?

Fra*_*jay 2 verilog fpga

我是FPGA和HDL的新手,但我正在努力学习并且无法弄清楚这一点.如何通过几个级别的组合逻辑来计算或估计传播延迟.我是否可以凭经验确定这一点,或者我可以在设计时解决这个问题.在这种情况下,我正在使用FPGA来实现奇偶校验设置和检查电路.该电路看起来像xor门的树形网络,如示例图片,除了我想xor 16寄存器,因此将有更多级别或xor操作.我希望能够通过每个"级别"xor逻辑计算传播延迟,这样我就可以确定整个奇偶校验和设置操作将花费多少时钟周期或多少纳秒.希望我有意义.

奇偶校验网络

奇偶校验网络

非常感谢您的帮助.

Jan*_*ray 11

正如我在"高性能FPGA设计的艺术"中所解释的那样,您需要"知识".http://www.fpgacpu.org/log/aug02.html#art "你必须......启动你的工具并设计一些测试电路,然后打开时序分析器和FPGA编辑器,然后倒出来的东西out,延迟(逻辑和路由)往往是什么,等等."

在你做了一段时间之后,你会看到这样的问题,并且只知道(或者有个好主意).

在这种情况下,例如,我知道在FPGA中,16输入XOR将由4或6输入查找表(4-LUT或6-LUT)两个深的树构建,并且它不能是在电路中实现的只有一个LUT深.因此,流水线实现中这种电路的最小延迟将是(在Xilinx时序命名法中):

  • tCKO - 时钟输出任何16个触发器的延迟

  • tILO - 延迟通过第一级LUT

  • tAS - 假设在同一切片中实现,延迟通过第二级LUTS +触发器设置时间

  • 加上净路由延迟

对于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
Run Code Online (Sandbox Code Playgroud)

和一个简单的UCF文件:

net clk period = 1.5 ns;
Run Code Online (Sandbox Code Playgroud)

我设备的总延迟约为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)
Run Code Online (Sandbox Code Playgroud)

如您所见,数据表中的逻辑延迟仅为480 ps左右,而净路由延迟为770 ns,时钟偏差等更多,总计低于1.3 ns.这实际上比700 MHz/1.43 ns的全局时钟树上的组件切换限制/ Fmax快...

总而言之,当您尝试一些测试电路并尝试调整它们时,您将获得经验,可以帮助您估计在LUT等FPGA原语中实现电路运行的速度.

如果它真的很重要,那么通过综合,布局布线和静态时序分析来实现设计是没有替代的.不要忘记添加时序约束以为工具提供目标,然后尝试迭代地降低最小时钟周期,直到收敛到最小时段.

快乐的黑客!


too*_*lic 0

仅当您拥有提供所有组件温度、电源电压和制造工艺变化函数的延迟的时序模型时,您才可以通过多个逻辑阶段来估计传播延迟。在 IC 领域,这是使用静态时序分析工具自动完成的。我不确定 FPGA 设计方法。

正如 Oli Charlesworth 提到的,总体延迟还取决于互连线延迟。其他因素包括:输入驱动强度和输出负载。