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)、规划电源轨与电源环、预留电平转换器与隔离单元的位置。电压岛边界应尽量沿标准单元行方向对齐,避免出现“锯齿状”边界导致电源布线困难。
三、跨电压域信号处理策略
跨电压域信号是低功耗设计中最容易出问题的部分。信号从一个电压域传到另一个电压域时,必须经过专门的处理单元,否则会出现电平不匹配、浮空传播或状态丢失。主要策略包括:
- 电平转换器(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 文件描述,并在综合与物理实现阶段被工具读取。典型流程如下:
- UPF 编写与加载:在
dc_shell或icc2_shell中用load_upf命令加载 UPF 文件。UPF 中定义电源域、电源网络、电源开关、隔离、电平转换和保持策略。 - 综合阶段:DC 会根据 UPF 插入电平转换器、隔离单元和保持寄存器,并生成相应的网表。此时需检查
report_upf输出,确认各策略已正确应用。 - 物理实现阶段:ICC2 读取 UPF 后,在 floorplan 阶段完成电压岛规划、电源开关放置、电源网络布线。关键命令包括
create_power_domain、create_power_switch、set_isolation、set_level_shifter、set_retention。 - 验证阶段:用
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}}
总结来说,多电压域设计规划是一个从架构到物理实现的系统性工程。电压域划分决定了功耗优化的上限,电源域定义与电压岛规划决定了物理实现的可行性,跨域信号处理策略决定了功能正确性,而 Synopsys 工具链中的 UPF 约束则是把这些意图准确传达给工具的手段。四者缺一不可,需要在项目早期就协同考虑。