FPGA 静态时序分析与约束(1)

项目总结

静态时序分析是指我们手动或者EDA工具按照芯片寄存器、查找表、内部连线所需要的固定的时间分析时序路径是否有违例的情况,并进行相应的约束。既然有静态时序分析,那么肯定有动态时序分析。动态时序分析也就是我们常说的后仿真,在实际中很少用到。静态时序分析一定要把握好以下前提:

1、静态时序分析时一定要绑好FPGA的引脚,否则布局布线没有意义,那么时序分析便是错误的。

2、静态时序分析是寄存器到寄存器之间的分析。

3、分析建立时间使用慢速模型、分析保持时间使用快速模型。

我们将会写一些列的时序分析博客,首先总结时序分析的原理,包括建立时间、保持时间、输入输出延迟。对与输入输出延迟又可以分为边沿对齐、中心对齐、SDR传输、DDR传输几种情况。然后我们将总结Quartus II 、ISE、Vivado软件的时序分析与约束方法。

时序分析与约束的意义

时序分析:时序分析的目的是通过分析FPGA设计中各个寄存器之间的数据和时钟传输路径,来分析寄存器的建立时间、保持时间等等是需要求是否满足。

时序约束:1、告诉EDA软件设计需要满足什么样的时序指标,然后EDA软件会根据时序约束的各个参数,尽力布局布线,以达到该约束的指标。
2、协助EDA软件进行分析设计时序路径,以产生相应的时序报告。

FPGA内部时序约束

建立时间分析

常见的FPGA内部的时序分析模型如下:
在这里插入图片描述
时序模型如下:
在这里插入图片描述

接下来我们将对上面的定义进行说明:

Launch Edge :时钟的数据发射沿
Latch Edge :时钟数据的锁存沿,一般与发射沿相差一个时钟周期
DFF :D触发器
IC :内部走线延迟
LUT :查找表
Tclk1 :时钟从时钟源端口出发 到 源寄存器时钟端口的时间
Tclk2 :时钟从时钟源端口出发 到 目的寄存器时钟端口的时间
Tsu :D触发的建立时间,目标寄存器自身的特性决定。D触发器的D端口的数据必须比时钟 上升沿提前到达D触发器端口的时间
Tco :时钟上升沿到达D触发器 到 数据输出到Q端的延迟
Tdata :寄存器1的Q端 到 寄存器2D端的延迟
Tskew :Tclk2-Tclk1,时钟从时钟源端口出发 到 两个寄存器时钟端口的时间偏差。
Setup Slack :建立时间余量。从上面的时序分析,我们可以知道建立时间余量的公式:
S e t u p   S l a c k = T c l k 2 + T c y c l e − T s u − ( T c l k 1 + T c o + T d a t a ) Setup\ Slack=Tclk2+Tcycle-Tsu-(Tclk1+Tco+Tdata) Setup Slack=Tclk2+TcycleTsu(Tclk1+Tco+Tdata)
如果建立时间为正值,则说明建立时间满足要求否则不满足要求
Data Arrival Time :数据到达时间。数据到达寄存器2的时间:
D a t a   A r r i v a l   T i m e = T c l k 1 + T c o + T d a t a Data\ Arrival\ Time=Tclk1+Tco+Tdata Data Arrival Time=Tclk1+Tco+Tdata
Data Require Time:数据要求到达时间。数据只有在要求到达的时间之前到达,时序的建立时间才会,满足要求:
D a t a   R e q u i r e   T i m e = T c l k 2 + T c y c l e − T s u Data\ Require\ Time=Tclk2+Tcycle-Tsu Data Require Time=Tclk2+TcycleTsu
从上面我们可以看出:
D a t a   A r r i v a l   T i m e = D a t a   R e q u i r e   T i m e − D a t a   A r r i v a l   T i m e Data\ Arrival\ Time=Data\ Require\ Time-Data\ Arrival\ Time Data Arrival Time=Data Require TimeData Arrival Time

From Node :起点,源寄存器
To Node :终点,目标寄存器
Launch Clock :源寄存器发射数据的时钟
Latch Clock :目的寄存器接收数据的时钟
Relationship :Latch Clock 与 Launch Clock的时钟差值
Clock Pessimism :时钟悲观。因为Data Require Time按照最短的路径计算,Data Arrival Time按照最长的路径计算,所以会产生过分严格的现象,所以实际计算中会产生这个补偿(该值会被算入数据需要时间Data Require Time)
Clock Uncertainty :时钟不确定度。因为时钟知量的原因会产生相应的不确定度。

FPGA内部过滤信号的选项:
Cell:LUT组合逻辑单元、IO_BUF、CLKCTRL、reg
keeper:写代码的过程中定义的各种信号名称。
Pin:Cell的输入输出端口
Ports:整个设计顶层的输入输出和双向端口
Register:整个设计中存在的物理寄存器类型的cell

