简介:面向集成电路后端与版图设计人员的工艺设计签核参考文档,聚焦中芯国际40LL(40nm低漏电)工艺节点下从设计完成到流片签核(sign-off)阶段需要遵循的规范与检查要求。内容以官方文档形式给出签核流程框架、文档版本与技术版本标识、适用说明及免责与保密条款,便于读者理解签核环节的文档体系与合规边界,并据此对照自身项目梳理检查清单。整包仅含1个PDF文件,约36页,压缩后2.18MB,轻量易检索,可离线查阅或打印备查。该文档已有496人学习下载,适合正在使用或评估40LL工艺、需要了解签核规范与流程依据的模拟与数字后端工程师、版图工程师及项目管理者作为参考资料。
1. 签核不是最后一条命令,而是把不确定性折算成可审计的表格
在 40LL 这类低漏电工艺上,一个 SoC 从「时序收敛」走到「可以交付流片」,中间隔的不是最后一条时序命令,而是一整套判定条件。反直觉的地方在于:这份 36 页的签核准则里,几乎没有一个数字是为了让设计跑得更快,全部是为了防止设计「看起来过了、实际没过」。
签核指南真正要解决的问题,是把工艺波动、库特征化误差、寄生提取精度、电压降、可制造性这些彼此耦合的变量,收敛成一组可复现、可审计的判定条件。以「40LL signoff guide」为关键词检索的人,多半想找一份能照着勾的清单;但决定成败的恰恰是清单背后的耦合关系:库的 corner 和寄生的 corner 对不上,时序再好也是假的;LVS 干净但网络名没接上,PEX 结果等于没进 STA。
搞懂这套机制的价值很实际:你会知道每一份 margin 花在了哪个物理量上,什么时候可以砍、砍了会从哪里翻车。
2. 参考流程与工具版本:为什么版本号会被写进签核规范
签核准则的结构本身就是一份证据链:时序、功耗、物理验证、可制造性、可靠性,五个域各自有判据,最后合并成一次「能不能出片」的决策。但在进入任何一个域之前,它先把流程和工具版本钉死了。这个顺序很说明问题——先把判定工具固定,再谈判定结论。
2.1 门禁式参考流程:四道闸门怎么串起来
这类参考流程的骨架是「主链 + 闸门」:综合、DFT、布局布线构成的实现主链一路往下走,而时序签核、功耗签核、物理验证、可制造性分析作为四道平行闸门,各自必须给出通过结论,整体才允许进入交付。
关键在于,这四道闸门并不是串行一次过的。真实项目里它们会来回反弹:动态电压降分析发现某个电源网格阵列的过孔不足,改完布线之后寄生参数全变,时序要重跑;补 dummy 之后局部电容密度变了,PEX 再抽一次,连线延迟又漂了一点。所以准则里把「寄生提取」在时序章节和物理验证章节各写了一遍——不是冗余,而是因为它出现在两个不同的决策点上,一次是给 STA 提供 RC 网络,一次是验证提取本身的一致性。
用文档里的划分方式,各域的关注点可以这样对照:
| 签核域 | 判定对象 | 典型触发返工的物理量 |
|---|---|---|
| 时序 | 单元库工况、寄生、OCV、角组合 | 走线 RC、时钟树偏差 |
| 功耗 | 静态 IR drop、动态电压降 | 电源网格电阻、瞬态电流峰值 |
| 物理验证 | DRC、LVS、PEX 一致性 | 图形间距、器件识别、网络映射 |
| 可制造性 | 光刻友好检查、dummy 填充 | 图形密度、CMP 平坦度 |
| 可靠性 | 电迁移、老化 | 电流密度、温度 |
这张表最有用的地方不是分类,而是最后一列:它告诉你每个域失败时该回到实现的哪一层去改。签核报告只会说「violation」,能不能定位到物理层,取决于你是否理解这一列的来源。
2.2 版本锁定的机制:工具版本为什么是签核项而不是运维项
规范里用整页篇幅列出每个设计阶段推荐的工具与版本,从模拟侧的原理图与版图编辑、全精度 SPICE 与快速 SPICE 仿真,到低功耗规则检查与等价性检查,再到综合、DFT/ATPG、MBIST、布局布线、RC 提取、STA、静态/动态 IR drop、电源与信号 EM、老化仿真、DRC/dummy/LVS/ERC。而且它不是给「一个工具」,是每一环给出一到两个候选,形成双轨。
为什么版本号值得写进签核准则?常见的实现思路有三层原因,都是机制层面的:
第一层是数据格式的语义漂移。库文件、寄生文件、时序约束、功耗意图格式都在演进,同一个字段在不同版本里可能被解释成不同含义。一个典型的例子是时序约束里某些时钟属性在新版本中被更严格地施加,老脚本在新工具上会直接多出一批 unconstrained 路径的告警,而在老工具上这些路径是被静默忽略的。
第二层是算法默认值的变化。静态时序分析里 OCV 的施加方式、串扰计算的默认档位、提取工具的精度模式,这些都可能在版本升级时改变默认值。默认值一变,同一份网表同一份 SPEF 跑出来的 slack 就会漂,而漂多少没人提前告诉你。
第三层是可复现性。签核结论是要被审计的:半年后重新跑一遍,必须得到同一个数。工具版本和 runset 版本一起构成了这个「同一个数」的前提。
注意:跨版本比对时序结果时,先确认 OCV 施加方式、提取精度档、串扰是否开启这三项是否一致,再谈 slack 差异。差异小于这三项带来的漂移量时,讨论谁更准没有意义。
双轨工具链的取舍也要说清楚。规范同时列出两套流程,并不意味着可以混用。混合工具链在原理上可行,但每一处交接都是一次语义翻译:网表、SPEF、约束、功耗意图,任何一个环节的字段映射出问题,最后表现出来的都是「时序莫名其妙变好或变差」。血泪经验是,混用要单独做一次相关性对比,用同一条关键路径在两侧分别跑,差多少心里有数,再决定这份 margin 从哪出。
3. 库与角:签核用的库,和你综合时用的库不是同一件事
时序签核章节的第一节不是时序,而是标准单元库。这个安排背后是一个很硬的机制约束:签核结论的精度上限由库决定,而不是由分析工具决定。工具只能在你给的模型上做加减法,模型没覆盖的工况,它不会告诉你。
3.1 8T 库的 VT 分档:ULVT 不是「更快的 LVT」
规范给出的 8 轨(8-Track)库体系里,按沟道长度分成 C40 与 C50 两档,按阈值电压分成 RVT、HVT、LVT、ULVT 四档,另外还有电源管理专用库和 ECO 专用库,后两者的 VT 覆盖范围比基础库窄——电源管理库覆盖 RVT/HVT/LVT,ECO 库同样只覆盖 RVT/HVT/LVT,且都要看 C40/C50 两个沟道长度版本是否齐备。
四档 VT 的物理含义是沟道掺杂与功函数工程的取舍:阈值越低,同电压下过驱动越大、速度越快,但亚阈值漏电呈指数上升。所以 ULVT 不是「更好的 LVT」,它是把静态功耗换成了延迟预算。在低漏电平台上,这个交换的代价尤其明显,因为整个工艺平台的定位就是压漏电。
实战中这会形成一个非线性的优化问题:关键路径上堆 ULVT 能立刻见效,但漏电是按单元实例数累加的,一旦 ULVT 占比上去,静态功耗可能反超动态功耗,而静态功耗又会通过自热效应影响温度角。规范把库类型放在时序章节开头,就是在提示这条链:VT 选择 → 漏电 → 结温 → 时序角。
还有一个容易忽略的点:ECO 库的 VT 覆盖窄于基础库。这意味着如果时序修复阶段想用 ULVT 的 ECO 单元去补最后几条违例,可能发现 ECO 库里根本没有对应档位,只能用 LVT 甚至 RVT 的等价单元,驱动能力对不上,补出来的路径延迟和预估不同。这个坑在时序收敛末期非常常见。
3.2 库特征化的 PVT 与 PEX 条件:模型是从哪来的
规范明确说明,库设计套件是按特定的工艺、电压、温度与寄生提取条件做特征化的。这句话的信息量很大,它意味着每一份库文件背后都对应一个四维坐标:工艺档(快/慢/典型)、电压档、温度点、以及提取该单元内部寄生的 RC 条件。
签核角必须落在这个坐标网格上,或者老老实实做插值/降额。常见错误是拿一个「慢工艺、低电压、高温」的库,去配一个「慢工艺、低电压、低温」的寄生角,看着都是慢角,实际上温度反了。在低电压下,温度反转是真实存在的现象:温度降低,阈值电压升高但载流子迁移率也升高,两者竞争的结果是延迟可能在某个低温点反而变差。所以三温(低温、常温、高温)必须都看,尤其是低压角下的低温点。
寄生条件这一维更隐蔽。单元内部的寄生在特征化时是固定的,但互连寄生是每次设计都不同的。库特征化用的寄生条件和 PEX 抽出来的条件如果不匹配,会出现系统性偏差:单元延迟偏乐观,互连延迟偏悲观,两者部分抵消,总体看着还行,但具体到某条路径就可能翻车。
3.3 第三方库的边界:为什么不能套用同一份清单
规范里有一句很短但很关键的话:如果是自有的单元库,强烈建议使用文档提供的签核清单;如果采用的是第三方供应商的库,请遵循该供应商的说明或其签核清单。
这句话的机制依据是:签核清单里的每一条判据,都是围绕自家库的特征化假设写的。第三方库的特征化方法、corners 定义、降额建议可能完全不同,比如他们的慢角可能已经内建了一部分 on-chip variation 的余量,你再按自家清单叠一次 derate,就是双重悲观;反过来,如果他们没内建而你也没加,就是漏了。
我一般会这么理解这条边界:清单是「针对这批模型的补丁集」,换了模型,补丁必须重打。
3.4 寄生提取:时序签核的精度命门
时序章节把寄生提取单列一节,物理验证章节又列一次,原因在上一章说过。这里说机制。
提取工具的基本做法是「图形匹配 + 场求解」的混合:对常见几何组合查预计算表,对复杂或关键区域调用场求解器。由此产生几个可调档位:二维、2.5 维、三维;以及耦合电容的处理方式——保留真实耦合(coupled)还是折算成接地电容(decoupled)。
这个选择直接改变时序结论的性质。保留耦合电容,串扰效应可以被算出来,但分析规模和收敛难度上升;折算成接地电容,等于把最坏情况的耦合提前算成延迟,简单但悲观,而且会掩盖真正的串扰风险点。规范在时序章节要求做串扰相关的检查,本质上就是在说:不能只靠 decoupled 加 margin 蒙混过关,该看的耦合要看。
另一件事是提取角的定义。常见的做法是提取出 Cmax/Cmin、RCmax/RCmin 这类组合,再映射到时序角:慢角配 RCmax,快角配 RCmin,保持悲观一致。这里最容易翻车的是「角错配」——用慢工艺角的库配了 RCmin 的寄生,延迟被系统性低估,时序看起来漂亮得不像话。这种错配不会报错,只会让流片后的硅上结果和签核结果对不上。
3.5 OCV 三代演进:derate、AOCV、POCV 各自在补偿什么
片上偏差(OCV)是签核里最容易被当成玄学的一块。它的存在理由很朴素:同一个单元在不同位置的实际延迟不完全相同,因为掺杂、氧化层厚度、光刻邻近效应都有随机和系统性的空间分布,而这些在库的单个 corner 里是表达不出来的。
第一代做法是全局 derate:给所有路径乘一个固定系数,时钟路径和数据路径分别设。简单粗暴,代价是深度路径被过度悲观——一条经过 30 级逻辑的路径,每级都乘同一个悲观系数,误差线性累加,最后为了满足这个不真实的要求,设计被逼着过度优化。
第二代是 AOCV,思路是把 derate 变成「逻辑深度 + 物理距离」的函数:级数越多、路径在版图上跨度越大,随机偏差被平均的程度越高,derate 应该越小。它用表格查值取代了常数,机制上更贴近统计现实,但仍然是把偏差当确定性边界处理。
第三代是 POCV/LVF,把每个单元的延迟建模成均值加标准差,路径上按平方和开根号合成,最后用 sigma 倍数定签核阈值。这才是真正意义上的统计时序。
三代之间的选择不是「越新越好」,而是与你的交付策略相关:统计方法需要库提供 sigma 信息,需要设计侧接受「按 sigma 收敛」的概念,也需要后端团队理解为什么某些路径的 slack 是负的却可以签字。规范把 OCV 单列一节,本质上是在说:这一项的施加方式必须在项目开始前统一,中途换方法等于重做签核。
3.6 签核角的组合爆炸与收敛策略
工艺档、电压档、温度点、寄生角、OCV 方法,这五维一乘,角的数量会迅速膨胀。规范给出的是推荐集合,不是全排列——它要求的是覆盖关键工况,而不是穷举。
收敛策略通常是先做粗筛再做精算:用典型角和最慢/最快角做第一轮,找出真正紧的路径族(比如跨时钟域路径、时钟门控检查、恢复/移除检查),再针对这些路径族补齐对应的极端角。这个顺序很重要,反过来做会陷入「跑了几十个角,不知道哪个才是真的紧」。
除了 setup/hold,签核准则里还有几类经常被漏掉的检查:最大转换时间与最大电容约束(它们本身不是时序,但会导致延迟模型失效)、最小脉冲宽度(时钟占空比被压窄后功能失效)、时钟门控检查(门控单元的建立/保持关系)、以及未约束路径统计。最后一项最危险:slack 报告干净,是因为有一批路径压根没被约束,工具默认不分析。
4. 功耗、物理验证与可制造性:三个域为什么要一起看
功耗签核、物理验证、可制造性、可靠性,在文档结构上是四个独立章节,但在物理上它们共享同一份版图和同一份电流分布。分开写是为了责任清晰,一起看才是工程现实。
4.1 静态与动态电压降:平均电流与瞬态电流的两种暴力
静态 IR drop 分析算的是平均电流在电源网格电阻上的压降:给每个单元一个平均功耗,形成电流源分布,求解整个电阻网络的节点电压,找出低于阈值的点。它的输入是功耗信息,输出是电压分布图,判定的是「长期供电是否够」。
动态电压降要难得多。它看的是时钟沿附近那一瞬间的电流突变,因为电流变化率乘上电源网络的等效电感,会产生额外的电压跌落,这部分在静态分析里完全看不到。它需要的是带时间信息的活动率——基于仿真的波形,或者基于概率的向量无关估计。
两者最容易踩的坑是:静态分析干净,动态分析出问题。原因往往是去耦电容不足或者电源网格的局部过孔阵列太稀疏,平均电流分摊下去没问题,但瞬时电流挤在少数几个过孔上,局部压降超标。反过来也有:动态分析用了一个活动率极低的测试向量,结论过于乐观。
注意:动态电压降的活动率输入必须覆盖真实工作模式。用复位序列或者空闲状态的波形去做动态分析,等于没做。
电压降结果还会反向影响时序。压降导致实际供电电压低于标称值,单元延迟上升,如果在时序签核时没有把这块折算进去,签核结论和硅上表现就会有系统性差距。常见的做法是在时序角里预留一个电压降预算,或者在拿到 IR drop 结果后反标回 STA 做一次验证。
4.2 DRC、LVS、PEX 的一致性三角
物理验证章节列了三项:设计规则检查、版图与原理图一致性、寄生提取。三者的顺序不是随意的,而是一条依赖链。
DRC 检查的是几何:间距、宽度、面积、密度。它用的是代工厂提供的规则文件,规则文件的版本必须和工艺平台匹配,这一点和工具版本锁定是同一个逻辑。
LVS 检查的是电气结构等价:从版图里识别出器件和连接关系,和原理图网表比对。这一步的难点在器件识别和网络映射——特别是当设计里有多晶硅电阻、金属电容、以及各种特殊器件时,识别规则稍有偏差,就会出现「多了几个器件」或者「某个网络被劈成两段」的假错。
PEX 依赖 LVS 的结果:只有正确识别了器件和网络,提取出来的寄生才能挂到正确的节点上。于是形成一个三角:DRC 保证几何合法,LVS 保证结构正确,PEX 保证寄生归属正确。三者中任何一个环节用了不同版本的规则文件,后一个环节的结论就不可信。
最隐蔽的失败模式是「LVS 干净但寄生没生效」:LVS 报告 pass,但提取出来的网络名和 STA 侧网表里的名字对不上,工具按名字匹配寄生时匹配不到,于是这部分互连的 RC 被静默丢弃。STA 跑出来时序变好,没人报警。排查办法是在 STA 侧检查寄生覆盖率——有多少网络真正带上了寄生,比例异常低就是这个问题。
4.3 光刻友好检查与 dummy 填充:可制造性怎么反过来咬时序
可制造性章节包含两项:光刻友好设计检查和 dummy 填充。
光刻友好检查的思路是用光刻模型对版图做仿真,找出那些在工艺窗口边缘会畸变甚至断线的图形组合——比如某些间距下的线端收缩、拐角圆化。这类问题不违反设计规则,但良率上不去。它输出的是热点列表,需要设计侧逐条评估:改版图、加余量、或者标注为可接受。
dummy 填充解决的是另一个问题:化学机械抛光需要图形密度均匀,否则会出现碟形凹陷和侵蚀,导致金属厚度不均,进而影响电阻和电容。填充的做法是在空白区域插入无功能的图形,把局部密度拉平。
这两项和时序的关系在于:填充会改变寄生。填充图形虽然是浮空的,但它会和信号线产生耦合电容,尤其是当填充离关键信号很近时。所以规范通常要求填充之后重新做一次寄生提取和时序验证,而不是拿填充前的数据去签核。这条要求听起来啰嗦,实际是防止「签核数据」和「流片数据」不是同一份版图。
另一个配套机制是填充阻断:在关键信号周围设置禁止填充区,牺牲局部密度均匀性来保时序可预测性。这是一个典型的取舍点——密度均匀性影响良率,耦合电容影响性能,两者在版图上抢同一块地方。
4.4 电迁移:电流密度与温度的自增强回路
可靠性章节在文档里篇幅不长,只列了电迁移检查,但它的物理机制是整份准则里最「自我强化」的一个。
电迁移是金属原子在电子风作用下迁移,长期导致空洞或小丘,最终开路或短路。判据是电流密度,但允许的电流密度不是常数,它随温度上升而下降,随线宽变化(因为侧壁散射和晶界扩散的贡献比例不同),也随长度变化——短线上存在背应力梯度,能抵消电子风,所以极短的互连可以通过所谓的长度效应获得豁免。
于是形成一个回路:电流密度高 → 局部温升 → 允许电流密度下降 → 相对更超标。而温升又取决于周围的金属密度和散热路径,这就把 dummy 填充、电源网格密度、封装散热全部牵扯进来。
实践中最常见的漏项是只看电源网络不看信号网络的反向电流。信号线的电流是双向的,平均电流接近零,但峰值电流密度可能很高,而且双向电流造成的原子迁移方向会随信号翻转而反复,损伤机制与直流不同,判据也不同。规范把电源 EM 和信号 EM 分开列,就是在提示这一点。
老化(HCI、BTI)是另一条时间轴上的可靠性问题:它让阈值电压随时间漂移,延迟慢慢变大。签核里的处理方式通常是用带老化模型的仿真跑一遍寿命末期工况,把延迟退化量折算成时序余量。这一项在消费类产品上常被简化,但在长寿命场景里不能省。
5. 避坑与排查:签核阶段最容易翻车的五个点
这一章记录的是真金白银换来的经验。每一条都对应一个「工具没报错、但结论是错的」的场景——这类问题比报错危险得多。
5.1 库角与寄生角错配,时序虚好
现象:时序签核全绿,slack 分布健康,但流片后硅上测试在慢速档下出现功能性失效。
原因:慢工艺角的库配了 RCmin 的寄生文件。工具不会检查这种语义一致性,它只做算术。结果单元延迟按最慢算,互连延迟按最快算,总延迟被系统性低估。这种错配在角数量多的项目里极易发生,因为角是靠脚本批量拼的,拼错一个变量名没人发现。
解决:把「角定义」做成一份受控表格,库角、寄生角、约束角三元组在一处定义,其他脚本只能引用不能自建。签核前跑一次一致性检查,确认每个签核角的寄生文件在文件名和元数据上都对得上。
5.2 用第三方库却套用自家清单
现象:按清单逐条勾完,全部通过,但第三方供应商复核时指出遗漏了若干项。
原因:清单是围绕自有库的特征化假设写的。第三方库可能已经内建了部分降额,也可能把某些 corner 拆得更细。照搬的结果是有的地方重复悲观、有的地方漏保护。
解决:拿到第三方库的第一件事是对齐特征化说明,逐条比对清单里的假设是否成立,形成一份「本地补充条款」。这份补充条款要跟着库版本走,库升级就重审。
5.3 工具升级后默认值漂移
现象:同一份网表、同一份寄生、同一份约束,换了工具版本后 slack 整体偏移,方向不确定。
原因:OCV 施加方式、串扰计算档位、提取精度模式的默认值在新版本里变了。这类变更通常写在发布说明的角落里,不会主动提示。
解决:升级前先做一次基线对比:用旧版本跑一份完整签核结果存档,新版本跑同一份输入,逐路径比对差异,把差异归因到具体开关上。确认归因清楚之后再切换。签核环境不追新,追的是可复现。
5.4 LVS 干净但寄生没挂上
现象:物理验证全过,STA 时序比上一版明显变好,关键路径延迟无故下降。
原因:提取工具输出的网络名与 STA 侧网表的名字匹配不上(层次分隔符、转义字符、总线命名差异),工具按名字关联寄生时静默跳过,这部分互连按零 RC 处理。
解决:在 STA 侧统计寄生覆盖率,即带寄生信息的网络数占总网络数的比例,与上一版对比。比例突降就是这个问题。根治办法是在提取和 STA 之间固定一套命名映射规则,并把覆盖率检查写进签核脚本的断言里。
5.5 填充之后没重跑提取
现象:签核数据齐全,但流片后测试发现某些路径延迟比预期大。
原因:dummy 填充改变了局部寄生,尤其是关键信号附近的耦合电容。签核用的是填充前的版图数据,和实际流片的版图不是同一份。
解决:把「填充后重提取」写进流程的强制步骤,并且在关键信号周围设填充阻断区。这件事没有捷径,只能靠流程卡住。
6. 悲观与乐观之间:签核余量该怎么花
签核做到最后,本质上是在回答一个问题:你愿意为不确定性付多少面积和功耗。所有 margin 都是买保险,买多了产品竞争力下降,买少了流片翻车。区别在于,好的团队知道每一份保险保的是什么风险,差的团队只会往上叠。
我一般会把余量拆成可归因的几层,而不是一个笼统的百分比。第一层是模型误差:库特征化与实际硅片的偏差,靠 derate 覆盖。第二层是提取误差:图形匹配和场求解的近似,靠提取角的选择覆盖。第三层是空间偏差:片上随机与系统性波动,靠 OCV 方法覆盖。第四层是工况误差:电压降、温度分布、老化退化,靠专门的分析覆盖。第五层是工具与方法误差:版本差异、算法近似,靠相关性对比覆盖。
分层之后,砍余量就有了依据:哪一层的实测相关性好,哪一层的余量就可以收;哪一层完全没有硅上数据支撑,就只能保守。反过来,如果某个项目把所有余量压成一个数,你就无法判断风险集中在哪——这种「黑匣子式余量」是最危险的,因为它既可能过度悲观(浪费面积),也可能在某个没被想到的维度上完全裸奔。
验证这套分层是否可信,有几个具体动作值得做。挑几条关键路径,用晶体管级仿真和 STA 结果做对比,差异就是模型加提取的联合误差,这个数应该稳定在一个小范围内,如果某条路径偏差特别大,通常是提取或串扰处理有问题。用更高精度的场求解器抽一小块区域,和常规提取结果比对,得到提取精度的量级。拿到硅上测试数据后,反标回签核环境,看预测值和实测值的分布是否重合——这一步做了,下一版的余量才有依据。
还有一个容易被忽略的取舍:统计方法(POCV)给了你更精确的建模能力,但它要求你接受「按 sigma 签核」这个约定,也就意味着设计侧和签核侧必须共享同一套概率语言。如果团队里没人能解释清楚为什么某条路径 sigma 是 3 而不是 2,那这套方法带来的不是精度,而是争议。
从那以后我每次启动一个新工艺平台的签核,都强制先做一遍「角定义受控表 + 相关性基线」这两件事,哪怕项目进度再紧也不跳过。因为这两件事省下来的返工时间,远超它们本身花的那几天。希望帮到你。
本文还有配套的精品资源,点击获取