FPGA时序分析

转载https://mp.weixin.qq.com/s/HdyXJmoaTlpKIm7i8at18A

时序分析的题目是FPGA逻辑岗和数字IC岗最常考的题型之一,也是我们第一次讲解关于时序分析相关的题目,希望大家能够通过这道题解析和扩展对时序分析的概念、原理、公式、计算、应用都能够有一个初步的了解。

4、假设时钟周期为T,寄存器时钟端到数据输出端的延迟为Tcq,时钟到第一级寄存器的时钟端的延迟为Tcd1,时钟到第二级寄存器时钟端的延迟为Tcd2,两级寄存器之间的组合逻辑延迟为Tpd,寄存器的建立时间为Tsetup,Tpd的最大延迟为(   )。(大疆FPGA逻辑岗B卷)

A  Tpd ≤ T - Tsetup - Tcq -(Tcd2 - Tcd1)

B  Tpd ≤ T - Tsetup + Tcq -(Tcd2 - Tcd1)

C  Tpd ≤ T - Tsetup + Tcq -(Tcd1 - Tcd2)

D  Tpd ≤ T - Tsetup - Tcq -(Tcd1 - Tcd2)

解析:本题目主要考察了时序分析的公式计算

时序分析在FPGA规范的设计中是必要的,在FPGA高速系统的设计中更是必不可少,否则就会出现RTL逻辑仿真完全正确,而在下板验证时就会因为时序不满足要求而使整个系统不能正常工作。在数字IC的设计中时序分析更是非常重要的一环。

时序分析的方法主要有两种一种是静态时序分析,另一种是动态时序分析。静态时序分析是通过设计好电路中的已知参数,利用EDA工具提供的模型分析出时钟和数据的关系。而动态时序分析是把设计好电路中的所有延时都考虑进来,在EDA仿真工具中把延时参数都加上,然后观察仿真的波形并测量Ts(建立时间:采样时钟的上升沿到达数据起始位置的时间,本题为Tsetup)、Th(保持时间:采样时钟的上升沿到达数据结束位置的时间)是否满足时序的要求,需要电路模拟跑起来。

本题目就是以静态时序分析的模型来设计的,所以我们先从静态时序分析的通用模型讲起。

如图1所示时序分析需要关心的路径有以下几点:

  • 从输入到输出的路径;

  • 从输入到寄存器的路径;

  • 从寄存器到输出的路径;

  • 从寄存器到寄存器的路径;

  • 异步清零信号和时钟存在异步的进入和退出的时序问题。

其中寄存器到寄存器之间的路径分析占整个时序分析的60%以上,也是本题目所要分析的内容。

图1

时序分析问题是如何引入的呢?以寄存器到寄存器之间的路径分析为例,如图2所示,时钟的上升沿在寄存器REG1的时钟端和数据稳定时在寄存器REG1的D端在图中蓝色竖线的位置是同时进行的,但数据要从图中①所示的数据路径传到寄存器REG2的D端,而时钟则从图中③所示的路径到达寄存器REG2的时钟端,也就是说数据和时钟所经过的路径是不同的,这会使数据和时钟到达寄存器REG2的D端和时钟端的相位关系发生变化,在某些情况下会导致刚好如图3(建立时间违例)和图4(保持时间违例)所示的情况,即时钟在数据不稳定的情况下对数据进行了采样,这会导致我们采集到数据是错误的。我们做时序约束的目的就是要解决这种问题,让时钟采集到稳定的数据。

图2

图3

图4

如图5所示,我们用波形的方式来描述这一问题。

图5

图5中的T1为数据路径的延迟,等于图2中①所示的路径,它包括寄存器REG1时钟端到寄存器REG1数据输出端Q的延迟为Tco(本题为Tcq)与两级寄存器之间的组合逻辑与布线延迟Tdata(本题为Tpd)之和。

图5中的△T为时钟偏斜,等于图2中时钟到第二级寄存器时钟端的延迟为T③(本题为Tcd2)与时钟到第一级寄存器的时钟端的延迟T②之差(本题为Tcd1)。注:△T的值可以为正值也可以为负值。

另外图5中的Ts为建立时间,Th为保持时间,T_cycle为时钟周期(本题为T)。

根据波形图所表示的内容可以得出,

建立时间的公式为:Ts = T_cycle – T1 + △T = T_cycle –(Tco + Tdata)+ △T

保持时间的公式为:T1 – △T = (Tco + Tdata)– △T

分析至此本题中所有的参数关系就都知道了,就可以求解了。题目中要求Tpd的最大延迟为,也就是求上面分析得到的建立时间公式中的Tdata,我们讲建立时间的公式移相的:Tdata ≤ T_cycle - Ts - Tco + △T = T_cycle - Ts - Tco +(T③ - T②),然后将公式中的符号全部替换为我们本题中的符号,最后的结果为Tpd ≤ T - Tsetup - Tcq -(Tcd1 - Tcd2),所以本题的答案为D

本题也是在理想环境下的设定,否则还需要加入T_setup(建立时间的门限,本题没有给出,默认为0)和T_hold(保持时间的门限,本题没有给出,默认为0)这两个参量。

T_setup:时钟沿来到之前数据必须保持稳定的最小时间,芯片选定即决定,和制作工艺有关。T_hold:时钟沿来到之后数据必须保持稳定的最小时间,芯片选定即决定,和制作工艺有关。

