项目总结
静态时序分析是指我们手动或者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+Tcycle−Tsu−(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+Tcycle−Tsu
从上面我们可以看出:
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 Time−Data 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+Tcycle−Tsu−(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+10−0.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=10−4.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+3−2−0.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为中心)=数据到达时间(FPGA引脚)−时钟到达时间(FPGA引脚)
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_bd−Tcd−Tc_bd
其实对于大多数PCB板做了等长处理,所以一般
T
d
b
d
Tdbd
Tdbd与
T
c
b
d
Tcbd
Tcbd相等,而且
T
c
o
−
T
c
d
Tco-Tcd
Tco−Tcd在上游器件得技术手册中是给出得,一般命名为
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的时序工具的使用。上面文章的学习途径在参考文献中已经给出。创作不易,认为文章有帮助的同学们可以关注、点赞、转发支持。为行业贡献及其微小的一部分。或者对文章有什么看法或者需要更近一步交流的同学,可以加入下面的群: