4. 多电压域设计规划

多电压域设计是低功耗实现中最具工程价值、也最容易在后期引发时序与物理问题的环节。它的核心思想是:把芯片按功能与性能需求切成若干供电区域,让高性能模块跑在较高电压、低性能模块跑在较低电压,从而在满足时序的前提下降低动态与静态功耗。但电压域一旦划分不当,跨域路径的时序、电平转换、隔离与保持就会成为后端实现的噩梦。本章围绕电压域划分原则、电源域定义、电压岛规划、跨电压域信号处理策略,以及 Synopsys 工具链中的约束设置展开。

一、电压域划分原则

划分电压域不是简单地按模块切分,而要同时考虑性能、功耗、物理实现与验证成本。实践中通常遵循以下原则:

  • 性能优先原则:关键路径、高频时钟域、模拟/射频模块应放在高电压域,保证时序收敛;低速控制、外设接口、常开逻辑可放在低电压域。
  • 物理邻近原则:同一电压域内的单元应尽量在版图上连续分布,避免电压域边界穿越标准单元行,减少电平转换器和隔离单元的数量。
  • 电源网络可布性:每个电压域需要独立的电源轨与电源开关,划分时要评估电源网格的金属资源与 IR Drop 风险。
  • 验证与测试成本:电压域越多,UPF/CPF 描述越复杂,跨域路径越多,形式验证与 ATPG 测试难度越大。一般中小规模 SoC 控制在 3~6 个电压域较为合理。

一个常见的划分示例:CPU 子系统 1.0V、GPU 0.9V、DDR 控制器 0.8V、常开域(Always-On)0.75V、IO 域 1.8V。这种划分既满足性能梯度,又便于电源管理策略分级实施。

二、电源域定义与电压岛规划

电源域(Power Domain)是 UPF 中的基本单位,它描述一组共享同一供电策略的实例与网络。电压岛(Voltage Island)则是物理实现层面的概念,指版图上被同一电源轨包围、可独立供电或关断的连续区域。二者的关系是:一个电源域在物理上通常对应一个或多个电压岛,而电压岛必须与电源域的边界一致,否则会出现电源网络交叉。

在 Synopsys 流程中,电源域定义通常写在 UPF 文件里,例如:

create_power_domain PD_CPU -elements {u_cpu}
create_power_domain PD_GPU -elements {u_gpu}
create_power_domain PD_AON -elements {u_aon} -include_scope
create_supply_port VDD_CPU
create_supply_net VDD_CPU -domain PD_CPU
connect_supply_net VDD_CPU -ports {VDD_CPU}

电压岛规划则要在 floorplan 阶段完成。关键动作包括:确定每个电压岛的物理边界、放置电源开关单元(Power Switch)、规划电源轨与电源环、预留电平转换器与隔离单元的位置。电压岛边界应尽量沿标准单元行方向对齐,避免出现“锯齿状”边界导致电源布线困难。

多电压域规划与跨域信号处理示意 电压岛物理布局(Floorplan) PD_CPU 1.0V / 高频 电源开关 + 隔离 PD_GPU 0.9V / 中频 可关断 PD_DDR 0.8V / 中频 保持寄存器 PD_AON 0.75V / 常开 无开关 PD_IO 1.8V / 接口电平 电平转换器集中区 跨电压域信号处理策略 源域信号 电平转换器 Level Shifter 目标域 隔离单元(Isolation Cell) 关断域输出钳位到已知电平,防止浮空传播 保持寄存器(Retention Register) 关断前保存状态,上电后恢复,避免重新初始化 电源开关控制(Power Switch) Sleep / Wake-up 信号驱动,控制域上下电时序

三、跨电压域信号处理策略

