时序约束

FPGA时序约束

1、约束的目的
介绍FPGA约束原理,理解约束的目的为设计服务,是为了保证设计满足时序要求,指导FPGA工具进行综合和实现,约束是Vivado等工具努力实现的目标。所以首先要设计合理,才可能满足约束,约束反过来检查设计能否满足时序。主要涉及到xilinx vivado xdc约束语法,给出对应的ISE ucf 语法。另外quatus的语法和xdc几乎兼容,原理都一样。

时序约束中最基本的是时钟,时钟有抖动(jitter),偏移(skew),占空比失真(duty cycle distortion)三种特性。
1、抖动,分为周期抖动(cycle jitter),周期差抖动(cycle to cycle jitter)和长期抖动(long term jitter)。
2、偏移和时钟线的长度,时序单元的负载电容和个数有关。FPGA的全局时钟采用全铜工艺和树状结构,偏移非常小,可以忽略。
3、占空比失真就是高低电平不对称,会吞噬时序裕量。

2、基本的时钟约束

Vivado的静态时序和时序约束

静态时序
静态时序中,组成设计的元件分类成组合逻辑和时序逻辑两大类。
在vivado中,设计是否满足性能要求是由静态时序分析(Static Timing Analysis,STA)来校验和验证的,在静态时序分析STA中元件的功能并不重要,重要的是元件的性能。

在vivado中,静态时序引擎是基于基本元件,这意味着时序特征是为每个基本元件而作的。

