静态时序分析(statictiminganalysis,STA)是分析、调试并确认一个门级系统设计时序性能的比较彻底的方法。在门级电路设计过程中,为得到一个最佳的电路设计,在结构逻辑、电路布局布线等方面,时序分析起着关键性的作用。静态时序分析既要检验门级电路的最大延迟、以保证电路在指定的频率下能够满足建立时间的要求,同时又要检验门级电路的最小延迟、以满足保持时间的需求。芯片的设计只有通过了静态时序分析才能真正完成,甚至在从逻辑综合开始后的每一个设计步骤的结果都需要满足或部分满足时序的要求。
一般的静态时序分析工具:synopsys的Prime Time(入行半年目前仅使用过这个,有待学习)
静态时序分析
准备工作包括:设置时钟、指定IO时序特性以及指定伪路径和多周期路径等。
专业名词
PLL(Phase-locked loop,锁相环):常用于在ASIC中产生高频时钟。
transition:过渡时间、压摆-
时序报告中的r、f:上升沿、下降沿
DUA:Design under analysis,待分析设计
OCV:片上变化
Oscillator:晶振
时序弧
setup time:建立时间
hold time:保持时间
Transition delay:传输延迟
Logic gate delay:逻辑门延迟
对于cell, pin, net, port的理解
一张图看懂cell, pin, net, port_pin port-CSDN博客
标准单元库
有待学习
配置STA环境
同步设计
create_clock -name SYSCLK -period 20 -waveform {0 5} [get_ports SCLK]
在SCLK口定义一个名称为SYSCLK的时钟,该时钟的时钟周期为20,在0处raise,在5处fall。
-waveform {time_raise time_fall ...}
默认为:
-waveform {0, period/2}
没有-name,那么clk名称与port名称一致
set_clock_uncertainty
set_clock_uncertainty :定义时钟周期的不确定性,可以定义悲观条件,条件严苛,让电路安全性得以提升。
包括了以下部分:
时钟偏差(clock skew)
时钟抖动(clock jitter)
时钟延迟
如:
set_clock_uncertainty -setup 0.2 [get_clocks CLK_CONFIG] (1)
set_clock_uncertainty -hold 0.05 [get_clocks CLK_CONFIG] (2)
需要注意:设置的时钟不确定性有效地减少了指定数量的可用时钟周期。对于保持检查,保持的时钟不确定性用作需要满足的额外时间余量。
理解:(1)中将setup的时间提前,(2)中hold的时间延迟
时钟间不确定性:
set_clock_uncertainty -from VIRTUAL_SYS_CLK -to SYS_CLK -hold 0.05
set_clock_uncertainty -from VIRTUAL_SYS_CLK -to SYS_CLK -setup 0.03
set_clock_uncertainty -from SYS_CLK -to CFG_CLK -hold 0.05
set_clock_uncertainty -from SYS_CLK -to CFG_CLK -hold 0.1
clock Latency(时钟延迟)
network latency
source latency
set_clock_latency 1.8 -rise [get_clocks MAIN_CLK]
set_clock_latency 2.1 -fall [all_clocks]
set_clock_latency 0.8 [get_clocks CLK_CONFIG] #指定一个网络延迟
set_clock_latency 1.9 -source [get_clocks CLK_CONFIG] #指定一个具体的source latency
set_clock_latency 0.851 -source -min [get_clocks CFG_CLK]
set_clock_latency 1.322 -source -max [get_clocks CFG_CLK]
在时钟树综合完成后,从时钟源到触发器时钟引脚的总是中延迟时源延迟加上时钟树从时钟定义点到触发器的实际延迟。
衍生时钟:generated clocks
分频产生的
同步时钟
create_clock -name CLKP 10 [get_pins UPLL0/CLKOUT]
create_generated_clock -name CLKPDIV2 -source UPLL0/CLKOUT -divide_by 2 [get_pins UFF0/Q]
使用触发器进行门控
create_clock 0.1 [get_ports SYS_CLK]
create_generated_clock -name CORE_CLK -divide_by 1 -source SYS_CLK [get_pins UAND1/Z]
生成一个2倍频率的时钟
create_clock -period 10 -waveform {0 5} [get_ports PCLK]
create_generated_clock -name PCLKx2 -source [get_ports PCLK] -multiply_by 2 [get_pins UCLKMULTREG/Q]
相较于创建时钟,衍生时钟1.不需要进行额外的约束;2.新创建一个主时钟是不会自动考虑原延迟;3.衍生时钟的时钟源是主时钟的源而不是衍生时钟的源。
在内部引脚上创建时钟的一个缺点是:它会影响路径延迟计算,并迫使设计人员手动计算源延迟。
约束输入路径
create_clock -period 15 -waveform {5 12} [get_ports CLKP]
set_input_delay -clock CLKP -max 6.7 [get_ports INPA]
set_input_delay -clock CLKP -min 3.0 [get_ports INPA]
input_delay=Tclk2q+Tc1
约束输出路径
output_delay=Tc2+Tsetup
set Tc2 3.9
set Tsetup 1.1
set_output_delay -clock CLKQ -max [expr Tc2 + Tsetup] [get_ports OUTB]
example 2:
Timing Path Groups 路径组
timing path
起点:clock pin或者input port
终点:pin(D触发器的D端)或output port
1.clk->D
2.clk->output
3.input->D
4.input->output
CLKA组:输入端口A到触发器UFFA的D引脚
CLKB组:触发器UFFA的CK引脚到触发器UFFB的D引脚
默认组:输入端口A到输出端口Z、触发器UFFB的CK引脚到输出端口Z
静态时序分析和报告通常分别在每个时序路径组中单独执行
Refining the Timing Analysis(细化时序分析)
DFT 扫描链(scan_clk)
set_case_analysis: 在pin/cell/input port指定常量值,指定非活动信号
set_case_analysis 1 UCORE/UMUX0/CLK_SEL[0]
set_case_analysis 1 UCORE/UMUX0/CLK_SEL[1]
set_case_analysis 1 UCORE/UMUX0/CLK_SEL[2]
set_disable_timing:禁用cell的时序弧
set_disable_timing -from S -to Z [get_cells UMUX0]
set_false_path:在时序分析时不检测该路径(一般为异步路径)
set_multicycle_path:指定可以超过一个时钟周期的路径
点到点指定约束
set_max_delay 5.0 -to UFF0/D # all paths to D-pin of flip-flop should take 5ns max.
set_min_delay 0.4 -from [get_clocks SYS_CLK] -to [get_clocks CFG_CLK]
# The min delay between any path between the two clock domains is specified as 400ps.
时序验证
Tlaunch + Tck2q + Tdp < Tcapture + Tcycle -Tsetup
clock source latency时钟源延迟,对应于时钟树延迟
● set_clock_latency -source -rise 0.7 [get_clocks CLKM]
● set_clock_latency -source -fall 0.65 [get_clocks CLKM]
clock network latency时钟网络延迟
时钟网络延迟用于在建立时钟树之前(即在时钟树综合之前)对通过时钟路径的延迟进行建模。一旦建立了时钟树并标记为了“已传播”(propagated),便会忽略此时钟网络延迟约束。
多周期路径约束
时序分析工具默认是进行一个周期的分析的,可能不适用于某些逻辑路径。如果你的设计中允许数据在2个甚至更多个周期之后稳定,那么就可以使用多周期约束。好处在于可以使得不限过程中释放布线资源,降低布线运行时间。
通常在设计中定义多个时钟,其频率是彼此的简单(或整数)倍。在这种情况下,STA通过计算所有相关时钟之间的公共基准周期来执行(如果两个时钟在其域之间具有数据路径,则它们是相关的)。建立公共基准周期,以便所有时钟同步。
create_clock -name CLKM -period 10 [get_ports CLKM]
set_multicycle_path 3 -setup -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
一些注意事项
1.SOC都是全局异步 局部同步
2.DC/PT处理的都是同步电路,因此需要对于跨时钟域的进行约束
3.操作条件 Operating Conditions
PVT Process Voltage Temperature表示工艺、电压和温度
slow和fast都是极限的条件
在slow的条件下检查setup,在fast的条件下检查hold
高温低电压是最差的情况
低温高电压是最好的情况
参考书籍:
1.《Static Timing Analysis for Nanomter Designs》