在现代集成电路(IC)设计中,静态时序分析(Static Timing Analysis, STA)是确保芯片功能正确性和性能达标的关键环节。随着半导体工艺进入深亚微米乃至纳米级(如7nm、5nm、3nm),制造过程中的工艺偏差、电压波动和温度变化对电路时序的影响愈发显著。为了在设计阶段准确预测并应对这些不确定性,业界发展出了一系列建模技术,包括Corner分析、OCV(On-Chip Variation)、AOCV(Advanced OCV)和POCV(Parametric OCV)。这些方法共同构成了STA中处理工艺变异性(Process Variation)的核心框架。本文将系统详解这四种技术的原理、差异及其在先进工艺节点下的应用。

一、Corner 分析:基础的工艺角建模

Corner 是指在静态时序分析中,为模拟最坏和最佳工艺条件而设定的一组极端PVT(Process, Voltage, Temperature)和RC(电阻电容)的组合。常见的工艺角包括:

  • TT(Typical-Typical)
    :晶体管速度处于典型值。
  • FF(Fast-Fast)
    :NMOS和PMOS均较快,对应最小延迟。
  • SS(Slow-Slow)
    :NMOS和PMOS均较慢,对应最大延迟。
  • FS(Fast-Slow)
    :NMOS快,PMOS慢。
  • SF(Slow-Fast)
    :NMOS慢,PMOS快。

在STA中,设计需要在多个Corner下进行分析,例如在SS corner下验证建立时间(Setup)是否满足,在FF corner下验证保持时间(Hold)是否违规。这种“多角分析”(Multi-Corner Analysis)确保了芯片在所有预期的工艺波动范围内都能正常工作。

Corner 分类:

PVT Corner: 

    Process corner– FF/TT/SS等;因为做芯片的时候晶圆是个圆。圆的各处显然没法做的一模一样,比如掺杂,比如沟道长度,等等东西,很容易不一致,所以有些地方做得快,有些地方做的慢。 

    Voltage corner–Nominal/Low/High; 电压越大,电流越大,导致电容充放电越快,所以晶体管速度越快。voltage corner主要靠IR DROP保证。DROP太大会导致晶体管太慢,功能失效。一般要让irdrop < 10%.

    Temperature corner–40°C/25°C/125°C (+0°C, 85°C 150°C等);

 RC corner:

    Cmax/Cmin; RCmax/RCmin等;

Sign off corner =

        Process Corner + RC Corner + VT corner + OCV

(Generally : Merge P+V, while crosscheck temperature for T-inversion in advanced node.)

典型Corner组合


二、OCV:片上变异性建模的起点

OCV(On-Chip Variation)是对Corner分析的补充,用于建模片上变异性(On-Die Variation),即同一芯片上不同位置的晶体管因制造工艺微小差异而导致的性能波动。这种局部变化无法通过Corner分析完全覆盖。

OCV通过在STA中引入时序裕量(Timing Margin)来补偿这种不确定性。具体做法是:

  • Setup分析中,数据路径延迟被“加慢”(worst-case),时钟路径延迟被“加快”(best-case),以模拟最差的建立时间场景。
  • Hold分析中,数据路径延迟被“加快”,时钟路径延迟被“加慢”,以防止保持时间违例。

OCV的裕量通常以百分比形式指定,例如±10%,由工艺库或设计团队根据经验设定。实际上,现代工艺,这么粗暴的计算会导致需要留一个非常大的ocv余量,根本收敛不了时序。所以为了让这个OCV更加精准,大家又发明了好多加这个OCV值的方法。

OCV一般是针对工艺节点在90nm以上的芯片制造,到了90nm一下,45nm/22nm等等,如果还用这种ocv的方法,直接在data path和clock path上增加统一的derate值,可能会增加signoff的悲观程度,并导致过度设计、降低设计性能和更长的设计周期。因此为了降低我们signoff时候ocv带来的悲观度,引入了更先进的ocv分析方法:AOCV/POCV。其实AOCV/POCV的引入,无非是在OCV的基础上,降低我们STA的悲观度,从而减少ECO的工作量。


三、AOCV:基于路径深度的精细化建模

    1. Overview

       为解决OCV的过度悲观问题,AOCV(Advanced On-Chip Variation)被提出。AOCV的核心思想是:路径越长,其累积的随机工艺偏差越大;路径越短,偏差越小。因此,AOCV根据路径的逻辑级数(Depth)动态调整OCV裕量。

