Transcript 时钟到输出延时
DC相关时序概念
主要内容
建立时间与保持时间
扇入与扇出
时钟
常用术语
Clock setup:时间建立关系
tsu:输入建立时间
th:输入保持时间
tco:时钟到输出延时
tpd:管脚到管脚延时
Minimum tpd & tco:最小tpd & tco
Clock Skew:时钟偏斜
最小时钟周期与最高频率
Setup Time:建立时间
Hold Time:保持时间
Latency:延迟
Slack:时间裕量
设计中常用的约束
设计中常用的约束(Assignments或Constraints)主要分为
3类:
时序约束:主要用于规范设计的时序行为,表达设计者期
望满足的时序条件,指导综合和布局布线阶段的优化算法
等。
区域与位置约束:主要用于指定芯片I/O引脚位置以及指导
实现工具在芯片特定的物理区域进行布局布线。
其他约束:泛指目标芯片型号、接口位置,电气特性等约
束属性。
时序约束的主要作用
提高设计的工作频率
通过附加时序约束可以控制逻辑的综合、映射、布局和布线,
以减小逻辑和布线延时,从而提高工作频率。
获得正确的时序分析报告
QuartusII的静态时序分析(STA)工具以约束作为判断时序
是否满足设计要求的标准,因此要求设计者正确输入时序约
束,以便STA工具能输出正确的时序分析结果。
静态时序分析与动态时序仿真
动态时序仿真是针对给定的仿真输入信号波形,模拟设计
在器件实际工作时的功能和延时情况,给出相应的仿真输
出信号波形。它主要用于验证设计在器件实际延时情况下
的逻辑功能。由动态时序仿真报告无法得到设计的各项时
序性能指标,如最高时钟频率等。
静态时序分析则是通过分析每个时序路径的延时,计算出
设计的各项时序性能指标,如最高时钟频率、建立保持时
间等,发现时序违规。它仅仅聚焦于时序性能的分析,并
不涉及设计的逻辑功能,逻辑功能验证仍需通过仿真或其
他手段(如形式验证等)进行。静态时序分析是最常用的
分析、调试时序性能的方法和工具。
Path & Analysis Type
Launch & Latch Edge
Launch Edge:
前级寄存器发送数据对应的时钟沿,是时序分析的起点。
Latch Edge
后级寄存器捕获数据对应的时钟沿,是时序分析的终点
时钟偏斜(clock skew)
时钟偏斜:指一个同源时钟到达两个不同的寄存器时钟端
的时间差别。
clock skew:The difference in the arrival time of a clock
signal at two different registers, which can be caused by path
length differences between two clock paths, or by using gated
or rippled clocks. Clock skew is the most common cause of
internal hold violations.
skew
实例
由于时钟到每个触发器的
互连线长短不一样,造成
信号到达clock pin的时间也
不一样,触发器也不会同
时翻转。Skew的定义就是
最长路径减去最短路径的
值。
根据时钟域以及路径关系,skew可以分为global skew,
local skew,interclock skew。
Global skew是指,同一时钟域,任意路径的最大skew。
Local skew是指,同一时钟域,任意2个有逻辑关联关系的
路径最大skew。
interClock skew是指,不同时钟域之间路径的最大skew
latency
Latency分为source lantency
和 一般的latency。
Source latency 指的是时钟源
到时钟端口的延迟。
一般Latency指的是时钟端口
到内部时序器件的时钟管脚
的延迟。
一般只考虑latency即可。
latency对于内部逻辑的影响
下图是不考虑
latency的情况
内部逻辑延迟的限度为:
T2-T1-Tinput_delay-Tsetup
当考虑了latency的
时候。
那么留给内部逻辑的最大延迟为
:T2’(T2+Tlatency)-T1Tinput_delay-Tsetup。
会发现留给内部
逻辑的延迟会变
大,那么会给DC
更大的空间来综
合。
时钟jitter
正常的时钟到来时蓝色的时序图。但是由于无法预知的因素,时钟可
能提前(粉色)或者延迟(红色)到来,这就是jitter。
提前到来为setup jitter,延迟到来为 hold jitter。
uncertainty
DC中把skew和jitter合成一个uncertainty。
用set_clock_uncertainty来设置。
下文中提到的skew指的是合体,即uncertainty。
最小时钟周期与最高时钟频率
同步电路数据传输模型
最小时钟周期:
tCLK = Microtco + tLOGIC + tNET + MicrotSU- tCLK_SKEW
tCLK_SKEW = tCD2 - tCD1
最高时钟频率:
fmax = 1 / tCLK
Tips
同步系统的运行速度 即同步时钟的速度。同步时钟愈快,
电路处理数据的时间间隔越短,电路在单位时间处理的数
据量就愈大。
setup slack = (<setup relationship>) - (<maximum clock pin
to source register delay> + <tCO of source register> +
<register-to-register delay> + <tSU of destination register> <minimum clock pin to destination register delay>)
建立时间与保持时间
• IC 代码的综合过程可以说是时序分析过程,dc会将设计
打散成一个个路经,这些路经上有cell延迟和net延迟,然
后dc会根据你加的约束,来映射库中符合这种延迟以及驱
动的器件。从而达到综合的目的。
• setup time 和 hold time是dc所有时序约束的基础。
setup time即建立时间,也就说数据在时钟到来之前保持稳定所需要的时间。
hold time 即保持时间,也就是说在时钟到来之后数据需要保持稳定的时间。
Data Arrival Time
Data Arrival Time:
时钟到达前级寄存器的时刻 + 前级寄存器时钟到后级寄存器
数据输入的延迟
Launch Edge + 前级寄存器Clock path的延时 + 前级寄存器
Cell从时钟Pin到数据输出Pin的Net延时(uTco) + Data
path的延时
Clock Arrival Time
Slack
Slack用于表示设计是否满足时序:正的Slack表示满足
时序(时序裕量),负的Slack表示不满足时序(时序
的欠缺量)。
Slack: Slack is the margin by which a timing requirement
was met or not met. A positive slack value, displayed in
black, indicates the margin by which a requirement was
met. A negative slack value, displayed in red, indicates the
margin by which a requirement was not met.
slack = <required maximum point-to-point time> - <actual
maximum point-to-point time>
遵循的原则是信号从Launch edge开始计时,经过一系列的
时序路径,到达后级寄存器的数据输入Pin的速度不能太
快,时间不能太短,否则会侵占后级寄存器数据输入Pin
相对于上一个Latch edge的保持时间。
刚好满足后级寄存器保持时间的数据到达时间是Data
Required Time(相对于Latch edge计算),实际的数据到
达时间是Data Arrival Time(相对于Launch edge计算)。
显然,在保持时间检查中,Data Arrival Time要大于Data
Required Time,否则就会造成保持时间违规。也就是说,
Data Required Time是Data Arrival Time的最小值。二者之
差就是保持时间的时序余量。
相对于建立时间检查,保持时间检查稍微难懂一些。二者
都是同步逻辑设计中对同一个规则的不同解释:当前时钟
沿发出的数据要在下一个时钟沿被正确捕获,不能晚,也
不能早。晚了,会造成下一个时钟沿的建立时间违规,当
前时钟沿发送的数据不能被下一个时钟沿捕获;早了,会
造成上一个时钟沿发送的数据保持时间违规,上一个时钟
沿发送的数据不能被当前时钟沿正确捕获。 riple
二者在计算公式上的区别在于Slack计算公式中减数与被减
数关系。
时钟到输出延时(Clock to output delay)
时钟到输出延时:从时钟信号有效沿到数据有效的时间
间隔。
tCO = Clock Delay + MicrotCO + Data Delay
管脚到管脚延时(pin-to-pin delay)
管脚到管脚延时tPD:指信号从输入管脚进来,穿过纯组合
逻辑,到达输出管脚的延迟。
tPD (pin-to-pin delay) :The time required for a signal from
an input pin to propagate through combinational logic and
appear at an external output pin.
指定全局时序约束
时序驱动的编译
全局时钟设置
全局的I/O时序设置
时序分析和报告选项
时序向导
指定个别时序约束
指定个别时钟要求
个别时序约束
输入最大最小延时
输出最大最小延时
反相时钟
非时钟
tCO要求(最大、最小)、 tSU要求、 tH要求、 tPD要求
剪除时序路径
个别时序约束的对象
单点
点到点
通配符
时序组
指定个别时钟要求
时钟分类:
独立时钟
衍生时钟
DC中的路径(Path)
start point
1. input port(顶层设计的输入端口)
2.clock pin of sequential cell(触发器的clock pin)
end point
1. output port(顶层设计的输出端口)
2.data pin of sequential cell(触发器的data pin)
一个设计中基本的路经分为4种:
path1: input port to data pin of sequential cell
path2: input port to output port
path3: clock pin to data pin of next sequential cell
path4:clock pin to output port
dc中对于建立时间的分析是基于路径的最大延迟
dc中对于保持时间的分析是基于路径的最小延迟
例:时序分析案例
给定setup time 和hold time ,要求算出最小时钟周期
假设时钟周期是20,每个触发器的cell 延迟是1, 触发器的建
立时间是1, 保持时间是0.5, 分析图中的建立时间和保持时
间的slack。
首先要分析路径,找出最长和最短路径,因为dc的综合都
是根据约束而得到最短和最长路径来进行器件选择的。所
以接下来将图中的所有路径标出。因为没有前级(
input_delay)和后级电路(output_delay),我们只分析图中给
出的 路径,如下图:
对于红色路径:Td=Tcell+Td4+Td5+Td6=1+4+3+1=9
对于黄色路径:Td=Tcell+Td4+Td5+Td6+Td8=1+4+3+1+2=11
对于粉色路径:Td=Tcell+Td1+Td2+Td3=1+2+3+2=8
对于绿色路径:Td=Tcell+Td7+Td2+Td3=1+2+3+2=8
分析结论
Tlongest=11,Tshortest=8
对于setup time的slack:Tclk-Tlongest-Tsetup=20-11-1=8
对于hold time的slack : Tshortest-Thold=8-0.5=7.5
对照第一副示意图与此比较,建立时间看D2 ,保持时间看
D1,因为同时把Tl和Ts放在一个图例中,看起来可能有些
误解:)
set_input_delay
input_delay是设置外部信号到达输入端口的时间,dc会
用它来计算留给内部逻辑的空余时间是多少。
之所以让ClkA和Clk的时钟周期不一致,主要是用来说明
上图中黄色部分的。黄色部分的确认是很重要的。这是
DC用来确定时间余量(slack)的关键。
如上图所示,黄色部分已经确实是最小相位差。那么根据
input_delay时间以及库中触发器的setup建立时间,可以知
道留给内部逻辑的延迟时间是红色部分
Tlogic_delay=Tmin-Tinput_delay-Tsetup。
综合过程中,dc会优化Logic2的时序,以使他达到时序要
求。
set_output_delay
set_output_delay是设置输出端口到数据采集处的延迟。
DC会根它来计算留给内部逻辑的时间。如下图:
DRIVE与LOAD
DC综合是基于路径的,每个路径上都有Cell和net,所以基
于路径的综合就是计算路径上的delay和rc(DC是使用互
连线模型进行估算)。
在了解delay和rc的计算时,我们要先了解一下一个cell对
于drive(前级)和driven(后级)所用到的模型是什么。
如图,一个buffer,从前级看过来是一个load(capacitance
,想获得这个load,可以通过load_of buffer/a获得),从后
级看来是一个drive(resistance)。
电路的的驱动能力是上一级的1/R,即电阻的倒数,驱动能
力大,说明看过去的电阻小,也说明这个器件比较大(大
器件有较大的驱动能力)。
电路的负载能力是下一级的load(即电容)总和,负载能
力大,说明能驱动下级的器件就很多。
大器件是大电容,小电阻,而小器件是小电容,大电阻。
理解这些,对于dc综合以及后端APR版图都有很好的操作。
对于cell的延迟,dc是根据input_transition和out_load对应的
查找表来计算的。
对于net的延迟,dc是根据wire_load_model中的fanout_length
和resistance,capacitance,area的查找表计算的。
例如:
Wire_load(small){
Resistance : 0.2;
Capacitance : 1.0;
Area
:0;
Slop
:1.0;
Fanout_length(1, 0.022);
Fanout_length(2, 0.046);
Fanout_length(3, 0.070);
Fanout_length(4, 0.095);
}
比如现在扇出是2,根据fanout_length(2,0.046)可以
知道这个互连线的长度是0.046,然后再根据capacitance
,resistence可以得出这个互连线的电容为:0.046x1.0,互
连线电阻为:0.046x0.02。
如果扇出是5,在查找表中没有找到fanout_length为5的項
,互连线长度将会是=fanout_length(4,0.095)+(54)*slop=0.095+1*1.0=1.095
得出了rc,就可以计算出信号的transition时间=2.2RC。
实际的互联线如下:
扇出线上的转换时间根据在版图之后提取的rc参数信息求得
:
2.2RC=(Rnet+Rout)×(Cnet+Cin)
dc是基于路径分析的
每个路径上有cell延迟和net延迟
cell延迟是根据input_transition和out_lod得出的
net延迟是根据fanout_length,resistance,capacitanc得出的。
驱动和电阻成反比
负载和电容成正比。
fanout影响到load(capacitance),transition,delay
DC对design建模
DC中的约束,其实就是给chip设计一个环境,比如驱动这
个chip输入端口的cell,或者这个chip输出端口驱动了哪些
单元或者端口接入了哪些负载,以及这个芯片的工艺,电
压,温度,等等。
对于一个cell来说
输出端口具有max_fanout属性
输入端口有fanout_load属性
举例
将一个AND2作为design的驱动cell(set_driving_cell),这样
就把AND2的max_fanout属性加在了输入端口上。
如果图中:
那么这个AND2的输出端可以接
AND2的输出端口max_fanout是5,输入端口fanout_load是2。
buffer输入端口的fanout_load是3
2个AND2
或者可以接一个buffer
或者可以接一个buffer和一个AND2
如上图所示,则会引起DC产生DRC错误。因为输入端
口的fanout_load=2XAND2+buffer=7,超过了AND2的
max_fanout2.
如果使用了系统提供的set_max_fanout 5 [all_inputs],将会忽
略set_driving_cell中cell的max_fanout属性,而使用
set_max_fanout属性
如果将一个AND2作为design的负载,那么这个输出端口上的
fanout_load属性将会为2
dc中一般的做法是set_fanout_load [expr [get_attribute
slow/and2/a fanout_load] *xxx] [all_outputs],来设置输出端口
的fanout_load属性。
Max_fanout与Max_capacitance
Max_fanout检查的是输入端口的fanout_load最大值
Max_capacitance检查的是input port or output port or design
的load值。
两者概念不同。
fanout与delay
实例
到buffer的net延迟是2,buffer
延迟是1
fanout为1时net延迟为3,每增
加一个扇出,net延迟增加2
如果一个信号经过这个扇出网
络后,那么延迟为:2+1+(3+
(8-1)×2)=20;
如果把扇出结构优化成如下形式:
那么信号经过这个网络后,延迟为
:2+1+2+1+(3+(4-1)×2)=15.
那么延迟减少了5。