登录后可下载相关资料

中科亿海微EDA工具时序约束功能使用

发布日期:2022-10-12 作者:封测工程部 武浩然

时序分析又叫静态时序分析,它主要是从FPGA设计实现的角度出发得出结论,看所期望的逻辑功能是否能够被目前工艺条件下的某款具体FPGA芯片所实现,与功能仿真类似,时序分析对于任何一个项目的开发来说几乎都是必须的。

1. 基本时序检查

1) 发送沿:指发送数据的源时钟的活动边沿。

2) 捕获边沿:指捕获数据的目的时钟的活动边沿。

3) 源时钟:指发送数据的时钟。

4) 目的时钟:指捕获数据的时钟。

5) 建立要求:指定义了最苛刻建立约束的发送沿和捕获沿之间的关系。

6) 建立关系:指由时序分析工具验证的建立检查。

7) 保持要求:指定义了最苛刻保持约束的发送沿和捕获沿之间的关系。

8) 保持关系:指由时序分析工具验证的保持检查。

2. 建立时间(Setup Time)

是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,即在CLK上升沿来之前,数据必须提前一个最小时间量预先准备好。

3. 保持时间(Hold Time)

是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,即在CLK上升沿到来之后,数据必须保持一个最小时间量不能变化。

4. D触发器介绍

1665543676775999.jpg

1) Tsu:建立时间,时钟信号边沿到来之前,端口D上的数据持续稳定不变的时间;

2) Th:保持时间,与建立时间相对应,保持时间是指在有效的时钟边沿信号到来之后,端口D上的数据保持稳定不变的时间;

3) Tco:时钟至输出延迟,当寄存器CLK端口的时间信号与D端口的数据信号的时序关系满足建立时间和保持时间要求时,Tco指的就是从时钟有效边沿到达寄存器开始,到端口Q上稳定得到D端口采样的时间。

5. 时序分析原理

对于一个FPGA设计,在获得了对应的各种时间参数、时间延迟,就可以利用对应的静态时序分析工具来对其进行时序分析工作。

下面以“如何通过人脑来进行时序分析”案例来进行详细说明。

1665458710346416.jpg

1) 寄存器R1、R2、R3的参数一致,其建立时间要求为2ns,保持时间要求为1ns,Tco均为1.5ns;

2) 时钟信号从输入管脚到达各个寄存器的时间具有一定差别,其中skew1、skew2、skew3、skew4分别为4ns、3ns、5ns、6ns;

3) 所有数据线的线延迟Tline均为2ns;

4) 非门的门延迟为2ns,与门的门延迟为3ns;

5) 输入时钟CLKIN为50MHz理想时钟,输入数据D1、D2的采样率也为50MHz,它们的slew rate均为理想情况(无穷大),并且时钟的有效边沿上升沿对齐数据的中心;

6) 输出端要求数据Q相对于CLKOUT的上升沿至少具有3ns的建立时间和2ns的保持时间。

6.分析电路

上述FPGA电路能否正常工作取决于两个条件:第一,其内部的各个寄存器能否正常工作;第二,Q与CLKOUT的关系能否满足后级电路的要求。如果再细分,FPGA芯片能否正常工作取决于三个条件:第一,能否正确地采集外部数据;第二,FPGA内部能否正确地处理数据;第三,FPGA的输出是否满足后级电路的要求。

对于三个条件的划分方法,条件一和条件三尽管数据流方向不同,但其共性都是跟外界打交道,因此可以综合称之为FPGA的接口条件。相对应的,条件二可称之为内部时钟条件。

首先,为整个FPGA设计指定参考0时刻,并令0时刻时,CIKIN处正好迎来一个时钟的上升沿。

由于本例电路中的寄存器在每个时钟有效边沿时刻所面临的工作状态都是一样的,因此,对于每一个寄存器以及后级电路,只需要分析1个边沿情況即可。那么,以0时刻的时钟上升沿为参考,对于寄存器R1来说,有效时钟上升沿传递到其时钟端口的时间是0ns+skew1=4ns,显然,正常工作时,它是应该正确采样到D1端口从-10ns持续到10ns的数据符号。由于2ns线延迟的影响,导致R1的D端口上对应的数据稳定区间应该是-8ns~12ns。据此可以求出寄存器R1的建立时间和保持时间如下:

Tsu = 4 - (-8) = 12ns

Th = 12 -4 = 8ns

由于Tsu >= 2ns、Th >= 1ns,故R1可以正常工作。

7. 时序约束语句

对于所有的时序路径,我们都要明确其起点和终点,这4类时序路径的起点和终点分别如下表所示。

时序路径应用约束
(1)输入端口到FPGA内部第一级触发器的路径set_input_delay
(2)FPGA内部触发器之间的路径create_clock
(3)FPGA内部末级触发器到输出端口的路径set_output_delay
(4)FPGA输入端口到输出端口的路径set_max_delay

8. 时序模型

典型的时序模型如下图所示。一个完整的时序路径包括源时钟路径、数据路径和目的时钟路径,也可以表示为触发器+组合逻辑+触发器的模型。

1665542791751173.png

该时序模型的要求(公式)为:

Tclk ≥ Tco + Tlogic + Trouting + Tsetup - Tskew

其中,Tco为发端寄存器时钟的输出时间;Tlogic为组合逻辑延迟;Trouting为两级寄存器之间的布线延迟;Tsetup为收端寄存器建立时间;Tskew为两级寄存器的时钟歪斜,其值等于时钟同边沿到达两个寄存器时钟端口的时间差;Tclk为系统所能达到的最小时钟周期。时序关系如下图所示。

1665544931929574.png

在公式中,Tco跟Tsu一样,也取决于芯片工艺,因此,一旦芯片型号选定就只能通过Tlogic和Trouting来改善Tclk。其中,Tlogic和代码风格有很大关系,Trouting和布局布线的策略有很大关系。

9.时序约束

延迟约束:延迟约束用的是set_input_delay和set_output_delay,分别用于input端和output端,其时钟源可以是时钟输入管脚,也可以是虚拟时钟。但需要注意的是,这两个约束并不是起延迟作用,具体原因分析如下。

inputDelay(max) = Tco(max) + TD(max)

inputDelay(min) = Tco(min) + TD(min)

1665546884279246.png

T_inputdelay = Tco + TD当满足图中的时序时,最大延迟为2ns,最小延迟为1ns。因此,需要加的时序约束为:

9.1.png

1) 时钟周期约束使用create_clock来创建时钟周期约束。使用方法为:

9.3.png

参数含义
-name时钟名称
-period时钟周期,单位为ns
-waveform波形参数,第一个参数为时钟的第一个上升沿时刻,第二个参数为时钟的第一个下降沿时刻
-add在同一时刻源上定义多个时钟时使用

这里的时钟必须是主时钟primary clock,主时钟通常有两种情形:一种是时钟由外部时钟源提供,通过时钟引脚进入FPGA,该时钟引脚绑定的时钟为主时钟;另一种是高速收发器(GT)的时钟RXOUTCLK或TXOUTCLK。

9.9.png

当系统中有多个主时钟,且这几个主时钟之间存在确定的相位关系时,需要用到-waveform参数。

2)  时钟约束为:

9.4.png

最大/最小延迟约束: 顾名思义,就是设置路径的max/min delay,主要应用场景有两个,①输入管脚的信号经过组合逻辑后直接输出到管脚;②异步电路之间的最大最小延迟。

9.6.png

参数含义
-from

有效的起始节点包含:时钟、input(input)端口或时序单元(寄存器,RAM)的时钟引脚。

-to有效的终止节点包含:时钟、output(inout)端口或时序单元的数据端口。
-through有效的节点包含:引脚、端口、线网。

多周期路径约束:在周期性约束的作用下,时序分析工具会认为该时钟域内寄存器的输出在每个时钟事件的到来都会发生变化,因此,理想情况下每个寄存器的保持时间均为一个时钟周期。可有时候,FPGA设计的功能特征决定前级寄存器需要经历多个时钟周期后才会发生变化,这样一来,如果仅仅对该时钟域添加周期约束,显然对这部分电路是过约束了。如果这部分电路的逻辑比较简单,过约束并不会带来什么大问题,但如果这部分电路的逻辑比较复杂,过约束很可能会导致时序分析的时候不通过。因此,为了能够正确地对这部分逻辑添加时序约束,需要使用多周期路径约束。多周期约束的语句如下所示。

1665544461765661.png

参数含义
num_cycles [-setup|-hold]建立/保持时间的周期个数
[-start|-end]参数时钟选取
-from发起点
-to捕获点
-through经过点

伪路径约束:如果两个时钟之间并不相关,默认情况下,时序分析工具是不会对这种跨时钟域情況进行分析的。但当它们之间又确实有着信息传递,而又关心其中的一些时间延迟时,可以使用跨时钟域路径约束也可以设置成伪路径(不观察)。伪路径的约束为:

9.7.png

-from的节点应是有效的起始点,有效的起始点包含时钟对象,时序单元的clock引脚,或者input(or inout)原语;

-to的节点应包含有效的终节点,一个有效的终节点包含时钟对象,output(or inout)原语端口,或者时序功能单元的数据输入端口;

-through的节点应包括引脚、端口或线网。当单独使用-through时,应注意所有路径中包含-through节点的路径都将被时序分析工具所忽略。

两个主时钟约束成异步时钟:

9.8.png

约束语句实在太多,这里只列出了一些经常使用的约束语句,使用其他约束语句可以自行查找。

10.EDA工具使用

以一个时序比较差的案例作为实验对象。

1) 建立时间的最差路径

建立时间(Setup)保持时间(Hold)
最差的一个:-7.066ns最差的一个:-996.899ns
总共差:-689.526ns总共差:-165066.016ns

10.1.jpg

2)  进行时序分析

