数字IC设计学习笔记_静态时序分析STA_配置STA环境1

数字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. 如何指定时钟

  • 定义时钟

    1. 时钟源(clock source):时钟时从芯片上的哪个port,或者是pin,或者是cell发出的
    2. 时钟周期(period)
    3. 时钟占空比(duty cycle):高电平/周期
    4. 边沿翻转时间(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;

    1. network latency: 从定义的时钟节点到触发器时钟之间的时钟网络延迟;
    2. source latency: 从时钟源出发,到定义的时钟节点的延迟;
      在这里插入图片描述

    SDC 脚本:

    1. 指定network latency:set_clock_latency 0.8[get_clocks CLK_CONFIG]
    2. 指定source latency:set_clock_latency 1.9 -source[get_clocks CLK_CONFIG]
    3. 指定一个小的source latency:set_clock_latency 0.85 -source -min[get_clocks CFG_CLK]
    4. 指定一个大的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检查。如果原本是同步时钟的路径,没有时序分析,出现时序错误,那么静态时序分析就会混乱。

注意

  1. 一个generated clock,时钟的源是master clock,而不是generated clock。
  2. generated clock 的 source latency 是从定义的master clock 到定义的generated clock。
  3. 由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 时序分析路径。


[参考资料]

  1. 邸志雄老师的课件
  2. 集成电路静态时序分析与建模

【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~


  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值