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_AONPMU、RTC、唤醒逻辑0.9V常开不可关断,需隔离输出
PD_CPUCPU核、L1 Cache0.8V/0.9VON/RET/OFF需Retention,DVFS
PD_DSPDSP、加速器0.8VON/OFF需Power Switch
PD_DDRDDR PHY/控制器1.0VON/OFF跨压域,需Level Shifter
PD_PERI外设、GPIO0.9VON/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恢复的时序。

下图给出一个典型的电源域结构与跨域信号处理关系,帮助理解“域—开关—隔离—电平转换—常开控制”之间的连接逻辑:

PD_AON (常开 0.9V) PMU / RTC / 唤醒逻辑 sleep_ctrl 生成 隔离/保持供电 VDD_AON PD_CPU (0.8V/0.9V) CPU核 / L1 Cache ON / RET / OFF Retention 寄存器 PD_DSP (0.8V) DSP / 加速器 ON / OFF Power Switch 控制 PD_DDR (1.0V) DDR PHY / 控制器 ON / OFF 跨压域 1.0V↔0.9V PD_PERI (0.9V) 外设 / GPIO ON / OFF 与AON交互需隔离 Power Switch Isolation Cell Level Shifter Retention Reg sleep_ctrl iso_en (AON驱动) VDD_GATED 0.9V→1.0V ret_en 电源/控制流 隔离控制 保持控制 电源开关

四、判断合理性的关键指标

完成创建后,建议从以下角度做一次“域级体检”:

  • 跨域路径数量:若某两个域之间跨域信号超过总信号的30%,说明划分可能过细,应考虑合并或调整层次。
  • 隔离/电平转换单元面积占比:若超过该域面积的5%~8%,需重新评估是否值得独立供电。
  • 电源开关的IR Drop:在Innovus中做电源网络分析,确认最坏情况压降不超过电压的5%。
  • 唤醒时序:从OFF到ON,隔离释放、Retention恢复、时钟稳定的总延迟是否满足系统唤醒时间要求。
  • 控制信号来源:所有sleep、iso_en、ret_en必须来自常开域,否则会出现“域已关断但控制信号丢失”的悬空状态。
电源域划分不是一次性的,它随着架构演进、电压方案调整、工艺节点变化而迭代。建议在项目早期就建立“域—电压—状态—跨域信号”的清单,并在每次RTL或UPF变更后重新跑一遍静态检查,避免问题积累到物理实现阶段才暴露。

最后需要提醒:Cadence工具链中的电源域验证是“规则检查”,它能告诉你“有没有违反UPF语义”,但不能告诉你“这个划分是否最优”。真正的合理性来自对功能、电压、功耗、时序、面积、验证复杂度的综合权衡。一个可落地的判断标准是:如果去掉某个电源域,系统功耗目标仍能达成,且跨域复杂度显著下降,那么这个域就不应该独立存在。