时序研究分析教程
时序分析教程
————————————————————————————————作者:————————————————————————————————日期:
一、 时序分析术语
1. 时序分析的基本模型
时序分析是FPGA 的重中之重。开始之前请记住时序分析的基本模型
Comb
T delay
T pd
Tclk1
Tclk2
R1
D
Q
Tco
R2
D Q
T setup
Clock path
data path
rst
Async clear path
T co 为经过寄存器R1的传输延时 T delay 为经过组合逻辑的传输延时 T setup 为R2本身的建立时间;
T pd (clock slew )为时钟到R1和R2的偏差
2. Launch edge 和 Latch edge
Launch edge 和 Latch edge 分别是时序分析的起点和终点。
需要指出的是Latch edge 时间=Launch edge 时间+期望系统周期时间
3. Data Arrival Time 和Data Required Time
这两项时间是TimeQuest 时序分析的基础,所有的建立时间余量和保持时间余量都是根据这两项时间来决定的。
●Data Arrival Time = Launch Edge + Source Clock Delay + t CO +Register?
to?Register Delay
●Data Required Time = Latch Edge + Destination Clock Delay – t SU
需要注意的是Data Arrival Time和Data Required Time在分析不同的时序节点时,计算的公式有所差别。
4.建立时间余量Clock Setup Slack
建立关系是指寄存器R1发送的数据在下一次更新(更换)之前,寄存器R2可用最短时间去锁存数据
建立时间余量是指从Launch edge经过一些列延迟数据输出稳定后到Latch edge 的长度。
Clock Setup Slack=Data Required Time?Data Arrival Time
●Internal Register-to-Register paths
Data Arrival Time= Launch Edge+ Clock Network Delay to Source Register+ tCO+
Register-to-Register Delay
Data Required Time = Latch Edge + Clock Network Delay to Destination Register–t SU–Setup
Uncertainty
●Input Port to Internal Register
Data Arrival Time= Launch Edge+ Clock Network Delay+ Input Maximum Delay+
Port-to-Register Delay
Data Required Time = Latch Edge + Clock Network Delay to Destination Register–t SU–Setup
Uncertainty
●Internal Register to Output Port
Data Arrival Time= Launch Edge+ Clock Network Delay To Source Register + t CO +
Register-to-Port Delay
Data Required Time = Latch Edge + Clock Network Delay to Output Port –Output Maximum
Delay
tCO 指寄存器R1的自身特性
tSU 指寄存器R2的自身特性
如上图所示:
Data Arrival Time = 启动沿时间+ Tclk1 + Tco + Tdata
= 0ns + 3.2ns + 0.2ns + 0.6ns
= 4ns
Data Required Time = 锁存沿时间+ Tclk2 - Tsu
= 10ns + 2ns - 1.4ns
= 10.6ns
所以:Setup Slack = Data Required Time - Data Arrival Time
= 10.6ns - 4ns
= 6.6ns
5.保持时间余量Clock Hold Slack
保持时间余量是在两个节点(寄存器)之间,在分析保持关系的过程中“到底有多少剩时间可以提供给寄存器用来确保已存数据的稳定”。
Clock Hold Slack=Data Arrival Time?Data Required Time
由于保持时间余量是指当前Latch edge和下一个Launch edge的距离。所以上面公式可以写成:
Clock Hold Slack=Data Arrival Time+数据周期时间?Data Required Time
●Internal Register-to-Register paths
Data Arrival Time= Launch Edge+ Clock Network Delay to Source Register+ tCO+ Register-to-Register Delay
Data Required Time = Latch Edge + Clock Network Delay to Destination Register + t H + Hold Uncertainty
●Input Port to Internal Register
Data Arrival Time= Launch Edge+ Clock Network Delay+ Input Maximum Delay+ Port-to-Register Delay
Data Required Time = Latch Edge + Clock Network Delay to Destination Register + t H
●Internal Register to Output Port
Data Arrival Time= Launch Edge+ Clock Network Delay To Source Register + t CO + Register-to-Port Delay
Data Required Time = Latch Edge + Clock Network Delay –Output Maximum Delay
Data Arrival Time = 启动沿+ Tclk1 + Tco+ Tdata + 数据周期时间
= 0ns + 3.2ns + 0.2ns + 0.6ns + 10ns
= 14ns
Data Required Time = 锁存沿+ Tclk2 + Th
= 10ns + 2ns + 1.4ns
= 13.4ns
所以,Hold Slack = 数据保持时间- 数据锁存(获取|读取)时间
= 14ns - 13.4ns
= 0.6ns
6.Recovery and Removal Time
7.多周期路径Multicycle Paths
8.亚稳态Metastability
二、时序约束类型
1.时钟
为了确保精确的静态时序计算结果,必须指定设计中所有使用到的时钟。
A.Base Clock 基准时钟
设计中最主要的输入时钟。不同于从PLL中生成的时钟,基准时钟是由片外OSC或者其他器件生成的。
Example 100 MHz Shifted by 90 Degrees Clock Creation
create_clock -period 10 -waveform { 2.5 7.5 } [get_ports clk_sys]
B.Virtual Clock 虚拟时钟
虚拟时钟在设计中不存在真实的时钟源或者对设计没有直接影响的一个时钟。例如,如果一个时钟不是设计中的时钟,而仅仅作为一个外部器件的时钟源,并且外部器件和该设计有输入或者输出的管脚,那么就认为这个时钟是虚拟时钟。主要方便TimeQuest 正确的分析外部寄存器和内部寄存器的时序关系。
Example Create Virtual Clock
create_clock -period 10 -name my_virt_clk
C.Multifrequency clocks 多频率时钟
某些情况下,设计中会有很多个时钟源向一个时钟节点提供信号。增加的时钟也许扮演一个低频率低功耗时钟的角色。
D.Generated Clocks 派生时钟
派生时钟是指在设计中修改了相位、频率、偏移、占空比的基准时钟。如分频时钟。
在sdc文件中,PLL输出或者寄存器分配的Generated Clocks在所有的基准时钟之后约束。
E.Deriving PLL Clocks 锁相环时钟
使用derive_pll_clocks命令直接让TimeQuest自动搜索未约束的PLL输出时钟。
derive_pll_clocks命令自动调用create_generated_clock命令给每个PLL输出创建Generated Clocks
F.Clock Groups时钟组
如果两个或者多个时钟具有相同的source和固定的相位差,那么这些时钟是同步时钟。
如果两个或者多个时钟之间没有任何关系,则称之为异步时钟。
如果两个时钟不会相互作用,那么称这两个时钟为互斥时钟。
如果在约束中没有特别说明,TimeQuest假设所有的时钟都是相关的。使用set_clock_groups命令指定设计中指出那些时钟是互斥的或者异步的。
set_clock_groups命令将不同时钟组时序分开分析,并且执行同样的分析,不管有没有指定-exclusive或者-asynchronous选项。
做时序分析时,在创建好所有的时钟后,需要定义这些时钟之间的关系。我们可以把同步时钟放到一个group中,然后在定义时钟之间的关系时,可以使用group来定义。如果设计中有异步时钟,就需要用命令把异步时钟分组并定义出来。
2.输入约束Input Constrants
外部器件发送数据到FPGA系统模型如下图所示。
对FPGA的IO口进行输入最大最小延时约束是为了让FPGA设计工具能够尽可能的优化从输入端口到第一级寄存器之间的路径延迟,使其能够保证系统时钟可靠的采到从外部芯片到FPGA的信号。
3.输出约束Output Constrants
FPGA输出数据给外部器件模型如下图所示。
对FPGA的IO口进行输出最大最小延时约束是为了让FPGA设计工具能够尽可能的优化从第一级寄存器到输出端口之间的路径延迟,使其能够保证让外部器件能准确的采集到FPGA的输出数据
4.时序例外Timing Exceptions
A.Falsh Paths
从逻辑上考虑,与电路正常工作不相关的那些路径,比如测试逻辑,静态或准静态逻辑。从时序上考虑,我们在综合时不需要分析的那些路径,比如跨越异步时钟域的路径。
●Clock Latency:时钟延迟
clock源到时序器件的clk脚的延迟叫做clock latency。
有两种形式的Clock Latency,时钟源延迟clock source latency和时钟网络延迟clock network latency。
时钟源延迟指从初始时钟到定义点时钟的传播延迟。
时钟网络延迟指时钟定义点到寄存器的时钟引脚。
●clock uncertainty:clock在时序器件clk脚上的不确定性。
有三种类型的时钟到时钟转移:
intraclock transfers
interclock transfers
I/O interface clock transfers.
●Altera对于fmax的计算公式。
fmax : 电路能跑的最大频率
Tclk:电路能跑的最短周期
Tco:register本身的clk输出delay(clk to output)
Tdata:组合逻辑本身所造成的data delay
Tsu:register本身的setup time
Tclk_skew:clock skew
Pin to Pin Delay (tpd)
tpd指输入管脚通过纯组合逻辑到达输出管脚这段路径的延时,特别需要说明的是,要求输入到输出之间只有组合逻辑,才是tpd延时
● 同步设计基本模型图
Comb
T delay
T pd
Dclk
Sclk
T1
D
Q
Tco
T2
D Q
T setup
Clock path
data path
rst
Async clear path
? launch edge ,是源寄存器发送数据的时钟沿,是时序分析的起点。 ? latch edge ,是目的寄存器捕获数据的时钟沿,是时序分析的终点。 ? Data Arrival Time :从launch edge 开始,data 实际到达Reg2 D 端的时间。
Data Arrival Time = Launch Edge + Source Clock Delay + t CO +Register-to-Register Delay
? Data Required Time
Data Required Time = Latch Edge + Destination Clock Delay – t SU
T co 为经过寄存器T1的传输延时 T delay 为经过组合逻辑的传输延时 T setup 为T2本身的建立时间;
T pd (clock slew )为时钟到T1和T2的偏差
在一个时钟周期T 之内,数据从寄存器T1传出,需要经过延时T co ,然后经过组合逻辑,需要经过延时T delay ,最后到达寄存器T2,然后在寄存器T2建立起来,需要经过延时T setup
,那么可以得出建立时间的要求:
T +T pd ?T co (max )?T delay (max )?T setup ≥0 T setup ≤T +T pd ?T co (max )?T delay (max )
之所以需要加上T pd 是因为时钟也有可能存在传输的偏移