让-XDC-时序约束为您效力

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

让-XDC-时序约束为您效力

让XDC 时序约束为您效力

作者:Adam Taylor e2v 公司首席工程

师aptaylor@

时序和布局约束是实现设计要求的关键因素。本文是介绍其使用方法的入门读物。

完成RTL 设计只是FPGA 设计量产准备工作中的一部分。接下来的挑战是确保设计满足芯片内的时序和性能要求。为此,您经常需要定义时序和布局约束。我们了解一下在基于赛灵思

图1–时钟域CLK1 和CLK2 相互之间异步。您可通过在约束文件中声明时钟组来管理时钟路径之间的关系。当声明时钟组时,Vivado 工具不会对组内定义的时钟之间的任何方向执行时序分析。

为了有助于生成时序约束,Vivado 工具将时钟定义为三种类型:同步、异步或不可扩展。•同步时钟具有可预测的时序/相位关系。通常主时钟及其衍生时钟符合这种特性,因为它们具有公共的根起源和周期。

•异步时钟之间不具备可预测的时序/相位关系。通常不同的主时钟(及其衍生时钟)符合这种特性。异步时钟有不同的起源。

•如果超过1,000个周期后,仍无法确定公共周期,那么两个时钟就是不可扩展的。如果是这种情况,将使用1,000 个周期内的最差建立时间关系。不过,无法保证这就是实际的最差情况。使用Vivado 生成的时钟报告来确定您所处理的时钟是哪种类型。该报告可帮助您识别异步和不可扩展时钟。

声明多周期路径能实现更合适而且要求放松的时序分析,从而让时序引擎集中处理其它更关键的路径。

识别出这些时钟后,您就可利用“set clock group”约束禁止它们之间的时序分析。Vivado 套件使用的是赛灵思设计约束(XDC),其基于广泛使用的Tcl 约束格式的Synopsys 设计约束(SDC)。通过XDC 约束,您可使用以下命令定义时钟组:

set_clock_groups -name

-logically_exclusive -physically_exclusive -asynchronous -group

-name 是为组赋予的名称。-group 选项是定义组成员(即没有时序关系的时钟)的位置。当有多个用来驱动时钟树的时钟源可供选择,包括BUFGMUX 和BUFGCTL,应使用logically 和physically exclusive 选项。从而,这些时

钟不能同时出现在时钟树上。所以,我们不希望Vivado 分析这些时钟之间的关系,因为它们是互斥的。最后,–asynchronous 约束可用来定义异步时钟路径。

建立时序关系的最后一个方面是考虑时钟的非理想关系,尤其是抖动。您需要考虑两种形式的抖动:输入抖动和系统抖动。输入抖动出现在主时钟输入上,体现了实际跳变出现时间与理想条件下跳变出现时间之间的差异。系统抖动源自设计中存在的噪声。

您可以使用set_input_jitter 约束来定义每个主输入时钟的抖动。同时,使用

set_system_jitter 约束为整个设计(所有时钟)设定系统抖动。

时序例外

当有时序例外时,您还必须关注已定义的时钟组内发生了什么。然而,什么是时序例外呢?

一种常见的时序例外是只有每隔一个时钟周期所采样的结果。另一种情况是将数据从慢时钟传输到更快的时钟(或相反),其中两个时钟都是同步的。事实上,这两种时序例外一般被称为多周期路径,如图2 所示。

图2–多周期路径是一种时序例外的例子。

为这些路径声明多周期路径能实现更合适而且要求放松的时序分析,从而让时序引擎集中处理其它更关键的路径。最后的益处是能够提高结果质量。

您可以在XDC 文件中使用以下XDC 命令声明多周期路径:

set_multicycle_path path_ multiplier [-setup|-hold]

[-start|-end][-from ] [-to ]

[-through

]

当您声明多周期路径时,实际上是将建立或保持(或二者皆有)分析要求与path_mutiplier 相乘。例如在上面的第一个实例中,每两个时钟周

期有一次输出,因此对于建立时序而言

path_multiplier 是2。由于多周期路径既可应用到建立时间又可应用到保持时间,那么您可以选择其应用位置。当您声明建立时间乘数时,最佳做法通常是使用下面的公式同时声明一个保持时间乘数。

保持周期= 建立乘数–1 –保持乘数

这对于我们所介绍的下列简单实例意味着,保持乘数由下面这个公式确定:

保持乘数= 建立乘数–1,当使用公共时钟时。

为了演示

多周期路径的重要性,我创建了一个简单实例,您可在这里下载。在XDC 文件中有一个实例包

含了建立和保持这两个已被同时声明的多周期路径。

物理约束

最常用的物理约束是I/O 引脚布局和与I/O 引脚有关的参数定义,例如标准驱动强度。不过,还有其它类型的物理约束,包括布局、布线、I/O 和配置约束等。布局约束能够定义单元的位置,而布线约束可用来定义信号的布线。I/O 约束可用来定义I/O 位置及其参数。最后,配置约束可用来定义配置方法。

同样,也有一些约束不属于这几组约束。Vivado 设计套件包含三种这样的约束,它们主要用于网表中。

•DONT_TOUCH –该约束可用来阻止优化,这样当实现安全关键型或高可靠性系统时该约束会非常有用。

•MARK_DEBUG –该约束可用来保存RTL 信号,以便随后用于调试。

•CLOCK_DEDICATED_ROUTE –该约束可用来识别时钟布线。

最常用的约束与I/O 布局和I/O 的配置有关。将I/O 放在FPGA 上,需要使用布局约束找到物理引脚,使用I/O 约束配置I/O 标准和斜率等I/O 属性。

现代化的FPGA 支持多种单端和差分I/O 标准。这些均可通过I/O 约束来进行定义。不过,

相关文档
最新文档