时序约束

时序约束到底是要干嘛?

作者:胡建东,来源:玩儿转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 所示。

OFFSET IN使用举例

本文将结合具体实例阐述OFFSET IN的使用方法。注意:这是我第一次写OFFSET IN约束,本文仅供参考。阅读本文前需要了解时序收敛的基本概念,OFFSET IN和Period的相关知识,可先阅读时序收敛:基本概念,OFFSET约束(OFFSET IN 和OFFSET OUT)这两篇内容。

1. 分析

某器件(Device)有信号RXD0-RXD15,RKLSB,RKMSB需要输入到FPGA内,同时有与数据同步的RXCLK,数据为SDR输入。如下图所示,这是一个典型的源同步输入方式,需要给出OFFSET IN约束。

OFFSET IN的相关参数可以到与器件对应的Datasheet内寻找,该器件的输入满足以下关系。RXD0-RXD15,RKLSB,RKMSB在RXCLK上升沿到达前3ns有效,同时在上升沿之后保持3ns。(这一情况对应TXCLK=80MHz,TXCLK = RXCLK)

特殊约束From To

“A timing exception is needed when the logic behaves in a way that is not timed correctly by default.”

前面谈时序约束的时候,略去了Path specific exceptions。'Path specific exceptions'可以直接理解为特别指定的路径例外。我们自然希望软件帮我们做好绝大多数事情,既然存在这个例外,那么说明软件在知道了OFFSET 和 PERIOD之后,还有并不知晓的时序要求。所以这个时序要求需要我们人为指定。这可能有多种情况,一下分别说明(注意,From to 我也没用过,所以可能不对……)

多周期(Multi-Cycle)约束

同步内容