基于TimeQuest Timing Analyzer的时序分析笔记(五)

基于TimeQuest Timing Analyzer的时序分析笔记(五)
在高速系统中 FPGA 时序约束不止包括内部时钟约束,还应包括完整的 IO 时序约束和时序例外约束才能实现 PCB 板级的时序收敛。因此, FPGA 时序约束中 IO 口时序约束也是一个重点。只有约束正确才能在高速情况下保证 FPGA 和外部器件通信正确。本文对io约束进行简单介绍。

一、整体时序路径认识

TimeQuest 静态时序分析的对象包括:寄存器和寄存器之间的路径、I/O 之间、I/O 和寄存器之间的路径、异步复位和寄存器之间的路径。TimeQuest 根据Data Arrival Time 和Data Required Time 计算出时序余量(Slack)。当时序余量为负值时,就发生了时序违规(Timing Violation)。需要特别指出的一点是:由于时序分析是针对时钟驱动的电路进行的,所以分析的对象一定是“寄存器-寄存器”对。在分析涉及到I/O 的时序关系对时,看似缺少一个寄存器分析对象,构不成“寄存器-寄存器” 对,其实是穿过FPGA 的I/O 引脚,在FPGA 外部虚拟了一个寄存器作为分析对象。
首先对下图有一个简单认识,基本有四条路径可以进行时序约束。(2)为FPGA内部在前面几篇内容已经介绍过。本文对io约束先做简单介绍
基于TimeQuest Timing Analyzer的时序分析笔记(五)
基于TimeQuest Timing Analyzer的时序分析笔记(五)

二、FPGA 整体概念

由于 IO 口时序约束分析是针对于电路板整个系统进行时序分析,所以 FPGA 需要作为一个整体分析,其中包括 FPGA 的建立时间、 保持时间以及传输延时。 传统的建立时间、保持时间以及传输延时都是针对寄存器形式的分析。 但是针对整个系统 FPGA 的建立时间保持时间可以简化。
基于TimeQuest Timing Analyzer的时序分析笔记(五)
如上图 所示,为分解的 FPGA 内部寄存器的性能参数:
(1) Tdin 为从 FPGA 的 IO 口到 FPGA 内部寄存器输入端的延时;
(2) Tclk 为从 FPGA 的 IO 口到 FPGA 内部寄存器时钟端的延时;
(3) Tus/Th 为 FPGA 内部寄存器的建立时间和保持时间;
(4) Tco 为 FPGA 内部寄存器传输时间;
(5) Tout 为从 FPGA 寄存器输出到 IO 口输出的延时;
由上分析当 FPGA 成为一个系统后即可进行 IO 时序分析。
对于源寄存器和目的寄存器中有一个不在 FPGA 内部的情况下,单纯约束 FPGA的时钟是无法让 EDA 软件对这样的路径进行分析。
做时钟约束主要就是告诉EDA软件输入的时钟信号的频率。
IO约束就是通过告知 EDA 软件一些IO传输路径中的已知时间参数,来让 EDA 软件编译并控制 FPGA 内部的各个路径传输延迟,使得总的路径能够满足建立时间余量为正的目的。

三、IO时序分析分为系统同步和源同步两种类型

系统同步
基于同一时钟源进行系统同步,但器件间传输延时无法确定,不适用于高速数据传输,需要了解的自行查找相关知识 基于TimeQuest Timing Analyzer的时序分析笔记(五)
源同步
使用对端的时钟信号作为采样信号,时钟信号和数据信号保持确定的相位关系,源同步输出的信号有时钟和数据信号,输出时钟是由fpga产生的,对于输出时钟有多种产生方式,例如:
具体请看该博文
本文的分析以第一种情况进行介绍
1、通过fpga的锁相环产生输出时钟;
2、通过fpga的ALTDDIO IP核产生输出时钟;
3、通过状态机控制产生输出时钟;
4、将驱动数据的时钟直接输出。
基于TimeQuest Timing Analyzer的时序分析笔记(五)

四、源同步分析

首先源同步又具有路径(1)(input delay)和(3)(output delay)两种,以下部分内容来自该博文都是听的小梅哥的课
如图所示,路径(3)数据和时钟都是从FPGA向外部器件传输的,例如图示的ADV7123,或者片外的SDRAM都是这一类。
基于TimeQuest Timing Analyzer的时序分析笔记(五)
0-3:Tclk1----PLL产生时钟信号到源寄存器的时钟延时,即使是走全局时钟网路这一延时虽小但是必然存在。
---- 值不知道,但是TimeQuest Timing Analyzer软件可以知道,EDA软件可以一定程度控制其值大小
3-4:Tco-----D端数据满足寄存器的建立时间的前提下,从时钟端口上升沿到来到改源寄存器可以输出稳定的数据所需要的时间。这部分延 时由器件本身决定的,在设计中无法进行优化。
-----值不知道,但这是一个固有的物理参数,其值TTA,EDA软件也知道
4-5:Tout(Tdata_int)—数据从寄存器Q端口产生后,到达IO口,在FPGA内部传输所花费的时间。
-----值不知道,但是TTA软件可以知道,EDA软件可以一定程度控制其值大小
5-6:Tdata_PCB—数据从FPGA输出后,到目的寄存器,在PCB走线传输花费的时间。(可以计算的,5555mil/ns,所以下面分析的时候把他认为时一个已知量)
Tsu可以知道值
0-1:Tclk2_int—输出时钟到达FPGA引脚的延时
-----值不知道,但是TTA软件可以知道,EDA软件可以一定程度控制其值大小
1-7:Tclk2_ext----输出时钟到达外部器件的走线延时
-----(可以计算的,5555mil/ns,所以下面分析的时候把他认为时一个已知量)
时序分析如下:
基于TimeQuest Timing Analyzer的时序分析笔记(五)公式推导
Setup:
data arrive=launch edge+Tclk1+Tco+Tdata(int)+Tdata(PCB)
data require=latch edge+Tclk2(int)+Tclk2(PCB)-Tsu
slack(Tu)=data require-data arrive>=0
代入得:
Latch edge+Tclk2(int)+Tclk2(PCB)-Tsu – [launch edge+Tclk1+Tco+Tdata(int)+Tdata(PCB)]>=0
移项得(已知量放左边,与器件相关的未知量/FPGA可以通过优化布局布线而改变的量放右边。后面也是一致的,不再赘述):
(Latch edge-launch edge) - [Tdata(PCB) +Tsu -Tclk2(PCB)]>=Tdata(int) +Tco+Tclk1-Tclk2(int)

