01signal.com

选择 I/O timing的策略

此页面属于关于 timing的一系列页面。前几页解释了 timing 计算背后的理论,展示了如何编写几个 timing constraints 并讨论了 timing closure的原理。本页开始讨论 I/O timing constraints。

介绍

到目前为止,关于 timing constraints 的整个讨论都与 FPGA内部的 paths 有关。终于要说到控制 FPGA的 I/O ports的 timing 的 constraints 了。

但在谈论 timing constraints之前,有必要了解 FPGA 与外部组件之间同步的不同方法。不考虑这个话题而写的 Timing constraints 可能毫无价值。此外,负责 I/O 接口的 logic 可能写得不够好。在极端情况下, PCB 可能缺少必要的接线来保证 I/O 正常工作。

有了与外部组件同步所需的意识,就可以为 timing constraints选择正确的命令。其实际方面将在下一页解释。

在此页面上,我假设您熟悉IOB registers

Clock distribution

只要 paths 在 FPGA内部,就不需要注意 path两侧之间的 clock skew : 这些工具负责分配 clock,而 timing 计算将 clock skew 考虑在内。

使用 I/O timing constraints,它是不同的: path 的一侧是 FPGA之外的外部元件。为了与 data signals同步,该组件依赖于它在其中一个 pins上接收到的 clock 。但是这个 clock 同步的是什么?

该策略通常是以下两者之一:

接下来将更详细地讨论这两种策略。关于 source-synchronous clock 选项,如果 data signals 是 inputs 和 outputs,则有明显的区别。因此,这些情况将单独讨论。

System synchronous clock

在 PCB 上同步多个组件的最简单方法是将所有组件连接到一个 clock。这称为system synchronous clock (或common clock )。

System synchronous clocking

这种方式的好处是所有元器件的 timing 参数都是相对于一台 clock signal而言的。因此,为了进行 timing 计算, clock 在两侧相同。因此对于在 PCB上的两个组件之间传播的 data signal ,计算类似于 FPGA内部的 path : path 以相对于第一个 clock edge的 clock-to-output 开头。在 path的末端, tsu 是相对于第二个 clock edge而言的。 system synchronous 方式就是说这两个 clock edges 属于同一个 clock。

所以使用 system synchronous clock 很简单,但是这种方法只适用于相对较低的频率。回想一下 timing 计算的介绍,最小的 clock period 是几个 timing 参数的总和: 第一个 flip-flop的 clock-to-output ,第二个 flip-flop的 propagation delay 和 tsu 。对于 output port, clock-to-output 相对较大,因为这是 PCB的电线达到所需电压所需的时间。但它并没有就此结束: clock skew 和与 clock 相关的其他不确定性也必须添加。总结所有数字,最小的 clock period 可能不会令人印象深刻。

根据经验, system synchronous clock 不适合 I/O , data rate 高于 100 MHz。但这在很大程度上取决于涉及哪些组件。事实上,一些电子元件具有 system synchronous clock很难满足的 timing 要求,即使在低得多的频率下也是如此。这些组件是在制造 PCB之前规划 I/O timing 很重要的原因之一。

set_input_delay 和 set_output_delay (将在下一页说明)是最适合与 system synchronous clock一起使用的 timing constraints 。

Source-synchronous clock

通常, PCB 上两个组件之间的接口基于由其中一个组件提供的 clock 。当然,如果 clock 是由 FPGA 或外部组件生成,则有所不同。

因此有四种相关情况:

Asynchronous inputs

某些 inputs 与 clock无关。例如,来自外部组件的 pushbuttons、 I2C、 RS232 和各种 status signals 与 clock不同步。这些 signals 通常比 FPGA内部的 clock 慢得多。因此,通常的解决方案是使用 flip-flops (最好是IOB registers )对这些 signals 进行采样,然后继续使用常规的 logic design 技术。

这些 inputs 与用于采样的 clock 不同步。因此, IOB register (或连接到 port的 flip-flop )扮演metastability guards的角色。因此,应为每个 port使用第二个 register ,类似于 unrelated clocks之间的clock domain crossing 。否则,即使 input signals 运行缓慢而 design 目前似乎工作正常,也存在不可预测和奇怪行为的风险。

应该编写 timing constraints 以确保可重复的行为: 应遵循与IOB registers相同的准则,即使 flip-flops 未放置在 IOB内部也是如此。为了更加安全,最好还添加一个专用的 timing constraint ,以将这些 registers的角色作为 metastability guards (在不同的页面上解释)。

False paths

I/O ports 的False paths 原则上与 FPGA内部的 paths 相同: set_false_path 命令用于请求不对特定 ports强制执行 timing 要求。

关于 FPGA内部的 paths ,已经讨论了False paths 。基于同样的道理, false paths 背后的动机 I/O ports 主要是维护一个空的 unconstrained paths列表。此列表应为空,以便更容易识别 port 由于错误而缺少 timing constraints 。

False paths 应该只有在 port 的 timing 完全没有意义的情况下才可以使用。例如,使用 LEDs 和 DIP switches。

SDC constraints的例子:

set_false_path -to [get_ports led_0]
set_false_path -from [get_ports dip_switch_0]

概括

此页面概述了一些在 FPGA 和外部组件之间进行同步的策略。选择的策略对 logic design 和 timing constraints都有影响。

有了这些知识,就该讨论如何编写 I/O timing constraints了。

此页面由英文自动翻译。 如果有不清楚的地方,请参考原始页面
Copyright © 2021-2024. All rights reserved. (6f913017)