03 - 输出驱动器设计

🎯 课程目标

1. 输出驱动器的基本架构

输出驱动器的核心任务是将内部逻辑信号(小摆幅、弱驱动)转换为外部接口信号(大摆幅、强驱动)。典型的输出驱动器由预驱动级和输出驱动级两部分组成。

1.1 推挽输出驱动器原理

CMOS推挽(Push-Pull)输出驱动器是最常用的输出结构。它由一个PMOS上拉管和一个NMOS下拉管组成,交替导通将输出拉高或拉低。

        VDDIO
         │
    ┌────┤────┐
    │    │    │
    │  ┌─┴─┐  │
    │  │ PMOS │  │  上拉管 (Mp)
    │  │ W/L │  │  Wp = β × Wn
    │  └─┬─┘  │  (补偿迁移率差异)
    │    │    │
    ├───┤├───┤─── PAD (输出)
    │    │    │
    │  ┌─┴─┐  │
    │  │ NMOS │  │  下拉管 (Mn)
    │  │ W/L │  │
    │  └─┬─┘  │
    │    │    │
    └────┤────┘
         │
        VSS

1.2 PMOS/NMOS尺寸比设计

由于空穴迁移率约为电子迁移率的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,体效应使其阈值增加)和沟道长度调制效应。

2. 预驱动级设计

输出驱动管的尺寸通常很大(Wp可达数百μm),直接由内部逻辑驱动会导致极大的传播延迟。预驱动级的作用是逐步放大驱动能力。

2.1 反相器链优化

预驱动通常采用反相器链(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

2.2 死区时间控制

推挽输出级最严重的问题是穿通电流(Shoot-through Current)——PMOS和NMOS同时导通的瞬间,VDDIO到VSS形成直流通路,产生巨大的功耗尖峰。

⚠️ 穿通电流的危害

解决方法是在PMOS关断和NMOS开启之间(以及反过来)插入死区时间(Dead Time)。通过调整预驱动级的上升/下降时间,确保先关后开。

3. 压摆率控制

输出信号的边沿速率(Slew Rate)需要控制在合理范围内——太快会导致EMI、反射和SSO;太慢会增加传播延迟和功耗。

3.1 压摆率控制方法

方法原理优点缺点
驱动管分段将大驱动管分成多段,逐段开启精确可控增加控制逻辑
串联电阻在输出端串联限流电阻简单增加RC延迟
栅极RC驱动管栅极加RC延迟面积小工艺偏差敏感
反馈控制检测输出slew,反馈调整驱动自适应电路复杂

3.2 驱动管分段设计

驱动管分段是最常用的方法。将输出管分为N段,通过控制信号依次开启:

         VDDIO
          │
    ┌─────┤─────┐
    │     │     │
    │  ┌──┴──┐  │
    │  │Mp[0]│  │◄── 第1段,最先开启/最后关断
    │  └──┬──┘  │
    │  ┌──┴──┐  │
    │  │Mp[1]│  │◄── 第2段
    │  └──┬──┘  │
    │  ┌──┴──┐  │
    │  │Mp[2]│  │◄── 第3段,最后开启/最先关断
    │  └──┬──┘  │
    │     │     │
    ├───┤├──────┤── PAD
    │     │     │
    │ (NMOS同理) │
    └─────┤─────┘
          │
         VSS

4. 同时切换噪声(SSO)

当多个输出IO同时切换时,在电源/地线上产生的电压波动称为同时切换噪声(Simultaneous Switching Noise, SSO),也叫地弹(Ground Bounce)或电源弹(VDD Bounce)。

4.1 SSO的物理机制

SSO的根本原因是封装和PCB引入的寄生电感。当多个IO同时切换时,大电流快速变化(高di/dt)在寄生电感上产生电压降:

V_noise = L × (di/dt)

📐 SSO噪声估算

假设条件:

总峰值电流变化率:di/dt = 16 × 24mA / 2ns = 192A/μs

噪声电压:V_noise = 2nH × 192A/μs = 384mV

这个噪声已经占到3.3V IO电压的11.6%,可能造成逻辑错误!

4.2 SSO抑制策略

  1. 降低di/dt:压摆率控制、驱动管分段开启
  2. 降低寄生电感:使用倒装焊、增加电源/地引脚
  3. 增加去耦电容:片上和封装内去耦
  4. 交错切换:将同时切换的IO分组,延迟一定时间
  5. 电源/地引脚分配:每3-5个信号IO配一对电源/地引脚

5. SPICE仿真:输出驱动器完整验证

5.1 推挽驱动器DC/AC特性

* 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

5.2 SSO仿真

* 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
✅ 仿真验证结果

输出驱动器仿真关键发现:

6. 开漏输出与弱上拉

并非所有输出驱动器都使用推挽结构。开漏(Open-Drain)输出只包含NMOS下拉管,需要外部上拉电阻。这种结构支持线或(Wired-OR)连接,广泛用于I2C、SMBus等总线。

6.1 开漏驱动器设计

        VDDIO (外部上拉电阻)
         │
         R_ext (4.7kΩ典型)
         │
    ┌────┤──── PAD
    │    │
    │  ┌─┴─┐
    │  │ NMOS│  下拉管
    │  └─┬─┘
    │    │
    └────┤──── VSS
         │
        VSS
💡 开漏 vs 推挽选择指南

7. 三态输出控制

双向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 (德摩根)

8. 练习

📝 练习1:驱动管尺寸设计

设计一个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

📝 练习2:SSO估算

一个芯片有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对电源/地引脚

9. 关键要点总结

🔑 本章核心要点
  1. 推挽输出驱动器是IO设计的核心,PMOS/NMOS尺寸比需补偿迁移率差异
  2. 预驱动级采用反相器链,最优扇出因子约e≈2.718,实际用3-4
  3. 死区时间控制是避免穿通电流的关键
  4. 压摆率控制通过驱动管分段实现,平衡速度和EMI
  5. SSO是高速IO设计的主要挑战,需要综合考虑封装、去耦和驱动策略
  6. 开漏和三态输出是推挽结构的重要补充

🏆 成就解锁:驱动器设计师

完成本课学习,你已经掌握了输出驱动器的完整设计方法!

✅ 已掌握 推挽驱动原理 ✅ 已掌握 预驱动优化 ✅ 已掌握 压摆率控制 ✅ 已掌握 SSO管理