最大传输延时:数据经过最大的传输延时依然能够满足外部目的寄存器的建立时间
Output delay max = [ Tdata(PCB) +Tsu -Tclk2(PCB) ]

Hold:
data arrive= launch edge+Tclk1+Tco+Tdata(int)+Tdata(PCB)
data require= latch edge+Tclk2(int)+Tclk2(PCB) + Th
slack(Th)= data arrive - data require >=0;
=[launch edge+Tclk1+Tco+Tdata(int)+Tdata(PCB)] - [latch edge + Tclk2(int)+Tclk2(PCB)+Th] >=0
=launch edge - Latch edge + [Tdata(PCB) – Th –Tclk2(PCB)] >= Tclk2(int)-[Tdata(int) +Tco+Tclk1]

最小传输延时:证数据经过最小的传输延迟到达目的寄存器,依旧能够满足目的寄存器的保持时间。
Output delay min= [Tdata(PCB) – Th –Tclk2(PCB)]

注意:以上分析中对于FPGA与外部器件之间的pcb走线一般可以计算出来,如果Tdata(PCB)和Tclk2(PCB)等长时,我们会发现又仿佛回到内部寄存器到寄存器的分析:
Output delay max = Tsu
Output delay min= – Th

路径(1)如图所示,时钟信号和数据都是从外部向FPGA传输的。例如外部摄像头采集了图像数据需要送入FPGA内部进行处理等。分析方式和上面是一致的。
基于TimeQuest Timing Analyzer的时序分析笔记(五)
Tclk1是未知量,Tco也是个未知量。
但是∶Tck1+Tco 的值一般手册会给出,命名就是 Tco
Tclk2(ext)是可以通过PCB走线长度计算出来的(5555ml/ns)。
Tdata(pcb)是可以通过PcB 走线长度计算出来的(5555ml/ns),·
Tdata(int)不知道,但是EDA软件可以通过软件分析能知道,还能一定程度上控制该路径的延迟。
Tsu∶不知道,但是 EDA 软件可以通过软件分析能知道。
Tck2(int)不知道,但是EOA软件可以通过软件分析能知道,还能一定程度上控制该路径的延迟·
时序图如下所示:
基于TimeQuest Timing Analyzer的时序分析笔记(五)
Setup time
data require = latch edge + Tclk2(ext)+Tclk2(int) –Tsu
data arrive = launch edge + Tclk1 +Tco + Tdata(PCB)+Tdata(int)
slack(Tu) = data require - data arrive
= latch edge + Tclk2(ext)+Tclk2(int) –Tsu – [ launch edge + Tclk1 +Tco + Tdata(PCB)+Tdata(int) ] >=0
移项得
latch edge - launch edge + Tclk2(ext) - Tco - Tclk1 -Tdata(PCB) >= Tsu + Tdata(int) - Tclk2(int)
外部器件手册中常常把Tco + Tclk1 统称为 Tco,因此
latch edge - launch edge –[ Tco - Tclk2(ext) + Tdata(PCB) ]>= Tsu + Tdata(int) - Tclk2(int)
最大输入延时:数据经过最大的外部传输路径延迟,到达FPGA的寄存器时,还能够满足该寄存器的建立时间
Input delay max = Tco(max) - Tclk2(ext) + Tdata(PCB)

Hold time
data arrive = launch edge + Tclk1 +Tco + Tdata(PCB)+Tdata(int)
data require = latch edge + Tclk2(ext)+Tclk2(int) +Th
slack(Th) = data arrive -data require
= launch edge + Tclk1 +Tco + Tdata(PCB)+Tdata(int) – [ latch edge + Tclk2(ext)+Tclk2(int) +Th ] >=0
移项得
launch edge - latch edge + Tco + Tdata(PCB) - Tclk2(ext) >= Tclk2(int) - Tdata(int) + Th
最小输入延时:数据经过最小的外部传输路径延迟,到达FPGa的寄存器时,还能够不破坏该寄存器接收前一个时钟沿外部器件发射的数据。要能够满足该寄存器的保持时间。
Input delay min = Tco(min) + Tdata(PCB) - Tclk2(ext)
值得注意的是,虽然Input delay max 和Input delay min 的表达式一样,但是分析模型不同。分析delay max的时候期望Tco尽可能的大,min的时候相反。
Input delay max = Tco(max) - Tclk2(ext)(min) + Tdata(PCB)(max)
Input delay min = Tco(min) - Tclk2(ext)(max) + Tdata(PCB)(min)
若PCB时候设计 Tdata(PCB) = Tclk2(ext) 则模型将简化为都是Tco。