AOCV使用查找表(Look-Up Table, LUT)形式,输入为路径深度和工艺角,输出为相应的OCV系数。例如,一个10级门的路径可能应用8%的裕量,而一个2级门的路径仅应用3%。这种基于统计的建模方式更符合实际物理现象。

此外,AOCV还考虑了空间相关性(Spatial Correlation),即相邻区域的工艺偏差具有一定的相关性,而非完全独立。通过引入空间衰减因子,AOCV能够更精确地模拟局部波动。

    2. AOCV原理介绍

      Advanced on chip variation,相比较于OCV来说,对于悲观度的去除很有效。相比较与ocv对于整个design中的lauch/capture path设置统一的derate值,aocv通过将cell derate值与cell的逻辑深度以及实际的位置结合起来进行derate值的设定。那么这种derate如何能够设置到具体的cell呢,其实是我们在跑STA时候会读入相关的aocv lib file,里面有专门对相关的cell进行的aocv derate值的描述。举例如下所示为3.0版本的一个INV的aocv描述:

> version: 3.0> group_name: core_tables> object_type: lib_cell> object_spec: LIB/INVX1> rf_type: rise fall> derate_type: late> path_type data clocck> depth: 1 2 3 4 5> distance: 500 1000> table: > 1.123 1.119 1.080 1.060 1.054 > 1.125 1.121 1.082 1.062 1.056

该部分是一个二维表格的描述,如果只有一维表格描述,一般就只有depth相关的内容,没有distance相关内容。那我们知道了相关的derate值如何查找表得到,可是这个查找表的输入两个值:depth和distance又是从何而来呢?接下来就要介绍两种aocv技术,GBA mode和PBA mode,其中两种mode对应的悲观度不同,对应的depth和distance 值不同,相应的结果也是不同的。

2.1 GBA-AOCV

2.1.1 首先关于depth:

基于GBA mode 的AOCV技术,关于depth的获取,如下图所示,拿buf0为例来讲,用GBA的方式获取buf0相关的path ,那么他的depth值就会有多个可能,比如作为data path时候,buf0到FF1有三个cell,因此depth为3,作为lauch path时候,buf0到FF2的D有两种可能5/6,取较小者,作为capture path时候,buf0到FF2的CP端口有四个cell,因此depth为4,那么buf0在报FF1到FF2的这条path时候,他会取几呢?答案是会取3。它会取GBAmode下抓取的所有的depth中的最小值。因为在上面的lib里面可以看到,depth越小,相应的derate值也越大。所以说GBA会取最悲观的数据进行derate设置。

2.1.2 其次关于distance:

无论是基于cell计算distance还是基于net计算distance,GBAmode下,总会选取整个GBAmode组里面最大的那个distance值作为我们GBA check时候的derate值的设置依据,因为在二维查找表总可以看出来的,distance越大,对应的derate也是越大的,举例越远意味着我们工艺制造过程中的差距可能越大。

2.2 PBA-AOCV

PBA mode其实是在GBA抓取的path group组里面进行更加细致的分析,不像GBA那么的悲观,但是相对来说用的run time就要更长了。

2.2.1 depth获取

关于PBA mode下的path获取,如下图所示,首先会去除一个common point,因为相同的common点,也就是同一个cell,在实际的特定的工作条件下的相关属性是一定的,不可能由于被分为lauch或者capture而改变,因此在STA path中会增加crpr的技术取消除common point的悲观性。言归正传,PBA的就是非常具体的path的分析了,如下图所示,为FF1到FF2的timing path,针对这条path,buf0作为common point点不用关注,而穿过FF1的path就只能被认为是lauch path,depth5/6不同对应不同的timing 报告。而capture path在经过约束的分析之后也只能作为capture path,因为它到l FF2的cp端口,不可能是data path,因此capture path的depth为3。可以看到PBA和GBA的区别,PBA具体到每一条真实的path,不会把一个group的path放在一起分析,而GBA是把一个group的path里面最差 的情况用到了所有的path中。因此PBA降低了悲观度。

2.2.1 distance获取

关于distance,PBA和GBA也是不同的,这个不同之处和depth的获取有类似的情况。如下图所示,pba针对的是一条具体的path,那么它的distance就是唯一的,每一个cell的distance也就是唯一的,而不像GBA中的选取这个group组中的最大的distance值去进行计算,因此来说PBA是降低了悲观度的。