下面以一个V3学院的例子来进一步讲解建立时间的概念:
已知:Tcycle = 10ns;Pin2PLL=2ns;Pin2clk1=3ns;Pin2clk2=2ns;Tdata=3ns;Tsu=0.5ns;Tco=1ns;问:Setup Slack = ? Fmax = ?
解 :由建立时间的公式可知:
S e t u p   S l a c k = T c l k 2 + T c y c l e − T s u − ( T c l k 1 + T c o + T d a t a ) Setup\ Slack=Tclk2+Tcycle-Tsu-(Tclk1+Tco+Tdata) Setup Slack=Tclk2+TcycleTsu(Tclk1+Tco+Tdata)
S e t u p   S l a c k = 2 + 10 − 0.5 − ( 3 + 3 + 1 ) = 4.5 n s Setup\ Slack=2+10-0.5-(3+3+1)=4.5ns Setup Slack=2+100.5(3+3+1)=4.5ns
所以由建立时间余量与周期之间的关系,得:
F m a x = 1 10 − 4.5 = 182 M H z Fmax=\frac{1}{10-4.5}=182MHz Fmax=104.51=182MHz
相信大家经过上面的讲解,对FPGA建立时间的概念有了较好的理解。

保持时间

常见的FPGA内部的时序分析模型如下:
在这里插入图片描述
时序模型如下:
在这里插入图片描述
上面每个时间的概念与建立时间中的完全相同,这里再引入保持时间独有的时间概念:
Require finish time:数据需要结束时间,为了使得保持时间满足要求,数据需要的结束时间:
R e q u i r e   f i n i s h   t i m e = T c y c l e + T c l k 2 + T h Require\ finish\ time=Tcycle+Tclk2+Th Require finish time=Tcycle+Tclk2+Th
Data finish time:数据结束时间。数据实际结束的时间。
D a t a   f i n i s h   t i m e = T c y c l e + T c l k 1 + T c o + T d a t a Data\ finish\ time=Tcycle+Tclk1+Tco+Tdata Data finish time=Tcycle+Tclk1+Tco+Tdata
Hold Slack:保持时间余量。从上面的时序分析,我们可以知道建立时间余量的公式:
H o l d   S l a c k = T c l k 1 + T c o + T d a t a − ( T c l k 2 + T h ) Hold\ Slack=Tclk1+Tco+Tdata -(Tclk2+Th) Hold Slack=Tclk1+Tco+Tdata(Tclk2+Th)

这里从建立时间的余量公式可以看出,建立时间的分析与时钟的工作频率无关,只与寄存器本身的特性有关。而且,一般FPGA内部的保持时间都会满足。

这里为了加深理解,下面以一个V3学院的例子来进一步讲解建立时间的概念:
已知:Tcycle = 10ns;Pin2PLL=2ns;Pin2clk1=3ns;Pin2clk2=2ns;Tdata=3ns;Th=0.5ns;Tco=1ns;问:Hold Slack = ? Fmax = ?
解:由保持时间的公式可知:
H o l d   S l a c k = T c l k 1 + T c o + T d a t a − ( T c l k 2 + T h ) Hold\ Slack=Tclk1+Tco+Tdata -(Tclk2+Th) Hold Slack=Tclk1+Tco+Tdata(Tclk2+Th)
H o l d   S l a c k = 3 + 1 + 3 − 2 − 0.5 = 4.5 n s Hold\ Slack=3+1+3-2-0.5=4.5ns Hold Slack=3+1+320.5=4.5ns
F m a x Fmax Fmax的计算与 H o l d S l a c k Hold Slack HoldSlack无关,只与建立时间余量有关,所以这个小题没法计算。

IO约束

首先要明白为什么要进行IO约束,因为FPGA内部的约束对于源寄存器与目的寄存器都很明确。但是输入时,我们不清楚源寄存器的时钟与数据路径;输出时,我们不清楚目的寄存器的建立时间保持时间。综上所述,我们需要进行IO约束去告诉FPGA这些信息,进而让EDA软件去帮助我们分析M

Input Delay分析

所谓的Input Delay约束就是告诉EDA软件两个输入值,分别是Input Delay Max与Input Delay Min。那么这两个值究竟咋么得到呢?我们将从定义与推导的两个方面来进行讲解。
仿真模型如下:
在这里插入图片描述
仿真模型得时序图如下:
在这里插入图片描述