然后将这两个参量和上面求得的建立时间和保持时间公式一起求出Sslack(建立时间的余量,由建立时间减去建立时间的门限得出)和Hslack(保持时间的余量,由保持时间减去保持时间的门限得出),要求Sslack和Hslack的值都要大于零。最后的公式为:

Sslack(建立时间的余量)≥ 0

= Ts – T_setup ≥ 0

= [T_cycle –(Tco + Tdata)+ △T] – T_setup ≥ 0

Hslack(保持时间的余量)≥ 0

= Th – T_hold ≥ 0

= [(Tco + Tdata)–△T] – T_hold ≥ 0

在对付笔试、面试题时,使用通用模型来分析是足够的,要学会分析推导上面的公式,并真正的理解原理才能够在符号、参量任意变化的题目中从容应对。

扩展:以上分析的是通用的模型,也是其中一种静态时序的分析方法,有时候大家还会看到另一种静态时序分析的方法,很多学习者会将这两种分析方法搞混,这次我们一起来讲。下面这种模型是Quartus和Vivado中的时序分析工具常用的模型,我们需要新引入一个概念,图6所示:

图6

(1)Launch Edge(发射沿):管脚传进来同步于数据的时钟的沿,也被认为是0时刻。

(2)Latch Edge(锁存沿):目的地寄存器REG2锁存数据的沿,相对于发射沿延后1个时钟周期后的起始位置。

如图7所示,我们引入数据到达寄存器的时间Data Arrival Time,就是说数据从Launch Edge开始到寄存器REG2的D端所用的时间:

图7

(1)建立时间的Data Arrival Time(当前数据开始到达的时间)= launch edge + Tclk1 + Tco + Tdata

(2)保持时间的Data Arrival Time(当前数据结束到达的时间,也是下一个数据开始到达的时间)= next launch edge + Tclk1 + Tco + Tdata

如图8所示,为我们采样时钟到达的时间Clock Arrival Time,就是说时钟从Latch Edge到寄存器REG2的时钟端所用的时间:Clock Arrival Time = latch edge + Tclk2

图8

如图9所示为建立时间数据要求达到的时间Data Required Time,就是说要满足建立时间数据必须要在此之前到达寄存器REG2的D端:Data Required Time = Clock Arrival Time–Tsu

图9

如图10所示为保持时间数据要求达到的时间Data Required Time,就是说要满足保持时间数据必须要在此之后到达寄存器REG2的D端:Data Required Time = Clock Arrival Time + Th

图10

把上面分析得到的公式结合计算出Sslack(建立时间的余量),用数据要求到达的时间减去数据实际到达的时间,公式推导为:

Sslack(建立时间的余量)≥ 0

= Data Required Time–Data Arrival Time ≥ 0

=(Clock Arrival Time–Tsu)–(launch edge + Tclk1 + Tco + Tdata)≥ 0

=(latch edge + Tclk2–Tsu)–(launch edge + Tclk1 + Tco + Tdata)≥ 0

图11

Hslack(保持时间的余量)为数据实际到达的时间减去数据要求到达的时间,公式推导为:

Hslack(保持时间的余量)≥ 0

= Data Arrival Time–Data Required Time ≥ 0

=(next launch edge + Tclk1 + Tco + Tdata)–(Clock Arrival Time + Th)≥ 0

=(next launch edge + Tclk1 + Tco + Tdata)–(latch edge + Tclk2 + Th)≥ 0

图12

我们将时序分析工具中的模型推导的公式进行化简

(1)Sslack(建立时间的余量)≥ 0

= Data Required Time–Data Arrival Time ≥ 0

=(Clock Arrival Time–Tsu)–(launch edge + Tclk1 + Tco + Tdata)≥ 0

=(latch edge + Tclk2–Tsu)–(launch edge + Tclk1 + Tco + Tdata)≥ 0

= latch edge + Tclk2–Tsu–launch edge-Tclk1–Tco–Tdata ≥ 0

=(latch edge–launch edge)–(Tco + Tdata)+(Tclk2–Tclk1)-Tsu ≥ 0

=[T_cycle –(Tco+Tdata)+ △T] – Tsu ≥ 0和通用模型的公式一致

(2)Hslack(保持时间的余量))≥ 0

= Data Arrival Time–Data Required Time ≥ 0

=(next launch edge + Tclk1 + Tco + Tdata)–(Clock Arrival Time + Th)≥ 0

=(next launch edge + Tclk1 + Tco + Tdata)–(latch edge + Tclk2 + Th)≥ 0

= next launch edge + Tclk1 + Tco + Tdata–latch edge-Tclk2-Th ≥ 0

=(next launch edge–latch edge)+(Tco + Tdata)+(Tclk1-Tclk2)-Th ≥ 0

=[(Tco + Tdata)-△T] - Th ≥ 0和通用模型的公式一致

通过时序分析工具中的模型公式化简可以看出建立保持时间是否违例和Tclk1、Tclk2的时间长短无关,而与(Tclk2–Tclk1)的绝对值|△T|的值有关,还和采样时钟的频率、寄存器到寄存器之间的路径延迟有关。

以上的所有关于时序分析的计算在时序分析工具中都会给我们自动算好,其中还会加入时钟的不确定度和时钟的悲观度等参数信息。我们根据公式中参数和计算的结果就可以确定通过什么方式来优化才能使我们的时序达到最优。具体如何优化、工程实操和一些规范我这里不再详细展开介绍。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页