简介:面向集成电路设计与版图工程师的SMIC 40LL工艺设计签核指南文档,聚焦中芯国际40纳米低漏电(Low Leakage)工艺节点在tape-out前需要完成的设计签核流程与合规要求。资源包内含1份PDF文档,解压后约2.18MB,共36页,内容涵盖文档版本与保密声明、签核项目清单、各检查环节的判定标准及责任划分,便于读者按官方规范逐项核对设计交付物。目前已吸引496人学习下载,说明该文档在数字后端与物理验证圈内具有较高的参考需求。读者可从中获取签核检查的完整框架与项目条目,对照自身项目梳理DRC、LVS、ERC、天线效应、密度检查等环节的准备顺序,理解工艺厂对交付数据的格式与完整性要求,也可作为团队内部流程培训与签核评审的对照材料,减少因漏项导致的反复迭代与流片风险。
1. 签核不是最后一道工序:40LL 设计为什么在流片前就被“锁死”
有个模块,时序连续三周干净,所有路径 slack 都是正的,团队已经准备交付。回片后在一个低温 corner 上 hold 挂了,复现出来只有几十皮秒的缺口。追到最后发现不是设计写错了,是 OCV derate 用的库 corner 和签核指南里给的那套 corner 根本不是同一组参数。这类事故在 40LL 这种“看起来已经很熟”的节点上反而高发,因为大家默认它足够简单。40LL 的 sign-off guide 值得逐页拆,原因就在这里:它把代工厂对工艺能力的承诺,翻译成了设计侧一条条可验证的断言,从库的 VT 档位一直管到你用什么版本的工具跑最后一遍 STA。搞懂它的机制,等于拿到了一张“哪些数字可信、哪些数字只是自己骗自己”的对照表。
2. 参考流程与版本矩阵:为什么“我跑通了”和“签核通过”是两件事
2.1 四个门禁步骤,把设计质量切成可判定的段
签核指南描述的参考流程里,只有四个步骤被定义为 main gating steps:timing signoff、power signoff、physical verification、manufacturability analysis。注意“gating”这个词,它的含义是前一步没过,后一步的结果不具备判定价值。这和很多团队的实际做法有偏差——现实里常见的是 PnR 收尾后同时起一堆脚本,STA、IR drop、DRC 并行跑,谁先出结果谁先看。
这种并行在工程效率上没毛病,但在判定逻辑上有漏洞。举例:DRC 报出的密度违例可能来自没做 dummy fill,而 dummy fill 会改变寄生电容,寄生变了时序要重抽。并行跑出来的时序结果是“无 fill 版图的时序”,它对最终签核没有约束力。指南把顺序定死,本质是承认数据之间存在依赖,不是一个流程图画得好看的问题。
四个门禁之间有明确的产物传递关系:
| 门禁步骤 | 主要输入 | 判定产物 | 下游依赖 |
|---|---|---|---|
| 时序签核 | 标准单元库、PEX 网表、SDC 约束 | 各 corner 的 setup/hold 余量 | 无,但依赖库与 PEX 版本一致 |
| 功耗签核 | 电源网格、开关活动率、封装模型 | 静态压降、动态压降占比 | 依赖 PnR 后的最终版图 |
| 物理验证 | GDS、网表、DRC/LVS 规则 | 干净 DRC、LVS 一致、签核 PEX | dummy fill 之后必须重跑 |
| 可制造性分析 | 光刻模型、密度分布 | LFD 热点、dummy 覆盖率 | 依赖物理验证通过后的版图 |
表格里最容易出事的是“下游依赖”这一列。功耗签核依赖最终版图,但最终版图要经过 dummy fill;物理验证的 PEX 输出又要回头喂给时序。这个环一旦被并行打断,最后交出去的就是四份互相不自洽的报告。
2.2 工具版本为什么算签核内容的一部分
版本矩阵那张表,很多人扫一眼就过去了,觉得是文档凑页数。实际它是整份指南里最硬的一条约束。原因在三个层面。
第一层是模型格式。标准单元库的表征结果、寄生提取的 RC tech file、物理验证的规则 deck,这三类输入都有版本语义。库文件里的时序模型在某些版本之后换了插值方式,同一份 lib 在新旧工具里算出来的 cell delay 会有系统性偏移。这个偏移不大,几皮秒量级,但它会在成千上万条路径上累积,最后体现为某个 corner 上整体余量缩水,而你会以为是设计退化了。
第二层是算法行为。串扰增量延迟算不算、算几轮迭代、OCV derate 和 AOCV 的叠加顺序、hold 检查里 clock 和 data 的 derate 是分别加还是合并加,这些在不同版本里的默认值不一样。默认值一改,同一份网表跑出来的数字就变了。签核指南锁版本,等于锁住这一串默认行为,让“签核通过”这个结论在时间上可复现。
第三层是规则与工具的匹配。工艺侧的 DRC 规则文件是针对特定工具版本写的,规则里的某些操作在旧版本里不支持,会被静默忽略。静默忽略是最难查的——它不报错,只是少查了一类图形。等到批量出问题时,你已经流片了。
我一般会建议把环境快照做成签核交付物的一部分,跟着报告一起归档:
# 签核环境快照:把"跑出结果的环境"固化成可复核记录 SIGNOFF_TAG="40ll_mpw1_sta_r3" OUT="signoff_env_${SIGNOFF_TAG}.log" { echo "== tag: ${SIGNOFF_TAG} ==" echo "== host: $(hostname) ==" echo "== start: $(date -Iseconds) ==" # 工具主版本:签核指南按阶段规定了推荐版本区间,主版本偏离要单独说明 sta_bin -version 2>&1 | head -n 1 pex_bin -version 2>&1 | head -n 1 drc_bin -version 2>&1 | head -n 1 # 工艺侧输入:库、RC tech、PEX 规则文件的校验和,防止"换库不换结果" md5sum lib/*.lib rc/*.tch pex/*.rules 2>/dev/null } | tee "${OUT}"这段脚本的关键不是命令本身,而是它记录的三个东西:工具主版本、输入文件校验和、执行时间。sta_bin、pex_bin、drc_bin换成实际工具的可执行名即可,head -n 1是为了只留版本行,避免日志被 license 信息刷屏。md5sum那一行是重点——工艺库在项目周期内被悄悄更新过一次,是极常见的翻车来源,有了校验和,至少能证明“这次结果用的是哪份库”。
提示:版本矩阵里有些阶段会给两个可选工具,并且备注里写明“某几个 ISR 也支持”。这种备注不是给你挑顺手的用,而是说明这几个版本之间做过交叉验证。跨出这个集合,结果就不能直接拿去签核。
3. 时序签核的四层信任链:库、PEX、OCV、corner 谁在决定余量
3.1 标准单元库的档位设计,先决定了你能修什么
签核指南在时序章节开头就把库摊开讲,顺序是对的。因为后面所有余量讨论,都建立在“你用的库被正确表征过”这个前提上。40LL 平台提供的库按三个维度切分:栅长档(C40 / C50)、阈值电压档(RVT / HVT / LVT / ULVT)、用途档(Basic Kits / Power Management Kits / ECO Library),物理栅格统一是 8-Track。
栅长两档的取舍很直白:短栅长快,但漏电高;长栅长慢,漏电低。同一个设计里混用两档是常规操作,关键是时序签核时每个实例必须用对应档位的库表征,不能拿 C40 的表征去算 C50 的单元。
VT 档才是真正影响签核策略的维度。RVT 是基线,HVT 慢但漏电低,LVT 快但漏电高,ULVT 更快、漏电更高。一条路径从 RVT 换成 LVT,延迟能掉一截,代价是静态功耗上升。设计侧的直觉是“先用快的收时序,再回头换慢的省功耗”,问题在于能不能换回来。
这就碰到一个很具体的机制点:ECO Library 只覆盖 RVT、HVT、LVT,没有 ULVT。也就是说,如果在综合或 PnR 阶段为了赶时序大量使用 ULVT,到了 ECO 阶段想原地修补,ECO 库里没有对应的 ULVT 单元可换。你只有两个选择:用 LVT 顶替(延迟对不上,可能又把时序弄回去),或者从 Basic Kits 里拉 ULVT 单元做非 ECO 流程的改动(流程更重,迭代更慢)。
我一般会这么理解这条设计的动机:ECO 库的存在目的是“小改动、可预测、快速收敛”,它不需要覆盖全部档位,只需要覆盖最可能被用来做增量修正的那几档。ULVT 本身是性能极限手段,用它做 ECO 的概率低,所以被砍掉。理解这一点之后,库的选型策略就清楚了——ULVT 应该留给真正卡死的少数关键路径,而不是当默认选项铺开。
3.2 PEX:寄生提取不是“抽一遍就完了”
寄生提取在时序签核里的位置很微妙。它既是时序的输入,又在物理验证章节里单独出现一次。这不是文档重复,而是两个不同用途的提取:时序用的 PEX 要跟 STA 的延迟计算模型对齐,物理验证用的 PEX 要保证网表与版图的器件级一致性。两次提取的精度设置、耦合处理方式、层次化划分都可能不同。
对时序而言,关键在于三件事:提取的 corner 覆盖、耦合电容的处理、层次化边界。耦合电容如果不带进来,串扰增量延迟就无从算起,路径延迟会偏乐观;层次化边界处理不当,跨模块的线网寄生会被截断,长线路径的余量直接失真。
签核指南把 PEX 放在标准单元库之后、OCV 之前讲,逻辑是:库给出单元自身的延迟,PEX 给出互连的延迟,两者相加才是路径延迟,OCV 再在这个基础上加偏差。顺序错了,derate 就会加在一个不完整的基数上。
3.3 OCV:derate 不是拍脑袋的保险系数
On-chip variation 解决的是一颗芯片内部的偏差问题:同一片 die 上,不同位置的晶体管,即使版图完全一样,实际阈值电压、沟道长度也会有分布差异。这个差异不体现在 corner 上,因为 corner 描述的是“片与片之间”的工艺分布。片上偏差必须单独建模。
最朴素的建模方式是全局 derate:给 launch 路径的延迟乘一个大于 1 的系数,给 capture 路径乘一个小于 1 的系数,人为制造 worst case。这种做法简单、保守、可预测,缺点是过于保守——它对所有路径一视同仁,不管路径长短、不管逻辑级数。
# 时序签核约束片段:OCV derate 与 operating condition 的绑定 # max/min 两组 operating condition 分别对应 setup 与 hold 的检查方向 set_operating_conditions -analysis_type on_chip_variation \ -max ss_125c_0p99v -min ff_m40c_1p10v # 全局 derate 是下限保护,不是精度手段:所有路径至少按这个比例缩放 set_timing_derate -early 0.97 -late 1.03 # 时钟路径单独加严:时钟树与数据路径的偏差来源不同,不能共用一套系数 set_timing_derate -early 0.95 -late 1.05 -clock # 串扰增量延迟单独开关,避免与 OCV derate 重复计算同一份偏差 set_delay_calculation_options -crosstalk_delta_delay true-early作用在 hold 检查的 launch 侧(让数据更早到,更悲观),-late作用在 setup 检查的 launch 侧(让数据更晚到)。时钟单独一组系数,是因为时钟树经过的缓冲器级数多、共用路径长,其偏差特性和数据路径不一样,用同一套系数会低估时钟偏斜。-crosstalk_delta_delay单独开关这一点尤其要注意:串扰引起的增量延迟本身已经包含了部分随机性,如果 OCV derate 再叠上去,同一份偏差被算了两次,结果会过度悲观,逼着设计去做无谓的面积牺牲。
更进阶的做法是基于路径级或统计的建模,按逻辑深度、按单元类型给不同系数。签核指南给的是基线要求,能不能用更精细的模型替代,取决于你和工艺侧确认过没有。没确认就自己换模型,等于把签核基准改了。
3.4 corner 集合:签核的“坐标系”
corner 是 PVT 的组合,工艺(slow/fast/typical)、电压(标称上下浮动)、温度(高温/低温/室温)。40LL 的签核 corner 集合不是简单地把所有组合都跑一遍,而是按失效模式挑出有代表性的点。
setup 检查关心最慢的条件:慢工艺、低压、高温或低温(取决于工艺特性)。hold 检查关心最快的条件:快工艺、高压、低温。这两组条件在物理上不可能同时出现在一颗芯片上,但它们分别是两个检查方向的最坏情况,所以要分开跑。
真正容易漏的是那些“非典型” corner。比如低温下的 hold,很多人只跑常温 hold,觉得低温只会让电路更快、setup 更宽松。但 hold 恰恰是越快越危险。再比如电压偏高的 corner,如果电源网格设计得刚好卡在边界,高压会让动态压降的绝对值变大,功耗和时序同时恶化。
签核指南给出 corner 清单的目的,是让所有项目在同一套坐标系里报数。你可以在清单之外加 corner 做裕度分析,但不能用自己的一套坐标去替代清单。
4. 从电源网格到版图:功耗、物理验证与可制造性为什么必须一起看
4.1 静态 IR drop 与动态压降:两种不同的失效模型
功耗签核分两条线:静态 IR drop 和动态电压降。很多人把这两件事当成同一件事的两个精度档位,其实它们建模的物理过程完全不同。
静态 IR drop 看的是电阻网络。电流从封装凸点进入片上电源网格,经过一层层金属走线到达每个标准单元,每一段金属都有电阻,电流流过就产生压降。这个压降是直流意义上的平均值,跟开关活动无关,只跟平均电流和网格电阻有关。它的失效模式是:最远处的单元拿到的实际电压低于标称值,延迟变长,setup 恶化。
动态电压降看的是瞬态。数字电路在时钟沿同时翻转,瞬时电流变化率极高,电源网格的电阻和电感、封装引线的电感、片上去耦电容,共同决定了这个瞬态电流引起的电压塌陷。它的失效模式是:时钟沿附近出现一个窄而深的电压凹陷,让正在翻转的那批单元速度骤降,表现为路径延迟的瞬时抖动。
两者不能互相替代。静态压降合格,不代表动态塌陷合格;反过来也一样。签核指南把两者分开列,是因为它们的修复手段不同——静态压降靠加宽网格、加更多电源条;动态压降靠加去耦电容、优化开关时序、调整封装。
# 两类余量的快速估算:电源网格压降 与 金属线电流密度 V_NOM = 1.10 # nominal 供电电压,单位 V IR_BUDGET = 0.05 # 静态压降允许占 nominal 的比例 R_MESH = 0.018 # 从凸点到最远单元的等效电阻,单位 ohm I_AVG = 2.4 # 该区域的平均电流,单位 A ir_drop = I_AVG * R_MESH budget_mv = V_NOM * IR_BUDGET * 1000 print(f"IR drop = {ir_drop*1000:.1f} mV, budget = {budget_mv:.1f} mV") # Black 方程的一阶形式:寿命随电流密度按幂律下降 J = 1.2e6 # A/cm^2,该段金属的实际电流密度 J_LIMIT = 1.0e6 # A/cm^2,规则给出的上限 n = 2.0 # 电流密度指数,工程上常见取 1.5~2 print(f"EM margin ratio = {(J_LIMIT/J)**n:.2f}x")第一段算的是静态压降的绝对值与预算的对比,R_MESH是从凸点到最远单元的等效电阻,这个值要靠网格提取得到,不能靠估。第二段用 Black 方程的一阶形式算电迁移余量,n是电流密度指数,J超过J_LIMIT时比值小于 1,意味着寿命低于设计目标。这个估算很粗,只能用来快速判断“这个区域是不是明显超标”,精确判定还是要靠工具出报告。
4.2 DRC 与 LVS:物理验证的两条正交轴
DRC 检查的是几何规则:线宽、间距、包围、密度。这些规则来自工艺能力,违反就可能导致短路、断路、光刻失败。LVS 检查的是拓扑一致性:版图抽出的网表,和设计网表在器件连接关系上是否完全一致。
两条轴是正交的。DRC 干净但 LVS 不一致,说明图形合法但连接错了,典型原因是电源地网络接错、器件识别错误、衬底接触漏加。LVS 一致但 DRC 脏,说明连接对但图形不合法,典型原因是密度不足、间距擦边。
签核指南把 PEX 放在 DRC 和 LVS 之后,是流程顺序的必然:只有 DRC 干净、LVS 一致的版图,提取出来的寄生参数才有意义。拿一个还有 DRC 违例的版图去抽 PEX,抽出来的 RC 网络对应的是一个不存在的几何结构。
4.3 LFD 与 dummy:可制造性不是“锦上添花”
LFD(litho-friendly design)检查,本质是在版图上做光刻仿真,找出那些在规则上合法、但在实际光刻条件下会形成热点(hotspot)的图形。规则是离散的、局部的,光刻是连续的、有邻域效应的。一条线单独看满足线宽和间距,但它旁边三条线的组合可能让光强分布畸变,最终印出来的形状和设计形状差很多。
这就是 DRC 干净但硅片上出问题的经典场景。LFD 补的正是这个缺口。
dummy insertion 解决的是另一个问题:密度均匀性。化学机械抛光对图形密度敏感,密度低的区域被抛得更深,形成碟形凹陷,影响后续金属层的光刻聚焦。dummy fill 通过在空旷区域填充无功能的图形,把局部密度拉到均匀区间。
这两件事跟时序签核的耦合点在于:dummy 图形是金属,它会引入寄生电容。填充之后,被填区域附近的信号线电容变大,延迟变长。所以在签核流程里,dummy 填充完成后必须重抽 PEX、重跑 STA。指南把 dummy insertion 放在可制造性章节,但它的影响会回传到时序,这个回传关系是流程管理的重点。
4.4 EM:可靠性里的时间维度
EM(电迁移)检查关注金属线上的电流密度。电流密度过高时,金属原子沿电子流方向迁移,长期累积会在某些位置形成空洞或凸起,导致断路或短路。它的特殊之处是:这是一个随时间演化的失效机制,不是一上电就坏。
Black 方程描述了这个过程:寿命与电流密度的幂次成反比,与温度呈指数关系。所以 EM 判定本质是在问“按这个电流密度,设计寿命能不能覆盖目标年限”。电源线的 EM 和信号线的 EM 要分开看:电源线承受的是持续的大电流,信号线承受的是翻转时的瞬时电流,两者的判定准则和关注点不同。
签核指南把 EM 单独成章放在设计可靠性下,是因为它的修复成本和时序、DRC 完全不在一个量级。时序违例可以改约束、换单元、加缓冲;EM 违例往往意味着要改电源网格拓扑或者加宽整条走线,在项目后期几乎没有可行性。所以 EM 的检查要提前,不能等到最后一遍。
5. 签核里最容易翻车的五件事:现象、原因与排查顺序
5.1 第三方库套用代工厂的签核清单
现象:时序报告全绿,回片后批量失效,失效模式集中在某个 VT 档的单元上。
原因:签核指南在开头就写明了,文档里的清单适用于代工厂自有的标准单元和库;如果用的是第三方库,应该遵循第三方厂商的指引。第三方库的表征 corner、derate 假设、单元内部结构都可能不同,硬套清单等于用错坐标系。
解决:拿到第三方库的第一件事是确认它的表征条件清单,逐条对照签核指南里的 corner 定义,找出差异项,对差异项单独补跑。差异无法调和时,找工艺侧确认替代方案,不要自己拍板。
5.2 corner 跑全了,但 derate 全局一刀切
现象:所有 corner 的余量分布异常均匀,长路径和短路径的 slack 几乎在同一水平线上。
原因:全局 derate 对所有路径施加同一个系数,短路径本身延迟小,被 derate 的绝对量也小;长路径被 derate 的绝对量大。如果报告里看不到这个梯度,说明 derate 没生效,或者被后续的某个选项覆盖了。
解决:先确认 derate 命令在报告里的实际生效值,再看路径延迟的分布是否呈现随逻辑深度递增的偏差。均匀分布是危险信号,通常意味着约束没进到分析引擎,或者被更晚的约束语句覆盖。
5.3 PEX 提取没带耦合,串扰被静默忽略
现象:时序余量看起来比预期宽松,功耗也偏低,二者同时偏乐观。
原因:寄生提取时关掉了耦合电容提取,只留了接地电容。串扰增量延迟无从计算,延迟偏小;耦合电容对应的功耗也被漏算。两个偏乐观同时出现,是这类配置错误的典型指纹。
解决:检查提取配置里耦合相关的开关,确认输出网表里包含耦合电容段。抽一部分关键路径做带耦合和不带耦合的对比,差异应该明显存在。差异为零就是没抽到。
5.4 dummy fill 之后没有重跑时序
现象:DRC 干净、LVS 一致、时序也干净,但签核报告之间的时间戳顺序不对——STA 的报告早于 fill 完成的记录。
原因:流程并行导致的数据不自洽。fill 引入的寄生变化没有回传到 STA,报告描述的是 fill 之前的版图。
解决:把“fill 完成后重抽 PEX、重跑 STA”写进流程检查项,用产物时间戳做自动校验。这类问题靠人眼看报告发现不了,必须靠流程约束。
5.5 工具版本对了,但规则 deck 或库不是配套版本
现象:DRC 跑完零违例,但和同项目其他模块的 DRC 报告在同类图形上的判定不一致。
原因:规则文件有版本,库也有版本,工具版本对上了不代表这三者配套。旧规则配新工具,某些检查会被跳过且不报错。
解决:把工具版本、规则文件版本、库版本三者作为一组绑定关系管理,任何一项变更都触发全量重跑。版本组合记录进签核归档,和结果报告放在一起。
6. 收紧还是放松:签核标准的取舍与验证习惯
签核标准不是一个“越严越好”的东西。每收紧一档,都对应一个明确的代价,而这些代价最终会体现在面积、功耗、周期三者中的某一项上。
| 签核项 | 收紧手段 | 直接代价 | 适用场景 |
|---|---|---|---|
| OCV derate | 提高全局系数或改路径级建模 | 面积增加,关键路径被迫用更快档位 | 首次流片、无硅验证数据 |
| 静态 IR drop 预算 | 降低允许压降占比 | 电源网格加宽,布线资源紧张 | 高开关活动率的大规模逻辑 |
| 动态压降 | 增加去耦电容、错开开关时序 | 面积占用,时序约束变复杂 | 时钟频率接近工艺上限 |
| EM 电流密度上限 | 降低允许密度 | 走线加宽,层数需求上升 | 长寿命、高可靠要求 |
| corner 覆盖 | 增加非典型 corner | 签核周期变长,算力成本上升 | 车规、工业级温度范围 |
这张表的读法是:先看“适用场景”,再看“直接代价”。首次流片没有硅数据支撑,OCV 收紧是买保险,代价可接受;已经有同工艺的量产数据,就可以基于实测分布调整 derate,把过度保守的部分释放出来。反过来,如果项目本身对可靠性要求不高、生命周期短,EM 上限就没必要往最严里压。
这里有个容易被忽略的点:签核标准的放松必须有依据,而依据只能来自数据。没有硅数据的放松是赌博,有硅数据的放松是工程判断。这两者在报告上看起来一样,风险完全不同。
验证方法上,我习惯做一件事:对同一份设计,用两套略有差异的签核配置各跑一遍,比较余量分布的差异。如果两套配置的结果几乎一致,说明这套设计对该参数不敏感,可以放心用宽松的那套;如果差异明显,说明设计正好卡在这个参数的敏感区,那就得老老实实按严的来。这个对比跑一次的成本,远低于流片后发现余量判断错误的成本。
从那以后我每次起一个新项目的签核环境,都强制走一遍“版本快照 + 输入校验和 + 产物时间戳顺序”这三件事,不管项目多小。血泪经验是,出问题的从来不是那些看起来复杂的地方,而是那些“这么熟了不会错”的地方。希望帮到你。
本文还有配套的精品资源,点击获取