4. 电源域划分与规划
电源域(Power Domain)是低功耗数字实现中最基础、也最容易被低估的一层结构。它并不是简单地把模块按电压分组,而是把功能层次、供电网络、电平转换、隔离策略、电源开关控制这几件事绑定在一起,形成后续UPF/CPF描述、物理布局、电源规划与验证的共同基准。电源域一旦划分错误,后期往往需要重做电源网络、重跑综合与布局,代价极高。因此本节的重点不是“怎么点菜单”,而是“依据什么划分、在Cadence环境里如何落地、用什么标准判断它是否合理”。
一、划分依据:从功能与电压两个维度同时收敛
电源域划分通常同时受两类约束驱动。第一类是功能与时钟域:同一功能子系统(如CPU核、DSP、视频编解码、DDR控制器、常开域Always-On)内部通信密集、时序路径多,若被拆到不同电源域,会引入大量电平转换器和隔离单元,面积与延迟都会恶化。第二类是电压/功耗状态:不同模块可能工作在不同电压(如0.8V、0.9V、1.0V),或需要独立关断(Power Gating)、独立保持(Retention)、独立调压(DVFS)。
实践中常用“先功能、后电压、再状态”的顺序:先按功能层次划出候选域,再检查每个候选域内部是否存在多电压需求,若存在则进一步拆分;最后确认每个域的电源状态集合(ON/OFF/RETENTION)是否一致。一个典型的示例划分如下(示例参数,仅用于说明方法):
| 电源域 | 典型模块 | 电压 | 电源状态 | 关键约束 |
|---|---|---|---|---|
| PD_AON | PMU、RTC、唤醒逻辑 | 0.9V | 常开 | 不可关断,需隔离输出 |
| PD_CPU | CPU核、L1 Cache | 0.8V/0.9V | ON/RET/OFF | 需Retention,DVFS |
| PD_DSP | DSP、加速器 | 0.8V | ON/OFF | 需Power Switch |
| PD_DDR | DDR PHY/控制器 | 1.0V | ON/OFF | 跨压域,需Level Shifter |
| PD_PERI | 外设、GPIO | 0.9V | ON/OFF | 与AON交互需隔离 |
需要强调的是:跨域信号必须逐条确认是否需要电平转换(Level Shifter)、隔离(Isolation)和保持(Retention)。电压不同→需要Level Shifter;下游可能断电而上游仍驱动→需要Isolation;断电后仍需保存状态→需要Retention寄存器。这三类单元是电源域划分合理性的直接体现。
二、在Cadence环境中创建电源域
在Cadence数字实现流程中,电源域通常通过UPF(Unified Power Format)或CPF描述,并在Genus/Innovus中加载。核心命令包括创建电源域、指定域内实例、定义电源开关、隔离与保持策略。以下为一段示意性UPF片段(示例,非实测):
create_power_domain PD_CPU -elements {u_cpu}
create_power_domain PD_DSP -elements {u_dsp}
create_power_domain PD_AON -elements {u_pmu u_rtc}
create_supply_port VDD_CPU
create_supply_net VDD_CPU
connect_supply_net VDD_CPU -ports {VDD_CPU}
set_domain_supply_net PD_CPU \
-primary_power_net VDD_CPU \
-primary_ground_net VSS
create_power_switch sw_cpu \
-domain PD_CPU \
-input_supply_port {vin VDD_CPU} \
-output_supply_port {vout VDD_CPU_GATED} \
-control_port {sleep cpu_sleep_n} \
-on_state {on vin {!sleep}}
set_isolation iso_cpu \
-domain PD_CPU -isolation_power_net VDD_AON \
-clamp_value 0 -applies_to outputs
set_retention ret_cpu \
-domain PD_CPU -retention_power_net VDD_AON
在Innovus中加载UPF后,工具会自动在跨域边界插入隔离单元、电平转换器和保持寄存器,并在电源规划阶段生成对应的电源环与电源条。此时需要重点检查三件事:域边界是否与物理布局冲突(如隔离单元被放在已关断区域)、电源开关的驱动能力是否足够(避免IR Drop过大)、控制信号是否来自常开域(sleep信号必须由AON驱动)。
三、合理性验证:从静态检查到动态仿真
电源域划分是否合理,不能只看UPF能否加载成功,而要通过多层次验证。静态层面,可用Cadence的Power Domain Verification检查:是否存在未隔离的跨域输出、是否存在缺少Level Shifter的跨压路径、Retention寄存器是否被正确映射。动态层面,通过UPF仿真(如Xcelium + UPF)验证电源状态切换时功能是否正确,尤其是OFF→ON唤醒过程中隔离释放与Retention恢复的时序。
下图给出一个典型的电源域结构与跨域信号处理关系,帮助理解“域—开关—隔离—电平转换—常开控制”之间的连接逻辑:
四、判断合理性的关键指标
完成创建后,建议从以下角度做一次“域级体检”:
- 跨域路径数量:若某两个域之间跨域信号超过总信号的30%,说明划分可能过细,应考虑合并或调整层次。
- 隔离/电平转换单元面积占比:若超过该域面积的5%~8%,需重新评估是否值得独立供电。
- 电源开关的IR Drop:在Innovus中做电源网络分析,确认最坏情况压降不超过电压的5%。
- 唤醒时序:从OFF到ON,隔离释放、Retention恢复、时钟稳定的总延迟是否满足系统唤醒时间要求。
- 控制信号来源:所有sleep、iso_en、ret_en必须来自常开域,否则会出现“域已关断但控制信号丢失”的悬空状态。
最后需要提醒:Cadence工具链中的电源域验证是“规则检查”,它能告诉你“有没有违反UPF语义”,但不能告诉你“这个划分是否最优”。真正的合理性来自对功能、电压、功耗、时序、面积、验证复杂度的综合权衡。一个可落地的判断标准是:如果去掉某个电源域,系统功耗目标仍能达成,且跨域复杂度显著下降,那么这个域就不应该独立存在。