现代SoC通常需要支持多种IO电平标准,每个电平标准对应一个独立的电源域。电源域的划分直接影响IO布局、ESD策略和芯片面积。
| 驱动因素 | 影响 | 示例 |
|---|---|---|
| IO电平标准 | 不同电平需要不同VDDIO | 3.3V LVTTL、1.8V LVCMOS |
| 功耗域 | 独立开关降低功耗 | Always-on域、可关断域 |
| 模拟/数字隔离 | 噪声隔离需求 | VDDA(模拟)、VDDD(数字) |
| 热插拔 | 需要电源隔离 | USB域、PCIe域 |
| 安全域 | 安全隔离需求 | TrustZone安全域、非安全域 |
┌───────────────────────────────────────────────┐
│ SoC电源域架构 │
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ Always-On 域 (VDD_RTC) │ │
│ │ 0.9V, 始终供电 │ │
│ └─────────────────────────────────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 核心逻辑 │ │ DDR控制器 │ │ GPU核心 │ │
│ │ VDD=0.8V │ │ VDDQ=1.2V│ │ VDDG=0.7V│ │
│ │ (可关断) │ │ (可关断) │ │ (可关断) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────────────────────────────────────┐ │
│ │ IO Ring │ │
│ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │
│ │ │GPIO │ │SPI │ │USB │ │DDR │ │ │
│ │ │3.3V │ │3.3V │ │1.8V │ │1.2V │ │ │
│ │ └─────┘ └─────┘ └─────┘ └─────┘ │ │
│ └──────────────────────────────────────────┘ │
└───────────────────────────────────────────────┘
当某个电源域被关断时,需要隔离该域与活动域之间的信号路径,防止泄漏和错误。
VDD (常供)
│
┌────┤────┐
│ ┌─┴─┐ │
│ │PMOS│ │ 头部开关管
│ │HSW │ │ 栅极由Sleep控制
│ └─┬─┘ │
│ │ │
│ VDD_V │ 虚拟电源(开关后)
│ │ │
│ [电路] │ 可关断域的逻辑
│ │ │
└────┤────┘
│
VSS
Sleep=0: PMOS导通, VDD_V≈VDD, 域正常工作
Sleep=1: PMOS关断, VDD_V浮空, 域断电
在可关断域和活动域的边界放置隔离单元,确保关断域的输出不会导致活动域的输入出现非法电平:
在电源域边界,电平转换和隔离功能通常集成在一个单元中:
* 电平转换+隔离一体化单元
* DIR: A域→B域
* ISO: 隔离使能
* 当A域关断时,ISO=1,输出钳位到安全值
* 正常工作 (ISO=0):
* B_out = LevelShift(A_in)
*
* 隔离模式 (ISO=1):
* B_out = 0 (AND隔离) 或 1 (OR隔离)
当电源域关断时,域内的状态(寄存器值)会丢失。需要在关断前保存状态,上电后恢复。
保持寄存器使用始终供电的从锁存器保存关键状态:
软件可访问的备份寄存器,位于Always-on域:
* 14-power-domain-switching.sp
* 电源域开关与隔离仿真
* 常供电源
Vdd_always vdd_always 0 1.0
* 可关断电源(通过头部开关)
Vdd_raw vdd_raw 0 1.0
* 睡眠控制
Vsleep sleep 0 pwl 0 1.2 100n 1.2 100.1n 0 400n 0 400.1n 1.2
* 头部开关PMOS
Mp_hsw vdd_v sleep_b vdd_raw vdd_raw pch W=1000u L=0.18u
* Sleep反相
Mp_sb sleep_b sleep vdd_always vdd_always pch W=4u L=0.18u
Mn_sb sleep_b sleep 0 0 nch W=2u L=0.18u
* 可关断域内逻辑
Mp_inv a_in b_in vdd_v vdd_v pch W=2u L=0.18u
Mn_inv a_in b_in 0 0 nch W=1u L=0.18u
* 隔离单元(AND隔离)
Mn_iso iso_out a_in iso_en 0 nch W=2u L=0.18u
Mp_iso iso_out iso_en_b vdd_always vdd_always pch W=4u L=0.18u
* ISO使能 = Sleep
Viso_en iso_en 0 1.0
Viso_en_b iso_en_b 0 0
* 虚拟电源去耦电容
Cvdd_v vdd_v 0 100p
.tran 0.1n 500n
.measure tran vdd_v_off FIND V(vdd_v) AT=300n
.measure tran vdd_v_on FIND V(vdd_v) AT=450n
.measure tran iso_active FIND V(iso_out) AT=50n
.measure tran iso_clamped FIND V(iso_out) AT=300n
.print tran V(sleep) V(vdd_v) V(a_in) V(iso_out)
.end
电源域开关仿真结果:
电源域的划分直接影响ESD保护策略:
当电源域关断时,VDD_V浮空。ESD电流可能通过ESD二极管注入VDD_V,但无处可去(头部开关关断,电源钳位失去电源参考)!
解决方案:
一个MCU需要支持:3.3V GPIO、1.8V SPI、1.2V DDR3、0.8V核心、3.3V模拟ADC。设计电源域划分方案,考虑功耗、ESD和面积。
建议5个电源域:
ESD路径:VDDA→VDDIO_33→VDD_DDR→VDD_CORE→VSS
完成本课学习,你已经掌握了IO电源域的设计策略!
✅ 已掌握 域划分 ✅ 已掌握 隔离技术 ✅ 已掌握 状态保持 ✅ 已掌握 ESD交互
电源域的物理布局直接影响电源完整性和ESD有效性。
IO Ring中的电源环(Power Ring)为所有IO提供VDDIO和VSS连接:
┌────────────────────────────────────────────┐\n│ VDDIO电源环 (M7宽100μm) │\n│ ═══════════════════════════════════════ │\n│ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ │\n│ │IO││IO││IO││IO││IO││IO││IO││IO│ │\n│ └──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘ │\n│ ═══════════════════════════════════════ │\n│ VSS地环 (M7宽100μm) │\n│ │\n│ 去耦电容: 每个电源焊盘旁50-200pF │\n│ 电源钳位: 每200-500μm分布 │\n└────────────────────────────────────────────┘当信号需要跨越电源域边界时,必须遵守严格的布线规则:
操作系统通过电源域管理驱动控制各域的开关:
// 电源域控制接口\nstruct power_domain {\n uint32_t domain_id; // 域ID\n bool is_on; // 当前状态\n uint32_t voltage_mv; // 电压(mV)\n uint32_t depend_mask; // 依赖域掩码\n};\n\n// API\nint pd_turn_on(uint32_t domain_id); // 开启电源域\nint pd_turn_off(uint32_t domain_id); // 关闭电源域\nint pd_set_voltage(uint32_t id, uint32_t mv); // 设置电压\nbool pd_is_on(uint32_t domain_id); // 查询状态