本节摘要:标准单元是数字实现的字母表:同一轨道高度、成套驱动强度、Liberty 时序表、LEF 外形。CMOS 反相器的互补上拉下拉,解释了为何稳态输出被强锚定、动态功耗在翻转时才出现。综合不是从晶体管画起,而是在这本已经被晶圆厂背书的字母表里选字。
阅读完本节,你应当能够:
若每个团队从 MOSFET 尺寸开始设计与非门,SoC 日历会以十年计。标准单元把经过工艺认证的版图、接触孔冗余、天线规则做成积木。布局工具只需要把积木卡进等间距的行里,像把不同形状的构件塞进同一规格的船台肋位。
原文把“标准”拆成三重约束。第一,高度统一:电源轨间距相同,常以轨道数称呼库,保证自动放置能无缝拼接。第二,电气模型完备:Liberty 里有输入电容、驱动、延迟随负载与输入转换时间变化的表,还有建立保持。没有这本户籍,STA 是空谈。第三,可制造性内置:DRC 合规的金属、通孔、天线缓解。调用一个两输入与非,调用的是整套制造解,不只是真值表。
于是设计被拆成三个可并行的域:库团队和 Foundry 对单元负责;前端对 RTL 与约束负责;后端对坐标与金属负责。你在综合里选 INVX4 还是 INVX8,是在用库团队已经付过的版图学费。
NMOS 单独下拉,输入为低时输出悬空,那是逻辑真空。PMOS 单独上拉也对称地残缺。互补结构让任意稳态总有一管强开、一管强关,输出被低阻路径钉在电源或地上。这就是静态鲁棒:噪声要掀翻一个被强驱动的节点,比掀翻浮空节点难得多。
动态则是电容充放电。负载越大、电压越高、翻转越勤,能量越高。翻转瞬间两管可能同时导通一小段,形成短路电流,输入转换越慢,短路窗口越宽。所以库里不只提供最小反相器:慢转换、大负载要用更强的驱动,否则延迟和短路能量一起恶化。
比例也很现实。PMOS 迁移率弱于 NMOS,要拉对称的高低转换,上拉管往往更宽。库已经替你做好一档档比例。你要做的是选档,而不是现场调 W/L。阈值档是另一根旋钮:低阈值快、漏电大;高阈值慢、待机省。同一功能多阈值并存,综合按路径关键与否混插。这不是后处理美化,是字母表本身就有粗细两种字体。

