sign off 标准:
一般来说:Timing sign-off Corner=library PVT+ RC corner + OCV,如:
OCV:
通常在foundry给出的表格中,OCV一列还会有design margin 信息,即sign-off要加的uncertainty=clock jitter + Xps setup/hold margin + DPT,其中clock jitter由用户根据所用PLL的精度来确定;Xps由foundry提供,如:30ps for setup, 40ps for hold; DPT一项表示需要加的额外margin用于cover mask misalignment引起的偏差,该值亦由foundary提供,比如5ps for setup, 3ps for hold。
世界上没有两片相同的叶子,半导体世界里没有两只相同的管子。library中的cell delay是在某个固定的PVT(operating condition)下仿真得出的,也就是下图中的Nominal delay,而实际上在芯片内部由于工艺偏差、电压降、温度变化,cell的delay并不是一个固定值,而是一个随机值,遵循高斯分布或门特卡洛分布。在STA中用OCV来模拟这一『特征』,OCV全称on chip variation,用于描述不同管子间由于工艺偏差、电压降、温度变化引起的delay变化,也用于描述工艺偏差引起的net厚度宽度的变化从而导致net的电容电阻变化
在描述OCV之前需要阐述清楚两个问题:
PVT跟OCV都是用于描述Process、Voltage、Temperature对timing的影响,两者有何区别?
PVT:主要取决于外部因素,在某一固定的工艺点、芯片的工作电压、周围环境温度对芯片性能的影响。更直白的理解:同一颗芯片在不同工作电压、环境温度下的性能表现。
OCV:用于模拟芯片内部不同管子由于工艺偏差、电压降、温度变化引起的性能变化,这种变化更宏观的表现是:不同芯片在相同PVT下的性能表现不同。
在timing sign-off时,为什么要在Nominal delay上加OCV?
因为Nominal delay是在固定PVT下仿真得出的delay,而实际上由于OCV的影响,管子的delay是呈高斯分布或门特卡洛分布,要想保证yield,就必须在timing sign-off时将OCV考虑在内,以保证大部分管子都可以满足时序要求。对每一代工艺,foundry都会做大量测试,针对每个corner找到一组适合的OCV值,这组值可以保证足够高的yield,而如果进一步加紧这个值,并不会更有效的提高yield。在SOCV/POCV里的多少sigma(如:3-sigma)的选取也是出于相同的考虑。
方法学上概念清晰了之后,EDA工具端的操作就十分简单了,在EDA工具中如何设置OCV?每家工具都有各自不同的命令/变量控制,跟OCV相关的大致可分为四部分,此处以Tempus的命令为例:
全局控制:set_analysis_mode -analysisType onChipVariation
设置OCV:set_timing_derate -cell_delay/net_delay/cell_check -late/early -data/clock (1-d%);其中d%是foundry在sign-off表格中给出的OCV值
Report OCV: report_statistical_timing_derate_factors
Debug timing时在timing report中将derate列显示出来:set_global report_timing_format {instance arc delay slew arrival user_derate}
由于工艺的进步,flat OCV在先进工艺如16,7中已经逐步被AOCV, SOCV/POCV取代,以剔除悲观度。
OCV问题:
为了精确性,为了剔除悲观度。用set_timing_derate来设置OCV,对于一个固定的corner,只能对data/clock, cell/net, late/early分别设不同的值,这个值设置小了,难以保证yield,设置大了,比较悲观,设置上了,也有不能cover最悲观的部分,而对另一部分又过于悲观的可能。
AOCV/SBOCV: