3. 工艺角与PVT建模
多模式多角STA的第一块地基,不是写约束,而是把“工艺、电压、温度、寄生”这四类物理条件,翻译成PrimeTime能识别的corner对象。很多时序报告看起来矛盾,根源往往不在约束,而在于corner定义与库、设计三者没有对齐:库里的PVT命名、设计里例化的cell、以及脚本中声明的operating condition各说各话。
一、PVT与RC corner到底描述了什么
PVT是Process、Voltage、Temperature的缩写。Process指晶体管与互连的制造偏差,通常用SS(slow-slow)、TT(typical)、FF(fast-fast)等工艺角表示;Voltage是供电电压,例如0.72V、0.80V、0.88V;Temperature是结温,例如-40℃、25℃、125℃。三者组合决定标准单元和宏单元的延迟特性。
RC corner描述的是互连寄生参数。Cbest/Cworst/Rbest/Rworst是四种极端组合:Cworst表示电容最大、Rworst表示电阻最大,二者组合成Cworst_Rworst(常称RCmax),延迟最大;Cbest_Rbest(RCmin)延迟最小。需要注意的是,先进工艺中互连延迟的“最坏”并不总是RCmax,长线上RCmax更慢,而短线上Cbest可能因驱动负载轻、信号翻转快而更关键,因此不能只建一个RC corner。
PrimeTime本身不计算寄生,它读取的是已经抽取好的SPEF或寄生参数文件,因此RC corner在PT中体现为“同一设计、不同寄生文件”的映射关系。
二、从库到corner:映射关系怎么建立
标准单元库通常以.lib/.db形式提供,库名里已经编码了PVT信息,例如:
slow_0p72v_125c_ccs.db
typical_0p80v_25c_ccs.db
fast_0p88v_m40c_ccs.db
PrimeTime通过set_operating_conditions把库中的PVT条件绑定到当前分析场景,再用set_timing_derate补充片上偏差(OCV)。一个典型的corner定义如下:
set_operating_conditions -library slow_0p72v_125c_ccs \
-max slow_0p72v_125c -min fast_0p88v_m40c
set_timing_derate -early 0.95 -late 1.05
这里-max用于建立时间(setup)分析,取慢条件;-min用于保持时间(hold)分析,取快条件。这种“max/min混搭”正是多角STA的常见做法:setup看最慢路径,hold看最快路径。
RC corner则通过读入不同SPEF来体现:
read_parasitics -path ./spef/rcmax.spef
# 或
read_parasitics -path ./spef/rcmin.spef
把PVT与RC组合起来,就得到完整的corner,例如“ss_0p72v_125c_rcmax”用于setup,“ff_0p88v_m40c_rcmin”用于hold。工程上通常建立一张corner映射表,把逻辑名、库文件、SPEF、分析类型一一对应。
三、一致性检查:让报告可信的前提
corner定义完成后,必须做三类检查,否则后续所有时序数字都不可信。
第一,库与PVT是否匹配。用report_lib或get_libs查看当前加载的库,确认库名中的电压、温度与set_operating_conditions声明的一致。常见错误是脚本里写了0.72V,实际加载的却是0.80V的库,此时PT不会报错,但延迟值已经偏离。
第二,设计中的cell是否都能在库中找到。执行link_design后,用check_design检查是否有unresolved reference。若某个cell在slow库中存在、在fast库中缺失,hold分析就会失败或使用错误模型。多角STA中每个corner都要单独link一次,不能只link一个角就复用。
第三,SPEF与corner是否对应。用report_annotated_parasitics查看寄生标注率。若标注率低于预期,说明SPEF中的net名与当前设计不匹配,可能是综合后网表与布局后网表版本不一致。标注率不足时,PT会退回使用WLM(wire load model),延迟估算会明显偏乐观。
四、一个可复用的corner定义模板
把上述内容整理成脚本模板,便于在项目中复用。以下示例参数为教学假设,实际项目需按库和工艺替换:
# corner: ss_0p72v_125c_rcmax (setup)
set_operating_conditions -library slow_0p72v_125c_ccs \
-max slow_0p72v_125c -min fast_0p88v_m40c
read_parasitics -path ./spef/rcmax.spef
set_timing_derate -late 1.05 -early 0.95
# corner: ff_0p88v_m40c_rcmin (hold)
set_operating_conditions -library fast_0p88v_m40c_ccs \
-max slow_0p72v_125c -min fast_0p88v_m40c
read_parasitics -path ./spef/rcmin.spef
set_timing_derate -late 1.05 -early 0.95
可以看到,两个corner的-max与-min组合相同,区别在于主库和SPEF。这正是多角STA的组织方式:把“分析类型”与“物理条件”解耦,用corner名统一管理。
五、常见陷阱与判断依据
实践中三个陷阱最常出现。其一,库的默认operating condition被忽略:某些库自带default operating condition,若不显式set_operating_conditions,PT会使用库默认值,可能与预期PVT不符。其二,温度反转效应:在先进工艺低电压下,125℃不一定比-40℃慢,需通过实际库数据确认,不能凭经验假设。其三,RC corner与分析类型错配:setup用rcmin、hold用rcmax会得到过于乐观的setup和过于悲观的hold,掩盖真实违例。
判断corner定义是否正确的最终依据,是让PT分别报告每个corner下的WNS/TNS,并检查:setup的WNS应出现在慢角,hold的WNS应出现在快角;若出现反常,优先回查库、SPEF、derate三者是否与corner名一致。只有corner定义可信,后续的多模式约束与报告分析才有意义。