跨电压域信号是低功耗设计中最容易出问题的部分。信号从一个电压域传到另一个电压域时,必须经过专门的处理单元,否则会出现电平不匹配、浮空传播或状态丢失。主要策略包括:

  • 电平转换器(Level Shifter):当信号从低电压域传到高电压域,或从高电压域传到低电压域时,需要插入电平转换器。UPF 中用 set_level_shifter 命令描述,可指定方向、位置(源域/目标域)和阈值。
  • 隔离单元(Isolation Cell):当目标域被关断时,其输出信号可能浮空,必须用隔离单元钳位到 0 或 1。UPF 中用 set_isolation 命令定义隔离策略,包括隔离位置、钳位值和隔离控制信号。
  • 保持寄存器(Retention Register):对于关断后仍需保留状态的寄存器,使用带保持功能的寄存器单元。UPF 中用 set_retention 命令描述,需指定保持电源和保存/恢复控制信号。
  • 电源开关(Power Switch):控制电压域的上下电。UPF 中用 create_power_switch 命令定义,需指定控制端口、输入输出电源端口和开关类型(Header/Footer)。

这些策略不是孤立的,而是需要协同工作。例如,一个可关断域的输出信号,既要经过隔离单元防止浮空,又要在目标域侧考虑电平转换;如果该信号还需要在关断期间保持,则要使用保持寄存器。

四、Synopsys 实现流程中的约束设置

在 Synopsys 工具链中,多电压域约束主要通过 UPF 文件描述,并在综合与物理实现阶段被工具读取。典型流程如下:

  1. UPF 编写与加载:在 dc_shell 或 icc2_shell 中用 load_upf 命令加载 UPF 文件。UPF 中定义电源域、电源网络、电源开关、隔离、电平转换和保持策略。
  2. 综合阶段:DC 会根据 UPF 插入电平转换器、隔离单元和保持寄存器,并生成相应的网表。此时需检查 report_upf 输出,确认各策略已正确应用。
  3. 物理实现阶段:ICC2 读取 UPF 后,在 floorplan 阶段完成电压岛规划、电源开关放置、电源网络布线。关键命令包括 create_power_domain、create_power_switch、set_isolation、set_level_shifter、set_retention。
  4. 验证阶段:用 check_mv_design 检查多电压域设计的完整性,包括隔离单元是否缺失、电平转换器方向是否正确、保持寄存器控制信号是否连接。同时用 report_mv_design 生成报告。

一个典型的 UPF 约束片段如下:

set_isolation PD_GPU_iso -domain PD_GPU -isolation_power_net VDD_AON \
  -isolation_ground_net VSS -clamp_value 0 -applies_to outputs
set_level_shifter PD_CPU_ls -domain PD_CPU -applies_to inputs \
  -location self -rule low_to_high
set_retention PD_DDR_ret -domain PD_DDR -retention_power_net VDD_AON \
  -retention_ground_net VSS
create_power_switch PD_GPU_sw -domain PD_GPU -output_supply_port {vout VDD_GPU} \
  -input_supply_port {vin VDD} -control_port {sleep ctrl_sleep} \
  -on_state {on_state vin {!sleep}}
在实际项目中,建议先完成电压域划分与 UPF 框架,再进入 RTL 综合。否则后期修改电压域会导致大量单元重新插入与布局调整,代价极高。同时,跨域路径的时序约束要单独标注,避免工具在优化时忽略电平转换器带来的延迟。
常见错误:隔离单元钳位值选择不当导致功能错误;电平转换器方向配置反了导致信号无法正确传递;保持寄存器的保存/恢复时序与电源开关控制信号不同步,造成状态丢失。这些问题在 RTL 仿真中往往难以发现,必须依赖 UPF 感知的仿真与形式验证。

总结来说,多电压域设计规划是一个从架构到物理实现的系统性工程。电压域划分决定了功耗优化的上限,电源域定义与电压岛规划决定了物理实现的可行性,跨域信号处理策略决定了功能正确性,而 Synopsys 工具链中的 UPF 约束则是把这些意图准确传达给工具的手段。四者缺一不可,需要在项目早期就协同考虑。