数字IC设计学习笔记
配置STA环境1
1. STA环境
2. 指定时钟specifying clocks
3. 生成时钟generated clocks
1. STA环境
STA环境,就是给STA指定一个正确的约束。环境应该精确,以便静态时序分析时,能够指出所有设计的时序问题。进行静态时序STA,需要设置时钟,指定IO时序特性,指定错误路径(false path) 和 多周期路径(multi-cycle path)
注意:STA主要针对同步电路。即由同一个时钟或者时钟沿驱动的电路。对于其他电路,时不做STA分析的。
2. 如何指定时钟
-
定义时钟:
- 时钟源(clock source):时钟时从芯片上的哪个port,或者是pin,或者是cell发出的
- 时钟周期(period)
- 时钟占空比(duty cycle):高电平/周期
- 边沿翻转时间(edge times):上升沿(rising edge)和下降沿(falling edge)的翻转时间
SDC 脚本:
定义时钟:create_clock -name SYSCLK -period 20\ -waveform{0 5}[get_ports 2 SCLK]
-
定义clock uncertainty:
clock uncertainty主要包括时钟偏差(clock skew)和时钟抖动(clock jitter)。
1. 时钟偏差:clock skew,时钟到达两个触发器的时间的延迟的偏差,可为正值,可为负值。
2. 时钟抖动:clock jitter,相对于理想时钟沿实际时钟存在不随时间积累的、时而超前、时而滞后的偏移称为时钟抖动。针对于某个时钟的单个边沿来讲。
SDC 脚本:
set_clock_uncertainty -setup 0.2[get_CLK_CONFIG]
set_clock_uncertainty -hold 0.05[get_CLK_CONFIG] -
定义时钟latency:
clock latency = network latency + source latency;
- network latency: 从定义的时钟节点到触发器时钟之间的时钟网络延迟;
- source latency: 从时钟源出发,到定义的时钟节点的延迟;
SDC 脚本:
- 指定network latency:set_clock_latency 0.8[get_clocks CLK_CONFIG]
- 指定source latency:set_clock_latency 1.9 -source[get_clocks CLK_CONFIG]
- 指定一个小的source latency:set_clock_latency 0.85 -source -min[get_clocks CFG_CLK]
- 指定一个大的source latency:set_clock_latency 1.5 -source -max[get_clocks CFG_CLK]
-
注意:
当计算(b)图中两个触发器的clock skew时,
CLK_DFF1= 时钟从clock source 经由clock definition point 到达触发器DFF1,
CLK_DFF2= 时钟从clock source 经由clock definition point 到达触发器DFF2,
则从clock source 到clock definition point被算了两次。如果考虑特别悲观的情况,时钟在其中一条线路上延迟小,特别快,那么对时序要求就会特别高,时序分析时,就会得到一个特别悲观(安全)的结果;另一条线路延迟大,特别慢,时序要求特别低。那么对于两条路径中重合的部分(clock source 到clock definition point),时序分析值时存在误差的。故才EDA工具中使用CPPR,移除重复的悲观部分。
CPPR(CRPR),Clock Path Pessimism Removal(Clock Reconvergence Pessimism Removal),中文名“共同路径悲观去除”。它的作用是去除clock path上的相同路径上的悲观计算量。 -
区别
如果一个设计的时钟树已经建立好了,那么network latency是可以被忽略的。但source latency即使在生成时钟树之后,也是存在的。
在P&R时用set_propagated_clock指令得到latency。这是一个精确的,已经在后端确定好的时钟树。但,如果在P&R之前,如DC时,则是在时钟树生成之前的,那么latency是不够精确的估计值。
在时钟树综合以后,从clock source 到一个触发器的时钟端口的整体的clock latency= source latency + 从时钟定义节点(clock definition point)到触发器的时钟树的实际delay。
3. 生成时钟generated clocks
生成时钟,generated clocks,是由一个主时钟衍生出来的时钟,如分频时钟。指定主时钟用create_clock。
Clock source:CLKP;
CLKPDIV2:是CLKP的二分频生成时钟;
SDC脚本:
- 创建源时钟:create_clock -name CLKP 10 [get_pins UFF0/CLKOUT]
- 创建生成时钟:create_generated_clock -name CLKPDIV2 -source UFF0/CLKOUT\ -divide_by 2 [get_pins UFF0/Q]
如果将触发器输出端信号定义为一个master clock会有什么问题?
- 如果将触发器输出端定义为generated clock,则上图中的CLKP与CLKDIV2是同步时钟,那么,系统在做时序分析时,会把他们处理为同步时钟,分析时序路径时,就会有对时序路径的处理。
如果将触发器输出端信号定义为一个master clock,STA整个环境会认为这两个时钟之间没有任何关系,视为异步时钟,则不会对他们进行时序分析,setup,hold检查。如果原本是同步时钟的路径,没有时序分析,出现时序错误,那么静态时序分析就会混乱。
注意:
- 一个generated clock,时钟的源是master clock,而不是generated clock。
- generated clock 的 source latency 是从定义的master clock 到定义的generated clock。
- 由generated clock驱动的触发器的整体clock latency = master clock的source latency + generated clock 的source latency + generated clock的network latency;
4. 如图所示,MAIN_CLK由两个时钟SYS_CLK,CORE_CLK进行与操作生成的时钟,这种情况最好把MAIN_CLK定义为一个新的时钟。SDC 脚本:
create_clock -name SYS_CLK -period 4 -wave {0 2}[get_pins UFFSYS/Q]
create_clock -name CORE_CLK -period 12 -wave {0 2}[get_pins UFFCORE]
create_clock -name MAIN_CLK -period 12 -wave {0 2}[get_pins UAND2/Z]
注意:此处所陈述的时钟相关约束主要针对 reg2reg 时序分析路径。
[参考资料]
- 邸志雄老师的课件
- 集成电路静态时序分析与建模
【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~