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

时间:2012-01-16 00:43:04

标签: verilog fpga

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

parity setting network

parity checking network

非常感谢你的帮助。

4 个答案:

答案 0 :(得分:11)

我需要“知识”,我在“高性能FPGA设计的艺术”中进行了解释。 http://www.fpgacpu.org/log/aug02.html#art“你必须......启动你的工具并设计一些测试电路,然后打开时序分析器和FPGA编辑器,倾注出来的结果,延迟(逻辑和路由)倾向于什么等等。“

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

在这种情况下,例如,我知道在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

和一个简单的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原语中实现电路运行的速度。

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

快乐的黑客攻击!

答案 1 :(得分:0)

只有当您的timinig模型根据温度,电源电压和所有组件的制造工艺变化提供延迟时,才能通过逻辑的几个阶段估算传播延迟。在IC世界中,这是使用静态timinig分析工具自动完成的。我不确定FPGA设计方法。

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

答案 2 :(得分:0)

理论上可以在没有编码的情况下获得FPGA中的预测延迟,但这并不容易。

最简单的方法是使用您需要的IO信号创建一个非常简单的项目,用VHDL,Verilog编写代码,甚至使用原理图捕获,合成和路由设计,然后查看生成的报告文件查看实际延误的工具。

要了解报告文件中的一些参数,您可以查看所有FPGA公司提供的“直流和开关特性”文档。例如,对于Xilinx的Spartan 6系列器件,它是:http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf

希望这有帮助, /法哈德

答案 3 :(得分:0)

当您在特定平台上进行更多编码时,您会感受到这种感觉,但这是成为优秀RTL工程师的一部分。

在编写代码时,请通过模拟和综合。确保您了解综合工具报告的时序路径,并对您所描述的逻辑有良好的心理形象。如果你发现自己在时间方面非常出色,那么你需要重新思考你的设计,但要尽早做到这一点。没有什么比花时间在设计上,让它工作并通过所有测试,只是为了发现它不够快。

然后您更改目标FPGA或技术库,您必须重新调整所有期望。