输出驱动器的核心任务是将内部逻辑信号(小摆幅、弱驱动)转换为外部接口信号(大摆幅、强驱动)。典型的输出驱动器由预驱动级和输出驱动级两部分组成。
CMOS推挽(Push-Pull)输出驱动器是最常用的输出结构。它由一个PMOS上拉管和一个NMOS下拉管组成,交替导通将输出拉高或拉低。
VDDIO
│
┌────┤────┐
│ │ │
│ ┌─┴─┐ │
│ │ PMOS │ │ 上拉管 (Mp)
│ │ W/L │ │ Wp = β × Wn
│ └─┬─┘ │ (补偿迁移率差异)
│ │ │
├───┤├───┤─── PAD (输出)
│ │ │
│ ┌─┴─┐ │
│ │ NMOS │ │ 下拉管 (Mn)
│ │ W/L │ │
│ └─┬─┘ │
│ │ │
└────┤────┘
│
VSS
由于空穴迁移率约为电子迁移率的40-50%,PMOS需要比NMOS更宽才能实现对称的驱动能力。
假设μn/μp = 2.5(典型0.18μm工艺),要实现对称上升/下降时间:
(W/L)_p = (μn/μp) × (W/L)_n = 2.5 × (W/L)_n
实际设计中还需要考虑体效应(PMOS源极接VDDIO,体效应使其阈值增加)和沟道长度调制效应。
输出驱动管的尺寸通常很大(Wp可达数百μm),直接由内部逻辑驱动会导致极大的传播延迟。预驱动级的作用是逐步放大驱动能力。
预驱动通常采用反相器链(Inverter Chain),每级增加一个固定的扇出因子f:
f_opt = e ≈ 2.718(理论最优,最小延迟)
f_practical = 3~4(实际使用,考虑面积和功耗平衡)
设计目标:驱动Wn=200μm的NMOS输出管
总级数N = 4级预驱动 + 1级输出 = 5级
总延迟 ≈ N × f × τ_inv ≈ 5 × 4 × τ_inv
推挽输出级最严重的问题是穿通电流(Shoot-through Current)——PMOS和NMOS同时导通的瞬间,VDDIO到VSS形成直流通路,产生巨大的功耗尖峰。
解决方法是在PMOS关断和NMOS开启之间(以及反过来)插入死区时间(Dead Time)。通过调整预驱动级的上升/下降时间,确保先关后开。
输出信号的边沿速率(Slew Rate)需要控制在合理范围内——太快会导致EMI、反射和SSO;太慢会增加传播延迟和功耗。
| 方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 驱动管分段 | 将大驱动管分成多段,逐段开启 | 精确可控 | 增加控制逻辑 |
| 串联电阻 | 在输出端串联限流电阻 | 简单 | 增加RC延迟 |
| 栅极RC | 驱动管栅极加RC延迟 | 面积小 | 工艺偏差敏感 |
| 反馈控制 | 检测输出slew,反馈调整驱动 | 自适应 | 电路复杂 |
驱动管分段是最常用的方法。将输出管分为N段,通过控制信号依次开启:
VDDIO
│
┌─────┤─────┐
│ │ │
│ ┌──┴──┐ │
│ │Mp[0]│ │◄── 第1段,最先开启/最后关断
│ └──┬──┘ │
│ ┌──┴──┐ │
│ │Mp[1]│ │◄── 第2段
│ └──┬──┘ │
│ ┌──┴──┐ │
│ │Mp[2]│ │◄── 第3段,最后开启/最先关断
│ └──┬──┘ │
│ │ │
├───┤├──────┤── PAD
│ │ │
│ (NMOS同理) │
└─────┤─────┘
│
VSS
当多个输出IO同时切换时,在电源/地线上产生的电压波动称为同时切换噪声(Simultaneous Switching Noise, SSO),也叫地弹(Ground Bounce)或电源弹(VDD Bounce)。
SSO的根本原因是封装和PCB引入的寄生电感。当多个IO同时切换时,大电流快速变化(高di/dt)在寄生电感上产生电压降:
V_noise = L × (di/dt)
假设条件:
总峰值电流变化率:di/dt = 16 × 24mA / 2ns = 192A/μs
噪声电压:V_noise = 2nH × 192A/μs = 384mV
这个噪声已经占到3.3V IO电压的11.6%,可能造成逻辑错误!
* 03-output-driver-dc-ac.sp
* 输出驱动器DC/AC特性仿真
* 电源
Vddio vddio 0 3.3
Vss 0 0 0
* 输入信号(核心电压域)
Vin data 0 pwl 0 0 10n 0 10.05n 1.2 30n 1.2 30.05n 0 50n 0
* 电平转换 + 预驱动
* 第一级反相器(核心域)
Mp1 a1 data vdd vdd pch W=2u L=0.18u
Mn1 a1 data 0 0 nch W=1u L=0.18u
* 电平转换(核心→IO域)
Mp2 b1 a1 vddio vddio pch W=4u L=0.35u
Mn2 b1 a1 0 0 nch W=2u L=0.35u
* 第二级预驱动
Mp3 c1 b1 vddio vddio pch W=16u L=0.35u
Mn3 c1 b1 0 0 nch W=8u L=0.35u
* 输出驱动级(推挽)
Mpout pad c1 vddio vddio pch W=400u L=0.35u
Mnout pad c1 0 0 nch W=160u L=0.35u
* 负载
Cload pad 0 15p
* 寄生
Lpkg pad_ext pad 1n
Cpad pad 0 3p
.tran 0.01n 50n
.measure tran ipeak_rise MAX I(Mpout) FROM=10n TO=20n
.measure tran ipeak_fall MAX I(Mnout) FROM=30n TO=40n
.measure tran tpr TRIG V(data) VAL=0.6 RISE=1 TARG V(pad) VAL=1.65 RISE=1
.measure tran tpf TRIG V(data) VAL=0.6 FALL=1 TARG V(pad) VAL=1.65 FALL=1
.measure tran slew_rise TRIG V(pad) VAL=0.33 RISE=1 TARG V(pad) VAL=2.97 RISE=1
.measure tran slew_fall TRIG V(pad) VAL=2.97 FALL=1 TARG V(pad) VAL=0.33 FALL=1
.print tran V(data) V(pad) I(Mpout) I(Mnout) I(Vddio)
.end
* 03-sso-simulation.sp
* 同时切换噪声仿真
Vddio vddio_int 0 3.3
* 封装寄生电感
Lpkg_vdd vddio_int vddio 1n
Lpkg_vss 0 vss_pkg 0.5n
Rpkg_vdd vddio vddio_pad 0.05
Rpkg_vss vss_pad vss_pkg 0.05
* 去耦电容
Cdec vddio_pad vss_pad 10n
* 4个同时切换的输出驱动器
* Driver 0
Vd0 d0 0 pwl 0 0 5n 0 5.02n 3.3
Mp0 pad0 d0_b vddio_pad vddio_pad pch W=400u L=0.35u
Mn0 pad0 d0_b vss_pad vss_pad nch W=160u L=0.35u
Cload0 pad0 0 10p
* Driver 1-3(相同结构,略缩写)
* ...(重复3个驱动器)
* 简化:用电流源模拟4个同时切换
Iswitch vddio_pad vss_pad pwl 0 0 5n 0 5.5n 80m 7n 60m 15n 10m 20n 0
.tran 0.01n 30n
.measure tran vdd_bounce MAX V(vddio_pad)-3.3
.measure tran vss_bounce MIN V(vss_pad)
.measure tran total_noise PP V(vddio_pad) FROM=5n TO=15n
.print tran V(vddio_pad) V(vss_pad) I(Iswitch) I(Lpkg_vdd)
.end
输出驱动器仿真关键发现:
并非所有输出驱动器都使用推挽结构。开漏(Open-Drain)输出只包含NMOS下拉管,需要外部上拉电阻。这种结构支持线或(Wired-OR)连接,广泛用于I2C、SMBus等总线。
VDDIO (外部上拉电阻)
│
R_ext (4.7kΩ典型)
│
┌────┤──── PAD
│ │
│ ┌─┴─┐
│ │ NMOS│ 下拉管
│ └─┬─┘
│ │
└────┤──── VSS
│
VSS
双向IO需要输出驱动器能进入高阻态(High-Z),这就是三态(Tri-state)控制。通过使能信号OE控制PMOS和NMOS同时关断。
* 三态控制逻辑
* OE=1: 正常驱动(PMOS和NMOS由数据控制)
* OE=0: 高阻态(PMOS和NMOS都关断)
* PMOS栅极控制: data_b AND OE_b
* NMOS栅极控制: data AND OE
Mpout pad g_p vddio vddio pch W=400u L=0.35u
Mnout pad g_n vss vss nch W=160u L=0.35u
* g_p = NAND(data_b, OE_b) = data_b OR OE (德摩根)
* g_n = NAND(data, OE) = data NOR OE_b (德摩根)
设计一个3.3V输出驱动器,要求在10pF负载下上升/下降时间不超过3ns。假设0.18μm工艺,μnCox=200μA/V²,μpCox=80μA/V²,Vtn=|Vtp|=0.5V。计算NMOS和PMOS的最小宽度。
上升时间主要由PMOS决定:
tr ≈ 2.2 × CL / (μpCox/2 × Wp/L × (VDD-Vtp))
3ns ≈ 2.2 × 10pF / (40μA/V² × Wp/0.18μm × 2.8V)
Wp ≥ 2.2 × 10pF / (3ns × 40μA/V² × 2.8V) × 0.18μm ≈ 118μm
类似地,Wn ≥ 2.2 × 10pF / (3ns × 100μA/V² × 2.8V) × 0.18μm ≈ 47μm
一个芯片有32个3.3V输出IO,封装焊线电感2nH。若25%的IO同时切换,每个IO的峰值电流为20mA,上升时间1ns。计算地弹噪声。如果要使噪声低于200mV,需要多少对电源/地引脚?
同时切换IO数 = 32 × 25% = 8个
di/dt = 8 × 20mA / 1ns = 160A/μs
地弹 = L × di/dt = 2nH × 160A/μs = 320mV
要使噪声 < 200mV:L_max = 200mV / 160A/μs = 1.25nH
每对电源/地引脚分摊电感。若N对并联:L_eff = 2nH/N
N ≥ 2nH / 1.25nH = 1.6,需要至少2对电源/地引脚
完成本课学习,你已经掌握了输出驱动器的完整设计方法!
✅ 已掌握 推挽驱动原理 ✅ 已掌握 预驱动优化 ✅ 已掌握 压摆率控制 ✅ 已掌握 SSO管理