3. AOCV使用

STA阶段如何使用AOCV,其实就是正常的需要的内容读入,参考Timing Check – Timing signoff env之后,设置aocv analysis的enable然后specify aocv相关信息即可。

> set_app_var timing_aocvm_enable_analysis true

设置了这个命令之后,在update timing步骤,会自动进行GBA aocv 的timing update

> read_aocvm xxx.aocvm

这个就是lib相关的读入了,只有读入了才会有相关的二维查找表。

这两个就是主要的AOCV读入的必不可少的内容。当我们搞完之后如何查看我们的AOCV的设置呢?可以通过

STA–Corner, OCV,AOCV,POCV 详解
> report_aocvm  会打印出被aocvm annotated的cell的数量> report_aocvm [get_timing_path -from FF1/CP -to FF2/D] -path_type full_clock -pba_mode path 会把相关的path的distance/launch depth/capture depth搞出来> reportt_aocvm [get_timing_arc -from buf0/I to buf0/Z] 会把buf0相关的详细的aocvm信息打印出来

4. 注意事项

    >aocv file支持一维和二维查找表

    >有很多相关的变量设置针对我们在实际计算时候如何考虑data /clock depth的内容,或者针对clock/data设置derate内容等等还是很复杂的不展开讨论,可自行研究

    >guard-banding是人为设定的和工艺无关的和aocv有关的影响因子,比如和IR drop/专门设定margin等等。在设定了guardband的影响因子之后,对于一条arc上的 总的影响就是Faocv*Fguardband。guardband只对aocv的内容有影响,之外毫无影响。

set_timing_derate -aocvm_guardband -early 0.95set_timing_derate -aocvm_guardband -late 1.05

    >ocv和aocv之间的优先级是有一些规定的,感兴趣的可以自己研究。可以通过控制某些变量让ocv的设置或者aocv的设置无效。如果ocv和aocv都想用到,那么可以通过在命令中增加-increment命令,使得derate可以叠加。比如本来aocv和guard band计算之后buf0的late derate为1.05,early为0.95,那么加上如下命令,最终late为1.08,early为0.92

set_timing_aocvm_enable_analysis true 设置了aocvset_timing_derate -increment -late 0.03 [get_cells buf0]set_timing_derate -increment -early -0.03 [get_cells buf0]

四、POCV:参数化的统计时序分析

随着工艺进入FinFET时代,晶体管对微小工艺偏差极为敏感,仅靠路径长度已不足以准确建模变异性。为此,POCV(Parametric On-Chip Variation)应运而生,成为当前最先进的片上变异性建模方法。

POCV将延迟变异性建模为多个工艺参数的函数,包括:

  • 晶体管有效沟道长度(Leff)
  • 阈值电压(Vth)
  • 负载电容(Capacitance)
  • 驱动强度(Drive Strength)

在POCV中,每个单元的延迟被视为一个随机变量,具有均值(μ)和标准差(σ)。STA工具通过统计时序分析(Statistical STA, SSTA)方法,计算路径延迟的累积分布,评估电路在给定时序约束下的失效概率。

例如,POCV可以回答:“在99%的制造样本中,该路径是否能满足时序要求?”而非简单地判断“是否违例”。

1. Overview

Process variation可以简单分成die-to-die和on chip variation(ocv),die-to-die的可以通过signoff过程中不同的check view去cover,on chip variation需要通过signoff过程中设置不同的derate值去模拟悲观化相关cell。

OCV:通过在timing path上设置统一的early/late derate做hold和setup的check,这样的设置方式很简单,但同时很粗暴,会导致大部分cell的delay过于悲观,而小部分的可能又过于乐观。

AOCV:不再是在path上设置统一的值,而是通过path depth获取随机variation,distance获取on-die variation的方式进行设置。这种设置相对于ocv更加精确。但是对于gba mode来说,path depth造成的variation的获取还是过于悲观,用pba又会耗费大量的run time。且variation的获取不受trans和load的影响。

POCV:随着随机variation相对于chip variation的占比增大,pocv的出现,能够更好的meet实际的工艺需求。相对于aocv ,大大减小的pba和gba之间的悲观性的差距。能大大减小eco的effort。Pocv对于cell的variation不再是path depth相关的,而是基于统计学搞出来的。每一个cell,都会通过仿真得到相关的高斯分布,那么每一个cell都会拥有相应的mean值和sensit值,在update

