SDC命令详解:使用set_timing_derate命令进行约束
相关阅读
SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm=1001.2014.3001.5482
目录
指定降额比例
指定降额对象列表/集合
指定沿
指定最大、最小条件
指定早、晚条件
指定路径的类型
指定降额类型
指定约束
指定增量
写在最后
由于制造工艺的偏差,一块晶圆(Wafer)上的各个裸片(Die)拥有不同的特征,甚至一个裸片上的不同部位也可能出现偏差。前者称为全局工艺偏差(Global Process Variation),后者称为局部工艺偏差(Local Process Variation),这个偏差比全局工艺偏差小很多。
除了工艺参数(Process),PVT中的电压(Voltage)和温度(Temperature)在芯片上的分布也不是恒定的,PVT偏差这可能由下面几种因素导致:
- PMOS晶体管和NMOS晶体管的电压阈值偏差。
- PMOS晶体管和NMOS晶体管的沟道长度(尺寸)差异
- 由于电压降(IR Drop)导致的晶体管电压偏差。
- 局部热点造成的温度偏差。
- 互连线的刻蚀不均造成互连线电阻和电容的偏差。
上面的因素可以统称为OCV(On-Chip Variation),即片上变化。OCV会影响芯片上不同区域的单元延迟和互连延迟,在普通的STA分析中,我们只会选择一种工作条件(operating condition),并在此条件下分析,而没有考虑芯片上各区域的差异。因此,为了更好地模拟OCV效应的影响,set_timing_derate命令允许设计者设置时序降额,简单来说,就是允许某些路径快一些,允许某些路径慢一些,STA时会考虑到这些因素,从而分析最难满足的情况。
下面是set_timing_derate命令的BNF范式(有关BNF范式,可以参考以往文章)为:
set_timing_deratevalue object_list[-rise] [-fall][-min] [-max][-early] [-late][-clock] [-data][-net_delay] [-cell_delay][-cell_check] [-min_period] [-min_pulse_width][-increment]//注:该命令的object_list参数一定要放在value参数后
指定降额比例
value参数指定了降额后的比例(在0.1到2之间),比如可以指定value为0.9,表示计算值为初始值的90%,即降额了10%。
指定降额对象列表/集合
object_list用于指定降额值用于哪些对象,可以是叶单元、层次单元、库单元。当不指定降额对象列表/集合时,降额值用于整个设计,当整个设计的降额值和单元的降额值冲突时,以单元的降额值为准。
对于列表而言,如果有多于一个对象,需要使用引号或大括号包围(对使用集合无效),关于列表和集合的区别,可以参考下面的博客。
SDC命令详解:使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数https://chenzhang.blog.csdn.net/article/details/147144571
指定沿
-rise选项用于指定降额值作用于尾部是上升沿的时序弧、-fall选项用于指定降额值作用于尾部是下降沿的时序弧。如果这两个选项都没有指定,降额值同时作用于所有时序弧(相当于它们同时指定)。
指定最大、最小条件
-max选项用于指定降额值作用于最大延迟分析(一般情况下,如果不开启on_chip_variation,这指的是建立时间检查),-min选项用于指定降额值作用于最小延迟分析(一般情况下,如果不开启on_chip_variation,这指的是保持时间检查)。如果这两个选项都没有指定,降额值同时作用于最大延迟和最小延迟分析(相当于它们同时指定)。
指定早、晚条件
-early和-late选项在set_clock_latency命令中也有,如下面的博客所示。
SDC命令详解:使用set_clock_latency命令进行约束https://blog.csdn.net/weixin_45791458/article/details/136130769?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522290c4b7d417404a42653da4af39c2fc8%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=290c4b7d417404a42653da4af39c2fc8&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-136130769-null-null.nonecase&utm_term=set_clock_latency&spm=1018.2226.3001.4450 -early选项用于指定降额值用于最快的路径,-late选项用于指定降额值用于最慢的路径。在建立时间分析和保持时间分析中,会对发射路径和捕获路径的这点进行考虑,给出最差情况下的分析结果。如果这两个选项都没有指定,降额值同时作用于发射路径和捕获路径(相当于它们同时指定)。为了与实际情况吻合,-early指定的降额值应小于1,-late指定的降额值应大于1。
具体来说,对于建立时间分析,发射路径上的时钟路径和数据路径会使用-late选项指定的最慢降额值,而捕获路径上的时钟路径和数据路径会使用-early选项指定的最快降额值,这是最坏的情况下的结果;对于保持时间分析,发射路径上的时钟路径和数据路径会使用-early选项指定的最快降额值,而捕获路径上的时钟路径和数据路径会使用-late选项指定的最慢降额值,这是最坏的情况下的结果。
指定路径的类型
-clock选项用于指定降额值只用于时钟路径,-data选项用于指定降额值只用于数据路径。如果这两个选项都没有指定,降额值同时用于时钟路径和数据路径(相当于它们同时指定)。
指定降额类型
-net_delay选项用于指定降额值只用于互连延迟,-cell_delay选项用于指定降额值只用于单元延迟,需要注意的是,-net_delay选项不能与对象列表/集合一起使用,因为互连延迟的指定是全局性的。
指定约束
默认情况下,建立时间、保持时间之类的时序约束不会被降额。
-cell_check选项指定对单元的建立时间、保持时间约束应用降额,该选项不能与-clock、-data、-cell_delay、-net_delay选项一起使用。需要注意的是,set_input_delay命令设置的输入延迟和set_output_delay命令输出延迟不会被降额影响。
-min_period选项指定对单元的最小周期约束应用降额,该选项只能与-rise、-fall选项一起使用,此时-rise选项表示使用上升沿到上升沿计算周期,-fall选项表示使用下降沿到下降沿计算周期。
-min_pulse_width选项指定对单元的最小脉冲宽度约束应用降额,该选项只能与-rise、-fall选项一起使用,此时-rise选项表示高电平脉冲宽度,-fall选项表示低电平脉冲宽度。
指定增量
-increment选项用于设置增量降额值,总降额值为基准降额值加增量降额值。
写在最后
随着工艺尺寸的不断缩小,静态时序分析受到的制造过程变化影响日益显著。传统的解决方案是使用一个全局的固定系数(set_timing_derate命令)来为设计添加裕量,以应对片上变化(On Chip Variation, OCV),虽然在130nm和90nm工艺节点时仍属合理,但在更先进的制程中已显得过于保守,带来了过度设计、性能下降和设计周期延长等问题。
为解决这一挑战,PrimeTime在2008年左右引入了高级片上变化(AOCV)技术,这是对传统OCV方法的自然扩展,它通过更细致和上下文相关的建模方式,为设计提供了更真实、低悲观度的时序裕量控制。