STA | 什么是Noise噪声检查?

这是数字芯片设计时序分析之DRV的第11篇,更多DRV文章就在 这里。 

什么是噪声(Noise)?


在 SI Timing 这篇文章中,我们探讨了考虑串扰情况下的时序延时,其单位为时间(纳秒 ns)。而噪声则是考虑串扰情况下的信号抖动,其单位为电压(毫伏 mV)。
噪声代表了实际电平脱离理想电平的状态,当噪声超出电路的噪声容限时,则会导致电路故障。因此,噪声检查非常重要。
噪声包含了Noise area噪声面积和Noise height噪声高度两种,当然也可以按照噪声发生的部位来分成普通噪声和时钟噪声。

如何检查噪声?


检查流程

下图是用PrimeTime检查时序串扰的流程图。

STA | 什么是Noise噪声检查?_第1张图片

与串扰时序检查相比,只是多了最后两步。

第一步:读取网表。这一步骤与普通时序检查相同。
第二步:开启串扰分析功能,命令是set_app_var si_enable_analysis true
第三步:读取RC信息,这一步与普通时序检查不同的地方在于,需要指定参数-keep_capcitive_coupling。
第四步:读取时序约束SDC。这一步与普通时序检查相同。
第五步:进行时序分析。这一步与普通时序检查相同。
第六步:进行噪声检查。这一步是时序串扰特有的。
第七步:最后分析噪声。

注意,在检查噪声信息之前,需要先update_timing, 因为SDC约束中的case value等设置会影响噪声的结果。
检查库文件中是否有丢失噪声模型信息的情况。在update_noise之前做此检查十分必要,因为如果噪声信息丢失,运行时间会很久,而且结果不准确。
check_noise -verbose -include noise_immunity
check_noise -verbose -include noise_driver
以上检查通过后,就可以使用update_noise来更新设计的噪声信息。

添加裕量

为了保证芯片能正常工作,一般需要加入一些裕量。加裕量的情况大致可以分为四种情况。
第一种:输出端口
set_noise_margin ratio*VDD [all_outputs]
ratio的典型值为0.4

第二种:标准单元
set_noise_derate -above -low -height_factor 1.1
set_noise_derate -below -high -height_factor 1.1
加入10%倍的裕量。

第三种:Macro单元,输出端口加入25%的裕量,输入端口加入100%的裕量。
使用以下命令,对噪声高度检查加入裕量。其中,输入端口只是针对有CCSN信息的情况加入。
set_noise_derate -above -low -height_factor value macros_pins
set_noise_derate -below -high -height_factor value macro_pins

第四种:没有CCSN信息的单元,加30%的裕量。
如何判断一个pin有没有CCSN信息呢?可以通过检查pin的属性,是否有has_ccs_noise_*等信息。例如:
has_ccs_noise_above_high
has_ccs_noise_above_low
has_ccs_noise_below_high
has_ccs_noise_below_low
对这些pin,用以下命令加入裕量:
set_noise_margin -above -low margin*rail libpin
set_noise_margin -above -high margin*rail libpin
set_noise_margin -below -low margin*rail libpin
set_noise_margin -below -high margin*rail libpin
其中,margin是裕量,典型值是0.3。rail是pin的电压值,可以从PrimeTime的pin属性power_rail_voltage_max属性中获取。

获取报告

如果得到噪声的分析结果呢?在PrimeTime中可以使用以下命令来获取到噪声的结果。
噪声面积:report_noise -slack_type area -verbose -nosplit -all_violators
时钟噪声面积:report_noise -slack_type area -verbose -nosplit -all_violators -clock_pins
噪声高度:report_noise -slack_type height -verbose -nosplit -all_violators
时钟噪声高度:report_noise -slack_type height -verbose -nosplit -all_violators -clock_pins

如何修复噪声?


噪声的修复与串扰类似。
首先,如果受害端的驱动单元的驱动能力太弱,可以增强其驱动能力。例如,更换更低阈值电压(low VT)的单元,或者更换成大驱动的单元。也可以减弱攻击端的驱动能力,不过这个方法不常用。
其次,如果有长线,可以在中间插入一个缓冲器(buffer)。
然后,可以增加绕线间隙,使用特殊绕线规则(Non default routing,NDR)。这个方法最好在布局布线阶段就使用,如果到了ECO阶段出现了串扰问题后再用,可能效果不好,因为绕线资源很可能已经不够了。
最后,可以更改绕线。例如,更换绕线层,或者加绕线屏蔽保护(shielding)。

你可能感兴趣的:(STA之DRV,STA,DRV,芯片设计,数字后端)