大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
今天给大侠带来FPGA STA(静态时序分析),话不多说,上货。
一、概述
1.1 概述
在快速系统中FPGA时序约束不止包含内部时钟约束,还应包含完整的IO时序约束和时序例外约束才能实现PCB板级的时序收敛。因此。FPGA时序约束中IO口时序约束也是一个重点。仅仅有约束正确才能在快速情况下保证FPGA和外部器件通信正确。
?
1.2 FPGA总体概念
因为IO口时序约束分析是针对于电路板整个系统进行时序分析,所以FPGA需要作为一个总体分析,当中包含FPGA的建立时间、保持时间以及传输延时。传统的建立时间、保持时间以及传输延时都是针对寄存器形式的分析。针对整个系统FPGA的建立时间保持时间能够简化。下图为FPGA总体时序图:
如图上图所示,分解的FPGA内部寄存器的性能參数:
(1) Tdin为从FPGA的IO口到FPGA内部寄存器输入端的延时;
(2) Tclk为从FPGA的IO口到FPGA内部寄存器时钟端的延时;
(3) Tus/Th为FPGA内部寄存器的建立时间和保持时间;
(4) Tco为FPGA内部寄存器传输时间;
(5) Tout为从FPGA寄存器输出到IO口输出的延时。
对于整个FPGA系统分析,能够又一次定义这些參数:FPGA建立时间能够定义为:
(1) FPGA建立时间:FTsu = Tdin Tsu – Tclk;
(2) FPGA保持时间:FTh = Th Tclk。
(3) FPGA传输数据时间:FTco = Tclk Tco Tout;
由上分析当FPGA成为一个系统后就可以进行IO时序分析了。FPGA模型变为如下图所示,为FPGA系统参数:
?
1.3 输入最大最小延时
外部器件发送数据到FPGA系统模型如图1.3所看到的。
对FPGA的IO口进行输入最大最小延时约束是为了让FPGA设计工具可以尽可能的优化从输入port到第一级寄存器之间的路径延迟,使其可以保证系统时钟可靠的採到从外部芯片到FPGA的信号。下图为FPGA数据输入模型:
输入延时即为从外部器件发出数据到FPGA输入port的延时时间。
当中包含时钟源到FPGA延时和到外部器件延时之差、经过外部器件的数据发送Tco。再加上PCB板上的走线延时。如图1.4所看到的,为外部器件和FPGA接口时序。下图为外部器件和FPGA接口时序:
(1). 最大输入延时
最大输入延时(input delay max)为当从数据发送时钟沿(lanuch edge)经过最大外部器件时钟偏斜(Tclk1),最大的器件数据输出延时(Tco),再加上最大的PCB走线延时(Tpcb)。减去最小的FPGA时钟偏移(FTsu)的情况下还能保证时序满足的延时。这样才能保证FPGA的建立时间,准确采集到本次数据值,即为setup slack必须为正。如图1.1的所看到的。计算公式如下所示:
Setup slack =(Tclk Tclk2(min))–(Tclk1(max) Tco(max) Tpcb(max) FTsu)≥0
推出以下公式:
Tclk1(max) Tco(max) Tpcb(max) –Tclk2(min) ≤ Tclk FTsu
由Altera官方数据手冊得知:
input delay max = Board Delay (max) – Board clock skew (min) Tco(max)
结合本系统參数公式为:
input delay max = Tpcb(max) – (Tclk2(min)–Tclk1(max)) Tco(max)
(2). 最小输入延时
最小输入延时(input delay min)为当从数据发送时钟沿(lanuch edge)经过最小外部器件时钟偏斜(Tclk1),最小器件数据输出延时(Tco),再加上最小PCB走线延时(Tpcb),此时的时间总延时值一定要大于FPGA的最大时钟延时和建立时间之和。这样才能不破坏FPGA上一次数据的保持时间。即为hold slack必须为正,如图1.1的所看到的,计算公式例如以下式所看到的:
Hold slack=(Tclk1(min) Tco(min) Tpcb(min))–(FTh Tclk2(max))≥ 0
推出例如以下公式:
Tclk1(min) Tco(min) Tpcb(min)–Tclk2(max) ≥ FTh
由Altera官方数据手冊得知:
input delay max = Board Delay (min) - Board clock skew (min) Tco(min)
结合本系统參数公式为
input delay max=Tpcb(min) – (Tclk2(max)–Tclk1(min)) Tco(min)
进行输入最大最小延时的计算,我们需要估算4个值:
- 外部器件输出数据通过PCB板到达FPGAport的最大值和最小值Tpcb,PCB延时经验值为600mil/ns。1mm = 39.37mil;
- 外部器件接收到时钟信号后输出数据延时的最大值和最小值Tco。
- 时钟源到达外部器件的最大、最小时钟偏斜Tclk1;
- 时钟源到达FPGA的最大、最小时钟偏斜Tclk2;
当外部器件时钟为FPGA提供的时候。Tclk1和Tclk2即合成Tshew,如图下图所示,为FPGA输出时钟模型:
?
1.4 输出最大最小延时
FPGA输出数据给外部器件模型如下图所示。对FPGA的IO口进行输出最大最小延时约束是为了让FPGA设计工具可以尽可能的优化从第一级寄存器到输出port之间的路径延迟。使其可以保证让外部器件能准确的採集到FPGA的输出数据。下图为FPGA输出延时模型:
输出延时即为从FPGA输出数据后到达外部器件的延时时间。
当中包含时钟源到FPGA延时和到外部器件延时之差、PCB板上的走线延时以及外部器件的数据建立和保持时间。如图所看到的,为FPGA和外部器件接口时序图。下图为FPGA输出延时:
(1). 最大输出延时
由Altera官方数据手冊得知:
Output delay max = Board Delay (max) – Board clock skew (min) Tsu
由公式得知。最大输出延时(output delay max)为当从FPGA数据发出后经过最大的PCB延时、最小的FPGA和器件时钟偏斜,再加上外部器件的建立时间。约束最大输出延时,是为了约束IO口输出,从而使外部器件的数据建立时间。即为setup slack必须为正,计算公式例如以下式所看到的:
Setup slack =(Tclk Tclk2(min))–(Tclk1(max) FTco(max) Tpcb(max) Tsu)≥0
推导出例如以下公式:
FTco(max) Tpcb(max) –(Tclk2(min) – Tclk1(max)) Tsu ≤Tclk
再次推导,得到例如以下公式:
FTco(max) Output delay max ≤Tclk
由此可见,约束输出最大延时。即为通知编译器FPGA的FTco最大值为多少。依据这个值做出正确的综合结果。
(2). 输出最小延时
由Altera官方数据手冊得知:
Output delay min = Board Delay (min) – Board clock skew (max) –Th
由公式得知,最小输出延时(output delay min)为当从FPGA数据发出后经过最小的PCB延时、最大的FPGA和器件时钟偏斜,再减去外部器件的建立时间。约束最小输出延时,是为了约束IO口输出。从而使IO口输出有个最小延时值,防止输出过快,破坏了外部器件上一个时钟的数据保持时间。导致hlod slack为负值。不能正确的锁存到数据。最小输出延时的推导计算公式例如以下式所看到的:
Hold slack = (Tclk1(min) FTco(min) Tpcb(min))–(Th Tclk2(max))≥ 0
推导出例如以下公式:
FTco(min) Tpcb(min) – (Tclk2(max) – Tclk1(min))– Th ≥ 0
再次推导,得出例如以下公式:
FTco(min) Output delay min ≥ 0
由公式得知,约束输出最大延时,即为通知编译器FPGA的FTco最小值为多少。依据这个值做出正确的综合结果。
由公式得知,进行输出最大最小延时的计算,我们需要估算4个值:
- FPGA输出数据通过PCB板到达外部器件输入port的最大值和最小值Tpcb,PCB延时经验值为600mil/ns,1mm = 39.37mil。
- 时钟源到达外部器件的最大、最小时钟偏斜Tclk2;
- 时钟源到达FPGA的最大、最小时钟偏斜Tclk1;
- 外部器件的建立时间Tsu和保持时间Th;
当外部器件时钟为FPGA提供的时候,Tclk1和Tclk2即合成Tshew。如下图所示,为FPGA提供时钟模型:
?
1.5 使用范围
通过作者使用总结情况,IO口时序约束主要使用在下面情况:
1. 数据交换频率较高
因为IO时序约束一般计算值都是在几纳秒。当FPGA和外部数据交换频率较低,如FPGA操作640*480的TFT液晶进行刷屏,传输数据频率只24Mhz,一个数据时钟都有41.666ns,全然不用约束都能满足时序要求。
可是当操作SDRAM执行到120M时候,因为一个数据变换周期才8ns。因此IO口的少量延时都会影响到SDRAM数据。因此这样的情况下需要对输入输出进行完整的IO口时序约束。而且分析正确,才干消除传输数据不稳定过的情况。
2.代码已经比较优化
当数据交换频率较高,可是时序约束还是不满足时序要求的时候。我们都需要对代码进行分析,好的时序都是设计出来的,不是约束出来的。如程序清单 1.1所看到的。首先hcount_r 和vcount_r 都为10位计数器,这种代码TFT的三色输出的port就会有非常大的延时。由于dat_act的胶合逻辑太多。输出路径太长导致。
这种情况下应该不是首先做时序约束,应该改动代码,尽量做到寄存器直接输出。仅仅有当代码比较优化的情况,再做时序约束这样才干得到较好的结果。
演示样例程序如下:
代码语言:javascript复制assign dat_act = ((hcount_r >= hdat_begin) && (hcount_r < hdat_end))
&& ((vcount_r >= vdat_begin) && (vcount_r < vdat_end));
assign tft_r = (dat_act) ? {rgb16_dat[15:11], 3'b111} : 8'h00;
assign tft_g = (dat_act) ?
{rgb16_dat[10:5], 3'b111} : 8'h00;
assign tft_b = (dat_act) ? {rgb16_dat[4:0], 3'b111} : 8'h00;
1.6 总结
本篇主要是对FPGA的IO口时序约束进行对应的分析,并未做实际的使用分析,兴许以后将会结合软件,以及实际案例对IO口时序约束进行具体的使用介绍。最后附上一个Altera官方的IO时序约束分析样例。如图下图所示,为Altera官方例程:
FPGA设计过程中所遇到的路径有输入到触发器,触发器到触发器,触发器到输出,例如下图所示,下图就是典型的同步时序路径:
二、 应用背景
静态时序分析简称STA,它是一种穷尽的分析方法。它依照同步电路设计的要求。依据电路网表的拓扑结构,计算并检查电路中每个DFF(触发器)的建立和保持时间以及其它基于路径的时延要求是否满足。
STA作为FPGA设计的主要验证手段之中的一个,不需要设计者编写测试向量,由软件自己主动完毕分析,验证时间大大缩短,测试覆盖率可达100%。
静态时序分析的前提就是设计者先提出要求,然后时序分析工具才会依据特定的时序模型进行分析,给出正确是时序报告。
进行静态时序分析。主要目的就是为了提高系统工作主频以及添加系统的稳定性。
对非常多数字电路设计来说,提高工作频率非常重要,由于高工作频率意味着高处理能力。通过附加约束能够控制逻辑的综合、映射、布局和布线,以减小逻辑和布线延时。从而提高工作频率。
三、理论分析
1. 静态时序分析的理论基础知识
在进行正确的时序分析前。我们必须具备主要的静态时序的基本知识点,不然看着编译器给出的时序分析报告宛如天书。如图所示,为libero软件给出的寄存器到寄存器模型的时序分析报告的截取,接下来我们会弄清楚每一个栏目的数据变量的含义以及计算方法。
下图为libero静态时序分析报告:
1.1 固定参数 launch edge、latch edge、Tsu、Th、Tco概念
(1). launch edge
时序分析起点(launch edge):第一级寄存器数据变化的时钟边沿,也是静态时序分析的起点。
(2). latch edge
时序分析终点(latch edge):数据锁存的时钟边沿,也是静态时序分析的终点。
(3). Clock Setup Time (Tsu)
建立时间(Tsu):是指在时钟沿到来之前数据从不稳定到稳定所需的时间,假设建立的时间不满足要求那么数据将不能在这个时钟上升沿被稳定的打入触发器。如 下图所示,下图为建立时间图解:
(4). Clock Hold Time (Th)
保持时间(Th):是指数据稳定后保持的时间。假设保持时间不满足要求那么数据相同也不能被稳定的打入触发器。保持时间示意图如下图所示,下图为保持时间图解:
(5). Clock-to-Output Delay(tco)
数据输出延时(Tco):这个时间指的是当时钟有效沿变化后,数据从输入端到输出端的最小时间间隔。
?
1.2 Clock skew
时钟偏斜(clock skew):是指一个时钟源到达两个不同寄存器时钟端的时间偏移。如下图所示,下图为时钟偏斜:
时钟偏斜计算公式如下:
Tskew = Tclk2 -Tclk1
?
1.3 Data Arrival Time
数据到达时间(Data Arrival Time):输入数据在有效时钟沿后到达所需要的时间。主要分为三部分:时钟到达寄存器时间(Tclk1),寄存器输出延时(Tco)和传输数据延时(Tdata),如下图所示,为数据到达的时间:
数据到达时间计算公式如下:
Data Arrival Time = Launch edge Tclk1 Tco Tdata
?
1.4 Clock Arrival Time
时钟到达时间(Clock Arrival Time):时钟从latch边沿到达锁存寄存器时钟输入端所消耗的时间为时钟到达时间,如下图所示,为时钟到达时间:
时钟到达时间计算公式如下:
Clock Arrival Time = Lacth edge Tclk2
?
1.5 Data Required Time(setup/hold)
数据需求时间(Data Required Time):在时钟锁存的建立时间和保持时间之间数据必须稳定,从源时钟起点达到这样的稳定状态需要的时间即为数据需求时间。如下图所示,为数据需求时间:
(建立)数据需求时间计算公式例如以下:
Data Required Time = Clock Arrival Time - Tsu
(保持)数据需求时间计算公式例如以下:
Data Required Time = Clock Arrival Time Th
?
1.6 Setup slack
建立时间余量(setup slack):当数据需求时间大于数据到达时间时,就说时间有余量,Slack是表示设计是否满足时序的一个称谓。下图为建立时间余量:
建立时间余量的计算公式例如以下:
Setup slack = Data Required Time - Data Arrival Time
由公式可知。正的slack表示数据需求时间大于数据到达时间,满足时序(时序的余量)。负的slack表示数据需求时间小于数据到达时间,不满足时序(时序的欠缺量)。
?
1.7 时钟最小周期
时钟最小周期:系统时钟能执行的最高频率。
- 当数据需求时间大于数据到达时间时,时钟具有余量;
- 当数据需求时间小于数据到达时间时,不满足时序要求,寄存器经历亚稳态或者不能正确获得数据。
- 当数据需求时间等于数据到达时间时。这是最小时钟执行频率。刚好满足时序。
从以上三点能够得出最小时钟周期为数据到达时间等于数据需求时间的运算公式如下:Data Required Time = Data Arrival Time
由上式推出如下公式:
Tmin Latch edge Tclk2 - Tsu = Launch edge Tclk1 Tco Tdata
最后推出最小时钟周期为:
Tmin = Tco Tdata Tsu - Tskew
四、应用分析
1. 设置时钟主频约束
全部的静态时序分析都是在有约束的情况下编译器才给出分析报告,所以进行时序分析的第一步就是设置约束。
Libero软件设置时钟约束的途径三种,单时钟约束,多时钟约束和在Designer里面进行约束。
1.1 单时钟约束
有时我们系统全部模块都採用同一个时钟,这样的方式最为简单,直接在Synplify主界面上有个设置时钟约束的。如下图红框所看到的,下图为单时钟设置:
设置完毕后,编译。通过Synplify时钟报告看初步时钟执行频率是否能达到要求,时钟报告如图4.2所看到的,设定100Mhz,能执行102.7Mhz。满足时序。下图为时序报告:
?
1.2 时钟约束
当系统内部模块採用了多个时钟时。那就需要进行多时钟约束了。
首先需要打开设置界面。在Synplify中选择:File->New->Constraint File建立SDC文件,选择时钟约束如下图所示,为多时钟约束:
对时钟进行例如以下约束后保存SDC文件,约束如下图所示,为多时钟约束完毕:
?
1.2 Designer SmartTime时钟约束
时钟约束除了在Synplify中能够约束外。还能够在Designer SmartTime中设置时钟约束,打开Designer Constraint,选择Clock进行针对每一个使用时钟的设置,如下图所示,为Designer时序约束:
?
1.3 时序报告分析
(1)Synplify时序报告
当约束了时序后,需要观察时序报告,看时钟是否能达到我们需要的时钟,首先观察Synplify综合报告。以多时钟约束为样例,从Synplify得到的时序报告如下图所示,为多时钟约束时序报告:
由上图可知时序都满足约束,未出现违规。能够在以下的报告中查看最差路径,如图4.7所看到的是clk2的最差路径。下图为最差路径:
(2)Designer SmartTime时序分析报告
当设计经过Synplify综合给出网表文件后,还须要Designer进行布局布线,通过布局布线优化后的时序会有变化,因此,还须要分析布局布线后的时序,打开Designer->Timing Analyzer查阅总体时序分析报告如下图所示,为布局布线后时序报告:
由Synplify综合后的报告和Designer进行布局布线后的报告能够看出。布局布线后优化了一些时序。特别是clk2时钟,通过布局布线后优化到了184Mhz,全然满足时序。
(3)具体时序报告图
通过Synplify综合后的和Designer进行布局布线都仅仅是看到了一个大体的时序报告。当我们需要分析时序时候必须观察细致的时序报告,在SmartTime中提供这样的报告功能,以clk2分析为例,在Timing Analyzer找到例如以下区域,下图为 时序报告选择。
如上图所示,选择寄存器到寄存器进行分析时钟主频。寄存器到寄存器分析。
如上图所示,时序报告中给出了数据延时。时序余量,数据到达时间,数据需求时间。数据建立时间,以及最小周期和时钟偏斜等信息,有了上一节的时序分析基础知识,我们全然能看懂这些数据代表的意义。这样对我们时序分析就知己知彼,进一步双击当中一条路径,还会给出这条路径的硬件电路图,如下图硬件电路图所示。有了这些具体的时序报告。对设计进行调整更加清晰。
END
后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。
大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!