这个例子是V3学院公开课中讲解的例子。
定义1:input delay:我们在EDA软件中设置的input delay的值是以FPGA为中心,数据到达FPGA与时钟沿到达FPGA时间的差值。
由上面的定义,我们便可以得到input delay值得定义:
i n p u t   d e l a y ( F P G A 为 中 心 ) = 数 据 到 达 时 间 ( F P G A 引 脚 ) − 时 钟 到 达 时 间 ( F P G A 引 脚 ) input\ delay(FPGA为中心) =数据到达时间(FPGA引脚)-时钟到达时间(FPGA引脚) input delay(FPGA)=FPGAFPGA
i n p u t   d e l a y ( F P G A 为 中 心 ) = T c o + T d _ b d − T c d − T c _ b d input\ delay(FPGA为中心) =Tco+Td\_bd-Tcd-Tc\_bd input delay(FPGA)=Tco+Td_bdTcdTc_bd
其实对于大多数PCB板做了等长处理,所以一般 T d b d Tdbd Tdbd T c b d Tcbd Tcbd相等,而且 T c o − T c d Tco-Tcd TcoTcd在上游器件得技术手册中是给出得,一般命名为 T c o Tco Tco,那么对于PCB板做了等长处理得器件,可以得下式:
i n p u t   d e l a y   m a x = T c o ( m a x ) input\ delay\ max=Tco(max) input delay max=Tco(max)
i n p u t   d e l a y   m i n = T c o ( m i n ) input\ delay\ min=Tco(min) input delay min=Tco(min)
所以对于PCB做了等长处理的电路,我们只需要进行查找技术手册找到相应的Tco即可。其实我们可以查看EDA的时序分析路径,可以发现所谓的input delay max与input delay min分别在分析建立时间与保存时间的路径分析中被使用。

接下来我们将引入小梅哥的例子进行进一步的讲解,其实本质上都一样:
在这里插入图片描述
整个推导过程将以截图的形式给出,这里版权问题,想知道具体的推导过程可以购买小梅哥的课程,但是上面从定义的角度,博客中已经把输入延迟的概念讲解清楚,其实殊途同归,这里只是认为小梅哥中的例子非常好,所以又重新给出:
公式推导过程:
在这里插入图片描述
在这里插入图片描述
利用上面对输入寄存器保存时间和建立时间的分析,如下:
在这里插入图片描述
其实这里认为小梅哥的分析虽然很精彩,但是有点冗余,不如从定义来着手。
在这里插入图片描述
从上面我们可以看出,两种分析方法得到的最终结果都是一样的。经过上面两个例子的讲解,相信可以了解输入时间延迟的概念。

其实在PCB做了等长处理之后,所谓的输入最大最小延迟就是上游器件Tco的最大值最小值。

Output Delay分析

为什么要设置输出延迟,因为我们得保证下游器件得建立时间和保存时间,使得下游器件成功操作。因为如果我们不建立输出延迟,那么有时候很难满足下游器件得建立时间与保持时间。这样做有两个目的:
1、告诉FPGA输出的时候需要满足的数据与时钟的延迟。
2、使得EDA工具可以计算是否存在时序违例。
定义2:output delay:FPGA的输出采样沿时钟与输出数据稳定情况下的时间差,必须同时满足最大值与最小值。也就是说至少在output delay的时间内输出数据在采样沿的周围是稳定的
从上面的定义,我们便可以知道output delay两个值的设置依据(在PCB时钟走线与数据走线等长的情况下):
o u t p u t   d e l a y   m a x = T c o output\ delay\ max=Tco output delay max=Tco
o u t p u t   d e l a y   m i n = − T h output\ delay\ min=-Th output delay min=Th

上面是从定义的角度出发,下面我们继续使用小梅哥的例子说明上面的正确性:
输出延迟的模型如下:
在这里插入图片描述
输出模型的时序图如下:
在这里插入图片描述
由上图中时序参数的描述为:
在这里插入图片描述
对上面的模型进行建立时间余量与保持时间余量的建模如下:
在这里插入图片描述
在这里插入图片描述
由上面的时序参数可知输入输出最大最小延迟如下:
在这里插入图片描述
其实进行了那么严格的推导,最终得出的结果与我们从原始定义中得到的结果一样。

时序约束注意点

1、如果用户没有对时钟信号加约束,软件就会自动对分析出的时钟加入约束,之歌时钟会按照最大的来约束,也就是设置时钟频率为1GHz。按照最坏的情况来进行约束。
2、有时候在时序分析的过程中会发现Tsu为负值的情况,这是正常的,因为Tsu是内部一系列时序的叠加,是有出现负值的可能性。

参考文献

[1]、小梅哥——时序分析课程
[2]、V3学院

总结

接触了FPGA已经两年时间,直到现在才敢说自己掌握了静态时序分析,学习过程可以说非常坎坷,因为当时的学习资料太少。后面的文章,我们将介绍Quartus II与Vivado的时序工具的使用。上面文章的学习途径在参考文献中已经给出。创作不易,认为文章有帮助的同学们可以关注、点赞、转发支持。为行业贡献及其微小的一部分。或者对文章有什么看法或者需要更近一步交流的同学,可以加入下面的群:
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值