timing时候,不再是统计depth计算,大大节省时间。另外POCV也支持aocv中关于chip variation的模型,可以通过distance来进行derate设定。

2. POCV Analysis

POCV关于cell的random variation到底怎么搞到的?这边简单叙述一下:

如下图上部分,一个cell最大最小值可能限定在一个范围内,那芯片工艺制造之后,它的cell delay落到最大最小值内的概率为1。那通过一系列的spice仿真,发现cell的delay的概率分布非常靠近一个高斯分布,如下图下部分所示。

这是一个概率密度分布函数,对于高斯分布,当我们的delay取值为u+3σ时候对应的概率值为0.9973,因此我们对于cell delay分布类似于高斯分布的variation,一般都设置3σ的方式进行cover。这也是我们POCV的cell delay计算方式:

Delay= Delaymean+3σ,

其中Delaymean其为delay的均值,由lib中的trans/load决定。σ的来源有两种方式,一种是设置single coefficient,σ等于Delaymean * single coefficient;

另外一种是吃相关的LVF文件,里面也是类似于查找表的形式,σ取决于trans和load。

3. POCV Flow

Pocv 的flow包含以下主要步骤:读入std库,读入pr后的netlist,读入相关的约束文件。然后读入pocv side file(如果是用的lvf格式的lib,那么就不需要这个了)然后读入spef,如果需要设定distance-based的derate那么需要带上坐标信息从而方便计算距离。数据读入后是能pocv的分析然后update timing就可以查看相关的报告了

set_app_var timing_pocvm_enable_analysis trueset_app_var timing_pocvm_corner_sigma 3read_ocvm pocv_coefficient_file_nameread_ocvm pocv_distance_based_derating_file_name

3.1 Guard-banding in POCV

Guard-banding这个说白了也是一个类似于derate值的东西,但是它和process是无关的。比如我们针对超低电压,或者考虑了ir drop等问题,想而外在已经存在的derate基础上在设置一些悲观度,就可以用这个。

set_timing_derate –cell_delay -pocvm_guardband -early 0.95set_timing_derate –cell_delay -pocvm_guardband -late 1.05

其对应的计算在如下图所示,这个变量在mean值和sigma值中都会用到

4. POCV report

report_ocvm -type pocvm –cell_delay –list_not_annotated –coefficientreport_ocvm -type pocvm [get_cells I]

会把用pocv coefficient的cell给表示出来,如果有设置distance derate,也会描述出来,如下图所示没有distance derate

report_timing -derate

这种会在timing 报告中把derate相关的设定个报出来,还会报出mean、sensit、incr、path,其中incr和path不再解释,mean和sensit可以理解为累计的高斯分布函数变量,可以满足incr=mean+/-3*sensit

report_timing -variation

会打出更加详细的pocv相关的高斯变量的报告如下所示,其中Incr对应的mean、sensit、corner对应的为单一cell相应的高斯分布变量,满足corner=mean+/-3sensit,而Path中的相关值为累计高斯分布变量,首先依然满足Value=Mean+/-3sensit,而Path中的Mean等于Path中的前一级Mean加上Incr中的本级别的mean,而Path中的Sensit等于Path中上一级的Sensit的平方值加或减Incr中的sensit的平方值,再开平方。其实某一级别的delay值,在考虑了高斯分布后,就等于本级别Path(Mean,Sensit) + 本级Incr(Mean,Sensit)

report_delay_calculation -from I/I -to I/ZN -derate

可以报告出该cell上到底有设置什么样的derate。如下图所示可以看出来,cell delay derated的计算方式以及sigma的计算方式,而我们上面报告中所示的Incr的Mean值就是cell delay derated的值。而在报告中显示的derate值,也会相应的在如下的计算中体现出来

五、总结

  • Corner + OCV
    :适用于成本敏感、性能要求不高的设计。
  • Corner + AOCV
    :平衡精度与效率,适用于中高端SoC。
  • POCV
    :追求极致性能,适用于先进节点高性能芯片。

Corner、OCV、AOCV和POCV代表了静态时序分析中处理工艺变异性技术的演进历程。从全局到局部,从固定到动态,从确定性到统计性,这些方法不断推动着IC设计向更高精度、更高效率的方向发展。在先进工艺节点下,合理选择并组合使用这些技术,是确保芯片成功流片和商业成功的关键。设计工程师应深入理解其原理与适用场景,以应对日益复杂的时序挑战。