第二章 CMOS工艺基础:从晶体管到时序的底层逻辑
做时序收敛,说白了就是在跟物理世界打交道。
你写的RTL代码再漂亮,最终都要映射到硅片上的晶体管和金属连线。我见过不少前端工程师,时序违例了只会调约束、改代码,却不知道根本原因可能是工艺库选错了,或者PVT corner没选对。嗯,这一章我们就来扒一扒CMOS工艺的底裤。
2.1 MOS管工作原理:开关的物理本质
MOS管,就是一颗电压控制的开关。
NMOS管,栅极电压高的时候导通,低的时候关断。PMOS管正好相反。你想想看,CMOS反相器就是用一个NMOS和一个PMOS搭起来的——输入高电平,NMOS导通拉低输出;输入低电平,PMOS导通拉高输出。
这里有个关键参数:阈值电压Vth。
Vth决定了管子什么时候开始导通。我做过一个项目,选用了低Vth的库来追求速度,结果漏电大得吓人,芯片待机功耗直接超标。后来换回标准Vth,时序虽然紧了一点,但功耗总算压住了。
核心要点:
- NMOS:Vgs > Vth 时导通
- PMOS:Vgs < Vth 时导通(注意是负的)
- 沟道长度L越短,开关速度越快,但漏电也越大
- 宽长比W/L越大,驱动能力越强,但面积也越大
2.2 标准单元库:你的积木盒子
标准单元库,就是芯片设计的基础积木。每个库包含几百到几千种逻辑单元:与门、或门、触发器、锁存器、缓冲器……
我个人习惯,拿到一个新库先看三样东西:
- 库名称和工艺节点——比如tsmc28nm、samsung7nm,决定了基础速度
- PVT corner列表——看看有多少个工作条件
- 时序模型文件——.lib文件里藏着所有延迟信息
库里的每个单元都有多个版本:
- X1、X2、X4……表示驱动强度倍数
- L表示低功耗(面积小、速度慢)
- H表示高性能(面积大、速度快)
- ULVT、LVT、SVT、HVT表示不同阈值电压
我的经验:做时序收敛时,优先用SVT(标准阈值)单元。只有关键路径实在收不拢了,才换LVT或ULVT。因为低阈值单元漏电大,一颗芯片上换太多,功耗会崩。
2.3 互连线延迟:被忽视的时序杀手
很多人以为延迟主要来自门电路。其实到了先进工艺,互连线延迟占比越来越高。
28nm工艺,互连线延迟大概占30%-40%。到了7nm,这个比例能到60%以上。为什么会这样?因为晶体管越做越快,但金属线的电阻电容并没有同比例缩小。
互连线延迟可以用Elmore模型估算:
Delay = R * C
其中:
R = 方块电阻 × (线长/线宽)
C = 单位面积电容 × 线宽 × 线长 + 边缘电容 × 2 × 线长
说白了,线越长、越细,延迟越大。我遇到过一条全局时钟线,从芯片一端绕到另一端,延迟占了整个时钟周期的40%。后来用了H-tree结构重新分配时钟,才把延迟降下来。
注意:互连线延迟对温度非常敏感。温度升高,金属电阻增大,延迟也跟着涨。这就是为什么高温corner下时序最容易违例。
2.4 PVT对延迟的影响:三个维度,一个都不能少
PVT就是工艺、电压、温度。这三个因素共同决定了芯片的实际延迟。
| 参数 | 变化方向 | 对延迟的影响 | 典型场景 |
|---|---|---|---|
| 工艺(Process) | Slow → Fast | 延迟减小20%-40% | 晶圆边缘 vs 中心 |
| 电压(Voltage) | 0.9V → 1.1V | 延迟减小30%-50% | 电池供电 vs 充电状态 |
| 温度(Temperature) | -40°C → 125°C | 延迟增大15%-25% | 寒冷开机 vs 高负载运行 |
做STA时,我们通常要检查多个corner:
- 最差情况(Worst Case):Slow工艺 + 低电压 + 高温 → 延迟最大
- 最好情况(Best Case):Fast工艺 + 高电压 + 低温 → 延迟最小
- 典型情况(Typical):中间值 → 用于功耗估算
我曾经踩过一个坑:只检查了最差corner,以为时序没问题。结果芯片在低温低压下工作,hold time违例了。因为低温下管子跑得更快,数据到达时间提前,hold反而变差了。嗯,从那以后我每次都会把setup和hold的corner分开检查。
记住这个口诀:
Setup看最慢,Hold看最快。
Setup用最差corner(慢工艺、低电压、高温),Hold用最好corner(快工艺、高电压、低温)。
知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以看到,从MOS管到标准单元,再到互连线和PVT,最终都指向同一个目标——理解延迟是怎么来的。
这一章的内容就到这里。理解CMOS工艺基础,是做好时序收敛的第一步。后面我们会一步步深入,把STA的每个细节都掰开揉碎讲清楚。
可可精品资料库