10.2.jpg

如下图所示,打开红点文件夹(时序不满足)。

Intra-ClockPaths:同步时钟域;

Inter-ClockPaths:异步时钟域;

OtherPath Groups:其他路径(异步时序)。

1663912475596928.png

如下图所示,图中的最差路径可以从上到下开始查看,可以最大程度上的优化。开启一个进行分析:从From(起始路径)到To(终点路径)。

10.4.png

路径分析:

      u_ad9851:模块名称;

      delay_done_reg:寄存器信号名称;

      regout:输出标志。

10.5.png

模块查看:

10.6.png

delay_done的起始从ad9851至终点si5332使用如下图所示。

10.7.png

对delay_done信号做了判断,如下图所示。

1663922934793597.png

时序优化:

①减少组合逻辑的使用,尽量使用时序完成操作。

②减少if else的使用,尽量使用case来完成操作。

优化完成后在此进行了时序分析,发现刚才的最差路径已经更换成了别的路径。以此类推至上往下进行优化,可以大幅度提升程序的稳定性。

10.9.png

上述描述是分析同步时钟域下的时序情况,下述内容是分析异步时钟域下的时序情况(原理类似,只是需要考虑亚稳态产生)。

路径分析:打开第一条最差路径进行分析。

10.10.png

10.11.png

模块查看:pos_cnv_pos_o的信号是在50M下进行的赋值,而它却是在dco_pos_i的上升沿使用,所以产生了时序不满足的情况。


1663922967435660.png

1665557519198884.png

时序优化:使用寄存器打两拍,或者使用FIFO、RAM进行缓存。

10.14.png

异步时钟域全部满足。

10.15.png

在做时序分析之前,建议大家做好程序的流水线,减少时序不满足的同时也可以有效避免亚稳态的产生,还可以加快综合的速度,减少cpu的负载。

11. 时序收敛的手段

1) 逻辑简化和结构调整[程序设计--->编程思路--->时空变换--->时空变换之时域优化 --->分布调整]。

2) 缓存降频、逻辑拆分、流水线、使能链、模块输入输出寄存器处理。

3) 时钟上树:时钟树存在的意义就是要尽量保证时钟到达各个寄存器的延时差(skew)尽可能地小,这也是为什么通常FPGA设计的建立时间跟时钟周期密切相关,但保持时间却不受其影响。但是一旦在使用时钟信号之前忘记让它先通过时钟树网络,则时钟信号到达各个寄存器的路径长短便不可控,由于此时时钟、数据都是通过最基本的布线资源进行布线的,从而很可能会出现时钟延迟差大于路径延时的情况(也就是常说的数据传得比时钟还快),这样一来,便容易出现保持时间不足的时序冲突情况。对于内部时钟域来说,保持时间不足主要是由于时钟信号没有上树,因此当出现这类问题时,首先应该仔细检查一下是否正确地使用了时钟信号,而对于接口部分的保持时间不足,则依赖于数据和时钟的原始(或理想)相位差,以及时钟即数据的延迟差,不属于此范畴。

4) 改变设计思路:改变设计思路是解决时序冲突问题的一把双刃剑,它也许可以解决所有的时序冲突问题,但也许会带来更令人头痛的问题(不仅仅限于新的时序冲突问题,还可能带来功能仿真资源占有率等方面的问题)。总之,如果己经竭尽全力还不能让当前设计或设计中的某个模块达到时序收敛,那么不妨试试换个思路重新编写某个模块或某个算法,也许会带来意想不到的效果。

5) 手动布局布线:如果对编译器完成的布局、布线结果不满意,可以尝试通过人工干预或调整布局、布线的手段来达到时序约束的收敛。具体做法就是打开编译器中的布局、布线工具,然后通过拖拽的方式改变寄存器、查找表等资源在FPGA芯片中的位置,进而也改变原有的布线情况,这样一来相关的路径延迟也会发生改变,从而有可能会产生比较好的结果。不过这种方法由于其不具有继承性和可重复性,所以往往不推荐优先使用。

微信图片_20220902104723.png


引用作品:FPGA之道

著者:狄超  刘萌

责任编辑:杨璠

出版发行:西安交通大学出版社


引用作品:综合与时序分析的设计约束

著者:[美]斯里达尔·甘加达兰(Sridhar Gangadharan)  [印度]桑杰·丘里瓦拉(SanjayChuriwala)

翻译:韩德强  张丽艳  王宗侠

出版发行:机械工业出版社


引用作品:Xilinx可编程逻辑器件应用与系统设计

责任编辑:周琰

特约编著:寇国华

出版发行:电子工业出版社


引用作品:Xilinx FPGA特权设计指南

责任编辑:张迪

出版发行:电子工业出版社


引用作品:深入浅出玩转FPGA

编著:吴厚航

出版发行:北京航空航天大学出版社

返 回

请您注册,

获得更多的资源与支持!

  • 使用条款与条件
  • 法律声明
  • 浏览记录