| 单元属性 | 前端怎么用 | 用错的症状 |
|---|---|---|
| 驱动强度 | 高扇出、长线预估 | 过小则慢,过大则时钟负载与拥塞 |
| 低阈值 | 建立违例路径 | 漏电热点、待机电流爆 |
| 高阈值 | 非关键逻辑 | 保持仍可能过快,需单独看 |
| 双高度 | 复杂触发器、多路器 | 放置灵活性下降 |
| 时钟专用缓冲 | 时钟树 | 拿普通缓冲代替会恶化占空比 |
技术映射把布尔网络覆盖成库里真实存在的单元。a & b | c 可能变成 AND 加 OR,也可能一级 AOI21。覆盖是 NP 难问题,工业工具用启发式在延迟、扇出、面积间走。你能帮的是让表达式扁平,让映射器看见完整云,而不是被无意义层次切开。
扇出优化会插缓冲或复制驱动。这是反相器契约的规模化:没有无穷驱动的门,只有一串按负载搭起来的反相器链。RTL 里一个信号去一百个触发器,综合后你会看见缓冲树,时钟更是专门的树。不要在 RTL 里手搭缓冲树,除非你在做全定制。
多电压域时,库还按电压提供不同 Liberty。同一单元在 0.7 V 和 0.9 V 下延迟不是线性缩放。跨电压必须用电平转换单元,这些单元也在库里,而且往往又慢又胖。规格阶段乱切电压域,会在这里付过路费。
⚠️ 常见坑:在综合脚本里禁止使用整类高阈值单元“为了快”。非关键逻辑全部改低阈值,漏电会在签核功耗里把你打回来,IR Drop 也会更差。
💡 关键直觉:换单元尺寸是微调;周期差一个数量级,要回 RTL 切流水。
ECO 阶段你会更恨库。小改功能若能用相同足迹的单元替换,版图能动得少。库若缺少某驱动档的等价功能,你就得改线。所以“库丰不丰富”是流片后期改错的隐形成本,选型时不要只看逻辑种类。
FPGA 的字母是 LUT、触发器、进位链、块 RAM、DSP。映射目标不同,但“在预制砖上盖房”的哲学相同。不要拿 ASIC 的驱动强度思维去拧 LUT 级数,也不要把 FPGA 的可重配当成 ASIC 签核已经结束。
能,但丑。温度电压会让延迟漂,扫描和老化更漂。保持修复优先用工具插入的专用延迟单元,并在签核角复查,不要在 RTL 里堆 # 延迟或一串 inv。
路径报告里若延迟大头在单元本身而不是线,加大驱动或换低阈值才对症。若大头在线,换单元只是给已经很长的金属再加一点驱动,边际很快消失,该回到放置或切拍。看报告要看 cell delay 与 net delay 的列,不要只看总和。
时钟缓冲必须用时钟类单元。普通反相器的上升下降不对称会毁占空比,占空比毁了,半周期路径和 DDR 式采样会一起漂。库里时钟缓冲贵在匹配和屏蔽,不是贵在名字。综合脚本应限制时钟网上的单元类型。
保持修复插入延迟单元时,要指定不要被后续优化吃掉。下一轮面积优化常把“无功能”的延迟链删掉,保持违例复发。这是库与优化器的博弈,要用属性或不要碰的清单钉住,而不是插完就过。
ECO 时优先找相同足迹、相同针脚的替换档。换双高度单元可能逼着一行推开,引起连锁合法化。库是否提供同足迹的阈值和驱动矩阵,决定你后夜改功能的速度。选型 PDK 时把这当问题问供应商,不要只问逻辑种类全不全。
换了一个“更快”的库视图却忘了换对应 LEF,放置按旧外形、时序按新表,签核会在顶层才爆炸。第6章的兼容矩阵在这里落地:综合启动脚本应打印库哈希。哈希与矩阵不一致就退出,不要“先跑着看看”。
反相器链当延迟线修保持,温度一漂延迟跟着漂。专用延迟单元也漂,但库至少给了角表。RTL 里堆反相器更不可控,还可能被优化删掉。保持修复属于物理或约束属性,不属于编码技巧。
教新人认库:打开一个 INV 的 Liberty,指出输入电容、各负载下的延迟表、上升下降不对称。认过一次,就不会再问“为什么同样的非门有十几个名字”。那些名字是驱动与阈值的字体粗细,不是重复劳动。
综合脚本限制时钟网上的单元类型,禁止普通反相器混入。上升下降不对称会毁占空比,半周期路径随后失真。启动时打印库哈希,与矩阵比对失败即退出。ECO 只在同足迹矩阵里找替换档,避免双高度连锁合法化。认过 INV 的 Liberty 表,才算认识这本字母表。
打开 Liberty 认三张表:延迟随负载、延迟随输入转换、建立保持。认完再谈“换个更快的门”。更快来自更强驱动或更低阈值,各付电容与漏电。时钟网只用时钟类缓冲,普通反相器的不对称占空比会毁半周期路径。同足迹矩阵决定 ECO 速度,问供应商时把矩阵当问题而不是把逻辑种类当问题。库哈希进综合日志第一行。第一行对不上矩阵,后面所有优化都是在错误字母表里作文。反相器互补锚定提醒你:数字库的字母都建立在稳态强驱动上,浮空和弱驱动不是默认字体。
综合为了面积把时钟干线上的专用缓冲换成普通大驱动反相器。功能角建立勉强过,占空比在快角变成明显不对称,半周期路径保持崩。STA 显示时钟路径上升下降差一截。限制单元类型后恢复。教训:字母表里看起来能完成“非”的字,不一定能当节拍器。认 Liberty 的上升下降表,是认字母表的入门,不是进阶。库哈希第一行对不上的那次构建,后来发现后端还在用旧 LEF,IO 单元顶层金属被摊平,那是第6章的案例,但种子已经在本章的启动脚本里。
再补一条出门检查:综合日志第一行库哈希;时钟网单元类型列表里没有普通 INV;ECO 候选都在同足迹矩阵。三样没有,字母表就还没真正打开。认延迟表时同时看输入转换,慢转换加大短路窗口,只加大驱动可能加重短路。阈值混插按路径关键与否,全低阈值是漏电炸弹。互补锚定提醒:稳态必须被强拉,浮空不是库的默认字。
延迟随负载认不出不许。延迟随转换认不出不许。建立保持表认不出不许。时钟类单元名单认不出不许。同足迹矩阵认不出不许。五认是选档许可证。普通 INV 进时钟网不许。全低阈值不许。库哈希第一行不对不许启动。浮空当默认字不许。字母表没打开就作文,后端会在错误字体里排版一整夜。
行高决定轨道数,轨道数决定布线器能从单元头顶挤过几根信号。换更高驱动往往换更宽足迹,旁边轨道被占满时,加大单元会逼出绕线,延迟不降反升。选档位时要同时看 Liberty 的延时表和 LEF 的宽度,只看延迟列会把拥塞买回来。
下一节把字母表放进约束考场:时钟、延迟、例外、重定时,网表从这里诞生。