一、多电压域设计概述
低功耗设计的驱动力
做芯片设计这些年,我越来越觉得功耗问题是个绕不开的坎。早些年大家拼性能,谁的主频高谁就牛。可现在呢?你想想看,手机芯片功耗高了烫手,物联网设备电池撑不过一周,数据中心电费比设备还贵——功耗已经成了实实在在的瓶颈。
为什么会这样?说白了,工艺节点越往下走,漏电流就越发不可控。我记得在28nm时代,动态功耗还是主角;到了16nm,静态功耗就开始抢戏了。现在7nm、5nm,漏电流占比能到40%以上。你辛辛苦苦优化了动态功耗,结果芯片待机时电池照样哗哗掉电,这谁受得了?
低功耗设计的驱动力,我总结下来主要有三个:
- 散热限制:封装和散热成本越来越高,每瓦功耗都是真金白银
- 电池续航:移动设备、IoT终端对续航的追求永无止境
- 可靠性:温度每升高10度,芯片寿命差不多减半
我个人习惯把功耗问题分成两个层面看:一个是"怎么省电",另一个是"怎么让电花得值"。多电压域设计,恰恰是同时解决这两个问题的利器。
多电压域的基本概念
多电压域,说白了就是让芯片的不同模块工作在各自最合适的电压下。不是所有电路都需要1.0V,也不是所有电路都能忍受0.6V。你想想看,CPU核心要跑高频,电压得给足;而GPIO接口要兼容外部标准,电压也不能太低。但那些永远在待机的控制逻辑,完全可以用更低的电压来跑。
这里有个关键点:电压域是指共享同一供电电压的物理区域。每个电压域可以独立调节电压,甚至独立开关。我见过不少新手设计师,一上来就想把整个芯片做成一个电压域——省事是省事了,功耗却白白浪费了。
多电压域设计的基本思路是这样的:
- 把芯片功能模块按性能需求分组
- 每组分配一个合适的电压
- 在电压域之间插入电平转换器
- 配合电源管理单元做动态调压
嗯,这里要注意:电压域不是越多越好。每多一个电压域,就要多一套电源网络、多一组电平转换器。我在一个项目中试过8个电压域,结果光电源布线就把后端工程师逼疯了。一般来说,3-5个电压域是比较务实的做法。
电压域划分原则
电压域怎么划?这个问题我当年也纠结过。后来踩了不少坑,慢慢总结出几条原则:
原则一:按性能需求分
高频模块给高电压,低频模块给低电压。这个道理很直观。但要注意,同一个功能模块内部也可能有不同性能要求。比如一个CPU核,执行单元需要高频,缓存却可以低频。我曾经在一个项目中把CPU核拆成两个电压域,效果出奇的好。
原则二:按功耗特性分
常开模块和可关断模块要分开。那些永远不能断电的模块(比如唤醒逻辑、实时时钟),单独放在一个电压域里。这样其他模块可以放心地断电,不用担心把"看门狗"也关掉了。
原则三:按物理布局分
这个容易被忽略。两个电压域如果物理距离太远,电源网络走线会很长,IR drop问题会很严重。我建议在floorplan阶段就把电压域规划好,别等到后端布线时才发现两个电压域隔了半个芯片。
| 划分维度 | 典型场景 | 电压范围 | 注意事项 |
|---|---|---|---|
| 高性能域 | CPU、GPU、DSP | 0.8V - 1.2V | 动态调压频繁 |
| 中速域 | 总线、DMA、外设 | 0.6V - 0.9V | 需平衡速度与功耗 |
| 低功耗域 | 唤醒逻辑、RTC | 0.4V - 0.6V | 必须常开 |
| IO域 | GPIO、接口 | 1.8V - 3.3V | 受外部标准约束 |
我曾经犯过一个低级错误:把两个需要频繁通信的模块分到了不同电压域。结果电平转换器成了性能瓶颈,时序怎么都修不过。后来不得不把这两个模块合并到同一个电压域,虽然功耗增加了5%,但时序问题迎刃而解。所以,跨域通信的频率和延迟一定要提前评估。
原则四:考虑电源管理复杂度
每个电压域都需要独立的电源管理单元(PMU)来控制。PMU本身也要消耗功耗和面积。我见过一个极端案例:一个芯片分了12个电压域,结果PMU占了芯片面积的15%,功耗占了8%——这已经本末倒置了。
我的建议是:先做功耗分析,找出真正的"功耗大户"。通常20%的模块消耗了80%的功耗,这些模块值得单独划分电压域。其他模块可以合并,别为了追求理论上的最优而把设计搞得太复杂。
总结一下:多电压域设计不是炫技,而是解决实际功耗问题的工程手段。划分电压域时,多想想"这个模块真的需要单独供电吗?"——问自己三遍,答案自然就出来了。