设计中延时来自于以下因素:

  • FPGA的构图与设计的实现;
  • 元件构成的物理特性;
  • 元件的位置布局;
  • 器件工艺变化;
  • PVT环境因素。
  • 时序校验
    静态时序通道中需要考虑的两点是建立时间和保持时间的校验。

    1. 对于建立时间校验,是从一个时钟的上升沿到下一个时钟的上升沿,数据到达目的定时元件必须在下一时钟上升沿到达目的定时元件之前,依次检验所有的静态时序通道。

    2. 对于保持时钟校验,是从始终上升沿到相同时钟的上升沿,数据到达目的定时元件必须不能比相同时钟的上升沿到达目的定时元件早,依次检验所有的静态时序通道。

    时序约束到底是要干嘛?

    作者:胡建东,来源:玩儿转FPGA

    很多小伙伴开始学习时序约束的时候第一个疑惑就是标题,有的人可能会疑惑很久。不明白时序约束是什么作用,更不明白怎么用。

    FPGA内部结构=LUT+触发器+走线+嵌入式模块(RAM,乘法器等)。下图大致描述了它的抽象结构。

    抽象结构

    以上公式告诉我们:信号是通过走线和各个模块产生连接。然后信号通过走线必然有延迟,有人认为电信是光速走线延时应该很短,可以忽略(全局时钟线的延时在时序紧张的情况下是不可忽略的),然而走线延迟可能超过你的想想。

    1.电信号在走线槽里面传播并不是光速,走线上有分布电感和地平面有分布电容,二者值越大,对电容充电时间越长,走线延迟越长,这写参数自然由工艺和封装来决定,和我们设计无关,但是却对我们的设计方法产生重大影响,传输模型如下:

    时序约束方法及解决timing问题的方法(二)

    本文承接上一篇文章《时序约束方法及解决timing问题的方法(一)》,记录我在实际工程中fix timing问题的方法。

    xilinx的Vivado工具也一直在更新,到本人记录此文的时候,Vivado已经有2017.3版本了,建议大家使用最新的Vivado工具。

    继续上一篇博客中提到的约束问题,在修改了timing约束之后,有了false_path,set_multicycle等宽松的命令之后,如果timing还不收敛,那就可以考虑适当增加place约束来达到效果。

    尝试不同的Place策略,Vivado的P&R过程是可以选择不同策略的,大家最好在vivado 的tcl命令行中,输入place_design -help,可以看本文附图的Log,注意我圈出来的选项,-directive有丰富的选择,如果在你的flow里不做配置,会用Default,可以尝试Explore、ExtraNetDelay_high等策略;

    时序约束方法及解决timing问题的方法(一)

    承接上一篇文件《 基于xilinx FPGA验证ASIC可能遇到的timing问题》中提到的问题,本文列数一下在vivado中可能用到的约束方法和面对timing问题的解决办法。

    (1)详尽的时钟约束
    create_clock:和其他FPGA EDA tool一样,在vivado中timing约束越全越好,越细越好,而place约束可以很粗略或者省略调。约束中最常用的语句就是create_clock了,用语法create_clock -name NAME -period PRERIOD get_ports{***}来定义FPGA的外部输入时钟源头,这是FPGA所有MMCM或PLL的时钟源,一般对其只有周期和引脚的约束,需要注意的是引脚最好采用FPGA的时钟专用引脚,对xilinx 7系列FPGA来说就是有MRCC和SRCC属性的引脚,这类引脚可以直接驱动BUFG,保证时钟信号质量,如果设计中不得已采用了一般的GPIO作为时钟输入引脚,在约束中最好加上CLOCK_DEDICADED_ROUTE的property约束,否则在place中可能因为BUFG资源的互相挤压报出error。

    视频:约束爆炸

    本段 Xilinx 快速入门视频将探讨约束爆炸。视频探讨了是什么导致时序约束爆炸,以及如何调试和修复异常约束问题。

    输出延迟是怎么回事?

    作者:Sanjay Churiwala,赛灵思公司工具与方法学应用专家

    本篇文章我们将与大家共同讨论时序约束方面的一个概念:output_delay

    Output_delay可选参数-max相对比较容易理解。为了全面性本文下面也进行了介绍

    Output_delay的另一个可选参数-min则比较难理解,这也是本文的主要目的

    我们以下面这个情况为例:

    B表示整个设计中的一个模块,也是我们要进行约束的部分

    P表示模块B的一个输出端口,output_delay设置的一个节点

    F1表示模块B内部的一个触发器,同时也是P的驱动源

    F2表示模块外部的一个触发器,用于采样P输出的数据

    为了简单起见,我们假设F1和F2采用同一驱动时钟,而且也不存在时钟偏移。P端口的output_delay设置也参照同一时钟源

    P端口的output_delay设置也参照同一时钟源

    为了更容易理解,我们使用一些具体的参数值

    在仿真中防止脉冲滤波

    作者:Sanjay,赛灵思公司工具与方法学应用专家

    通常如果你的设计在较低时钟频率时通过了仿真,但是在较高时钟频率时却失败了,你的第一个问题应该是你的设计在某个较高时钟频率时是否达到了时序约束的要求。

    然而这里我们将举这样一个例子,就是对于某个较高时钟频率你已经检查了静态时序分析(STA),而且时序约束也是正确的。

    这种情况是什么引起的较高时钟频率仿真失败呢?

    可能的原因就是仿真方式、设计本身或者testbench设置方式有问题。

    然而在较低时钟频率通过了仿真这个事实就排除了设计/testbench/仿真在设置上的问题。

    排除了上面两项,下一个可能就是脉冲拒绝(reject)或者脉冲错误。

    “脉冲拒绝(reject)”和“脉冲错误”是Verilog仿真中的概念。

    这些概念说的是脉冲的持续时间小于某个值(pulse_r)就不会通过某个电路元件。

    当然脉冲持续时间大于pulse_r,但是如果小于另一个值pulse_e尽管会通过,但是在仿真中显示的是“x”。

    这个持续时间是以通过某元器件延迟的百分比来表示的。

    比如通过某元件的延迟是1ns。

    0.5ns的脉冲表示为50%的持续时间。

    现在假设设计采用的频率是200MHz。

    对应的周期就是5ns。

    观看视频,学习如何使用 Vivado 的“时序约束向导”来完整地约束您的设计。该向导延续 UltraFAST 设计方法学中的要求来定义时钟,时钟交互,以及输入/输出约束。本视频向您演示了如何使用向导将一个部分约束的设计转换为完全约束的设计来传递时序。

    让 XDC 时序约束为您效力

    作者:Adam Taylor e2v 公司首席工程师 aptaylor@theiet.org

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

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

    时序约束
    最基本的时序约束定义了系统时钟的工作频率。然而,更高级的约束能建立时钟路径之间的关系。工程师利用这类约束确定是否有必要对路径进行分析,或者在时钟路径之间不存在有效的时序关系时忽视路径。

    默认情况下,赛灵思的 Vivado® 设计套件会分析所有关系。然而,并非设计中的所有时钟之间都有可以准确分析的时序关系。例如当时钟是异步的,就无法准确确定它们的相位,如图 1 所示。

    同步内容