前言
结合近期工作调试经验,并整理网上资料,对timing summary相关内容进行整理。
部分图文来自文后的参考博客,更多精彩内容请阅读参考博客原文。
一、概述
1.1、时序模型
在任何设计中最普通的时序路径有以下4种:
1 输入端口到内部时序单元路径;
2 从时序单元到时序单元之间的内部路径;
3 从内部时序单元到输出端口之间的路径;
4 输入端口到输出端口之间的路径;

1.2、ISE Timing Report

1.3、ISE工具和策略设置

通常大的FPGA设计中跑一次bit文件时间很长,为了能够一次把不满足的timing报告出来,首先需要将ISE的设置从默认的3更改为较大的数字(100,200等);

组合逻辑的深度极大的影响FPGA的时序,这个比较容易理解;LUT or Slice的级数决定了关键路径。工程师coding的技巧和能力决定了整个代码timing的结果,如果写代码时能够联想到综合结果将RTL转化到电路的结构,Slice的占用情况;Timing 一定很好。
1.4、时序报告的阅读
-
通常时序单元(寄存器)之间的组合逻辑计算延时和布线时间是影响FPGA timing的关键。
-
其中组合逻辑计算和逻辑深度(级数)相关;而布线延时和信号的扇出大小、器件类型、版本的资源占用情况相关;
-
逻辑工程师能够通过阅读时序路径报告,找到代码中相应存在的时序问题;
-
最好结合timing analyzer 和FPGA editor 一起使用,能够直观看到路径走线,延时信息等;(点击蓝色路径即可)
Timing Constraints Classes
制定时序要求通常是由整个系统电路的外部环境来决定的,比如:
-
整个电路系统提供给FPGA的时钟速度为多快
-
FPGA输入数据是同步信号还是异步信号以及它的频率
-
FPGA输出数据所需的频率
-
输入/输出数据与时钟的相位关系
总结以上各种需求情况,得出FPGA芯片对外的三种时序约束:
-
Period(时钟周期约束):约束用同一时钟驱动的寄存器(或同步器件)所能使用的最低时钟频率来保证FPGA内部同步信号的采样时间与保持时间。
-
Offset:约束用时钟采样数据(offset in)或用时钟打出数据(offset out)时时钟与数据的相位差来保证FPGA采样数据的建立时间与下一级芯片得到数据的采样时间。
-
Pad to Pad:当输入数据进入FPGA后没有经过任何同步器件(即由时钟驱动的器件如寄存器、BRAM等),只经过组合逻辑后就输出片外时,Pad to Pad的From…To..约束用以保证内部的延迟时间。
有了以上三种约束类型,就可以描述外界的任何可能条件,并清楚的对最终设计需要满足的时序要求作出说明,FPGA实现工具就会依据此要求进行布局布线,并试图满足要求。Xilinx有许多文档对怎样书写时序约束进行了说明。在此要强调的一点是:时序约束首先是对外界环境的一个反映,其次才是对布局布线工具的要求。时序约束向工具说明上游器件所给的信号是怎样的,下游器件又要求怎样的输入,FPGA实现工具才好依照此标准来综合、布局、布线,时序收敛的设计才可能在真正的电路环境中正常工作。
Timing报告显示逻辑层次比较多,而这些层次中没有延时特别长的
如果是LUT到LUT的层次太多,那么可以先使用XST的register balancing功能。如果还是无法满足,可能需要手动调整组合逻辑,在中间插一级寄存器,并修改其他相关的代码,使得相关数据的latency一致。其他方法参考Xilinx AR9417。
如果是进位链太长,那么就要考虑使用两个小一点的计数器/加法器级联。当考虑到进位逻辑是纵向排列的,当超出一列时,进位会导致延时变长很多时,更需要注意进位链的长度。
如果是BRAM到后续FF的延时比较长,那么考虑几种情况:
-
BRAM的输出直接驱动FF,而且目标频率比较高,比如400-500MHz。为降低这段从BRAM到FF的TCO延时,那么应该使用BRAM Primitive内部的寄存器
-
BRAM的输出经过一些组合逻辑后驱动FF,而且目标频率比较低,<300MHz。为了将BRAM的TCO从这段路径中去除,应该在使用CoreGen生成BRAM时选择输出寄存器在Core中而不用Primitive的。
-
如果目标频率又高,BRAM输出又经过了LUT再驱动FF,那么Primitive和Core中的寄存器最好都使用。这样既降低TCO,又缓解后续逻辑的时序要求。
二、ISE的时序约束工具入门
该节内容引用自博文:在ISE下分析和约束时序
详细内容可以跳转上面链接。
像TimeQuest一样,ISE软件工具也有自己的时序约束及分析工具。ISE界面的processes当中,有一个user constraints列表,其中的Creat Timing Constrain可以提供用户添加指定的时序约束。
ISE使用的时序约束信息跟其他的物理约束,电气约束等信息全部都放置在后缀名为ucf(user constrain file)的文件中,在使用图形化界面编辑约束后,用户还可以直接编辑UCF文件对时序等要求进行修改。
此外,PlanAhead Post synthesis工具在提供管脚,区域约束等功能之外,也提供了时序约束及分析的功能。所以设计者在约束设计时序时可以有多种方法。
使用Creat Timing Constrain时界面的约束类型部分如下图所示:

