4. 电压域物理实现:从理论到实战
各位同学,今天我们来聊聊多电压域设计里最核心的实操环节。说实话,这块内容我第一次接触时也头大,但后来发现,只要把几个关键动作搞明白,剩下的就是细心和耐心了。
4.1 电压域(Voltage Area)创建
电压域,说白了就是芯片上的一块区域,这块区域里的标准单元、宏单元都工作在同一个电压下。我习惯叫它「VA」,英文全称是 Voltage Area。
创建 VA 时,我们通常用工具的命令来画一个矩形区域。比如在华大九天的工具里,可以这样操作:
# 创建一个名为 VA_CORE 的电压域,电压 0.8V
create_voltage_area -name VA_CORE -voltage 0.8 \
-boundary {100 100 500 500}
这里要注意几个点:
- 边界要留余量:我建议 VA 边界比实际逻辑区域大 5-10 微米,防止后续布线时出现 DRC 违例
- 命名要规范:用 VA_ 前缀,后面跟功能名,比如 VA_IO、VA_MEM
- 电压值要统一:同一个 VA 内所有单元必须用同一电压,别混用
核心要点:电压域的本质是「物理隔离 + 电压统一」。你想想看,如果两个不同电压的单元挨在一起,那电流倒灌问题就来了。
4.2 电源域(Power Domain)分配
电源域和电压域有啥区别?嗯,这个问题我经常被问到。简单说:电压域是物理概念,电源域是逻辑概念。
一个电源域可以包含多个电压域,也可以只包含一个。比如你的芯片有 1.2V 和 0.8V 两个电压,那至少有两个电源域。但如果 0.8V 区域里又分了两个 VA,那这两个 VA 就属于同一个电源域。
分配电源域时,我一般遵循这个流程:
- 先确定芯片需要几种电压
- 每种电压对应一个电源域
- 在同一个电源域内,再根据功能划分电压域
举个例子,我之前做过一个 AI 加速芯片:
| 电源域 | 电压 | 包含的电压域 | 功能 |
|---|---|---|---|
| PD_CORE | 0.8V | VA_COMPUTE, VA_MEM | 核心计算 |
| PD_IO | 1.8V | VA_IO_IN, VA_IO_OUT | 输入输出 |
| PD_ALWAYS | 1.2V | VA_ALWAYS | 常开区域 |
个人经验:电源域分配时,尽量把相同电压的模块放在一起。这样电源网络好走,IR Drop 也容易控制。我曾经为了省面积,把两个不同电压的模块交叉放置,结果电源网络绕来绕去,最后 IR Drop 超标,不得不重做。
4.3 Always-On 区域处理
Always-On 区域,就是芯片里永远不能断电的那部分。比如唤醒逻辑、关键状态寄存器、RTC 时钟等。
处理 Always-On 区域时,有几个坑要注意:
- 电源必须独立:Always-On 区域要用单独的电源网络,不能被电源开关控制
- 隔离要到位:Always-On 区域和其他区域之间必须加电平转换器(Level Shifter)
- 面积别太大:我见过有人把半个芯片都设成 Always-On,那功耗控制就白做了
避坑指南:我曾经在一个项目中,把 Always-On 区域的电源网络和普通区域连在了一起。结果电源关断时,Always-On 区域也跟着掉了电,整个芯片的唤醒逻辑失效。那次教训让我记住了:Always-On 的电源网络必须从顶层单独拉下来,不能偷懒。
在华大九天的工具里,标记 Always-On 区域的方法很简单:
# 将 VA_ALWAYS 标记为常开区域
set_voltage_area -name VA_ALWAYS -always_on true
4.4 电源开关(Power Switch)插入
电源开关,就是用来控制某个电压域是否供电的器件。它本质上是一个大尺寸的 PMOS 管,串联在电源网络和电压域之间。
插入电源开关时,我一般按这个步骤来:
- 确定开关类型:粗粒度开关还是细粒度开关?粗粒度一个开关管一大片,细粒度每个标准单元都配开关
- 计算开关数量:根据电压域的电流需求,算出需要多少个开关并联
- 摆放开关:均匀分布在电压域边界,保证供电均匀
- 连接控制信号:把开关的使能信号连到 Always-On 区域
举个例子,一个需要 1A 电流的电压域,如果每个开关能提供 10mA,那就需要 100 个开关。我习惯多留 20% 的余量,放 120 个。
# 插入电源开关的示例命令
insert_power_switch -name SW_CORE \
-voltage_area VA_CORE \
-switch_cell "HEADER_10MA" \
-number 120 \
-control_signal "sw_en"
关键提醒:电源开关的插入密度直接影响 IR Drop。开关太少,电压域中间电压会掉得很厉害。我建议用工具自带的 IR Drop 分析功能,反复迭代几次,找到最优的开关数量和位置。
知识体系总览
下面这张图,是我自己总结的多电压域实现流程,你一看就明白了:
这张图把整个流程串起来了。你从电压域创建开始,一步步往下走,中间别忘了用 IR Drop 分析来反馈调整。我每次做项目,至少要在电源开关插入这一步迭代 3-5 轮,才能把 IR Drop 压到 5% 以内。
最后说一句:多电压域设计,说白了就是「分而治之」。把大芯片切成几个小电压域,每个域独立控制电源,既能省功耗,又能保证性能。但代价就是设计复杂度上去了,你得花更多时间在物理验证上。
公众号:蓝海资料掘金营,微信deep3321