从图中我们看到,这个工具对于时序约束的理解与altera的一致,需要约束时钟,输入输出信号,以及指定一些时序例外,也有将约束组成Group的功能。Xilinx公司对于其FPGA约束的名称与altera略有不同,但含义一样。分别是Period constrain(时钟周期约束),OFFSET constrain(输入输出偏移约束),以及FROM TO constrain,当然也有multi-cycle constrain等。
双击unconstrainedclks窗口的clk项,出现的以下对话框可以对设计的时钟信息进行指定。

这个界面可以设置时钟的周期,占空比,以及初始边沿是上升沿还是下降沿。或者如果这个时钟是从其他指定的时钟生成的,也可以指定生成的关系从而软件自己计算生成时钟的信息。unconstrained clks窗口将设计中没有约束的时钟列出来,在对每个时钟一一指定之后,窗口内容逐一消失。而其上方另一个窗口将显示约束的具体信息,并且也可从中选择一条约束进行逐一修改。
约束类型菜单下的Inputs 选中双击后,会出现如下图所示的对话框,指定了输入偏移约束的类型之后,选择next。这里的OFFSET IN 的类型包括,输入信号是源同步还是系统同步(时钟的来源不同),是单边沿触发还是双边沿触发的信号,以及有效边沿类型。通常在设计中,若非特殊的DDR数据,或者使用了外部随路时钟,就选择SDR以及系统同步即可。

指定了偏移约束类型后选择next会出现下图所示页面,在这个页面中可以约束输入信号的时序。

在这个页面中,左上角表明了系统中使用的时钟的信息。若有多个时钟,则可以选择输入信号建立相关的时钟。在Input pad timegroup/net中,可以选择要指定约束的目标端口。若没有对信号合并分组,就选择input pad net,然后选择需要约束的输入管脚即可。画红色*号的必须指定的地方,会有External setup time,此即为需要设置的offset in 约束。通过计算外部器件输出时序以及电路板上延时之后,设计者可以在此指定一个值,表示的是输入端口信号建立时间与时钟信号有效边沿的延时。
仿照上面OFFSET IN的设置,读者可以设置OFFSET OUT的约束。它约束的是输出端口信号与参考时钟有效边沿之间的延时关系。其数值需要查阅下一级芯片输入数据时钟的建立关系及电路板上时钟,信号线延时关系计算获得。
约束了设计中使用的时钟,同时约束了输入输出端口的时序之后,整个设计的约束就是完整的。但完整的约束不一定是正确的,过于严格的约束会挤占布局布线的资源从而造成无法进行最优布线。所以还需要对一些不必要的,过于严格的约束进行时序例外的声明。这些读者可以通过尝试软件工具及阅读软件用户手册来学习。
下面是PlanAhead Post synthesis工具启动后设置时序约束的页面。

从上图可以看出这里的时序约束包括了Clk period,Pad-clk offset,pathdelay,Time group,False path以及off chip delay等项。双击其中的任何一项可以出现下图所示的对话框:

这个对话框列出了所有能够设置的时序约束,这里的约束设置比Creat Timing Constrain工具更加简洁,如图中所示,在选择了Input pad to clk offset 之后,右边出来的界面中,选择data arrival为Before clock,时钟选择的clk为系统时钟,有效边沿选择上升沿,勾选Delay value,设置为2ns。Pad net勾选后可以选择需要设置的端口名称。这样的设置与前文所述的Creat Timing Constrain工具约束输入端口时序是一致的。可见这个工具会更加简洁。
ISE下查看时序结果
查看时序报告时,在ISE工具下也有多种方式。比如,在ISE工具下可以选择Timing,然后在出现的对话框选择run analysis。会出现下图所示界面。在这个界面中可以选择需要分析的pad, net或者是寄存器(Flip-Flop)。这样工具会给出你选择的路径的时序分析报告。

或者不选择分析的具体内容,而是直接在tools下选择Timing Analyzer,或者是在Place&Route下选择Generatepost-Place&Route Static Timing下面的Analyze post-Place&Route Static Timing,都会出现一个以工程头文件命名的后缀为twx的一个报告框,这里面将包含设计的时序信息。
结论
1、FPGA模块之间的信号输入、输出,在时间允许的情况下,都可以使用寄存器打一拍在使用/或者送到下级模块。
参考
作者 | 博文 |
1、 | FPGA Timing笔记 |
2、Reborn Lee | Vivado 随笔(6) Timing Summary 相关讨论(一) |
3、天一涯 | 在ISE下分析和约束时序 |
4、 |