3、DSP电源域划分:电源域概念、不同电压域的设计原则、电源域隔离技术

好,咱们今天聊点实在的——电源域划分。

说实话,很多做DSP开发的兄弟,一开始都不太重视这个。觉得“不就是供电嘛,接上电不就行了?”我当年也这么想。直到有一次,我在一个低功耗音频处理项目里,因为电源域没处理好,导致整个系统在休眠模式下多耗了30%的电流。嗯,从那以后,我就老老实实把电源域划分当成了必修课。

3.1 什么是电源域?

电源域,说白了就是一块独立的供电区域。你可以把它想象成房子里的不同房间——客厅、卧室、厨房,每个房间可以单独开关灯。DSP芯片内部也一样,不同的功能模块可以接在不同的电源网络上,由不同的电源开关或LDO独立控制。

为什么要这么干?因为DSP里不是所有模块都在同时工作。比如,音频解码的时候,FFT加速器可能闲着;做FFT的时候,I2S接口可能闲着。如果所有模块都一直通电,那功耗就白白浪费了。

核心思想: 只给正在工作的模块供电,让空闲模块断电或进入低功耗状态。

我个人习惯把电源域分成三类:

  • 常开域(Always-On Domain): 永远不能断电的区域,比如实时时钟、唤醒逻辑、部分寄存器。
  • 工作域(Active Domain): 正常运行时供电,休眠时断电。比如CPU核心、DSP内核、大部分外设。
  • 可关断域(Switchable Domain): 根据任务需求动态开关。比如某个专用加速器、某个特定外设接口。

你想想看,如果能把常开域做得足够小,那系统在休眠时的功耗就能压到极低。我在一个智能穿戴项目里,就是把常开域缩小到只有RTC和几个唤醒GPIO,结果待机电流从50μA降到了3μA。效果立竿见影。

3.2 不同电压域的设计原则

电压域和电源域还不完全一样。电源域管的是“通不通电”,电压域管的是“用多高的电压”。

DSP芯片内部,不同模块对电压的要求不同。比如:

  • 核心逻辑(Core Logic):通常需要低压,比如0.8V~1.2V,速度快但耐压差。
  • I/O接口:通常需要高压,比如1.8V、3.3V,用来和外部芯片通信。
  • 模拟模块(ADC/DAC/PLL):对电源噪声敏感,通常需要独立的干净电源。

设计原则其实就三条,我总结一下:

  1. 电压匹配原则: 不同电压域之间不能直接连接。如果3.3V的I/O域和1.2V的核心域直接连,核心域就烧了。必须用电平转换器(Level Shifter)。
  2. 噪声隔离原则: 模拟域和数字域要分开供电。数字电路开关时会产生大量噪声,会污染模拟信号。我在一个音频编解码器项目里,就因为没把ADC的电源和数字核心的电源分开,导致信噪比差了10dB。后来加了独立的LDO和滤波电容,问题才解决。
  3. 电压缩放原则: 动态电压调节(DVS)是低功耗的利器。任务重的时候用高电压跑高频,任务轻的时候用低电压跑低频。我建议在设计中预留多个电压档位,至少要有“高性能”、“普通”、“低功耗”三档。

小技巧: 不同电压域之间做电平转换时,要注意方向。单向的电平转换器只能从一个方向传信号,双向的才支持两个方向。我见过有人把单向的当双向用,结果信号死活过不去。

3.3 电源域隔离技术

隔离技术,就是解决“怎么让不同电源域之间既能独立开关,又能正常通信”的问题。

主要有三种技术:

3.3.1 电源开关(Power Switch)

这是最直接的方法。在电源域和供电网络之间加一个开关,需要的时候闭合,不需要的时候断开。开关可以用PMOS管实现,也可以用专用的电源开关芯片。

我曾经在一个多核DSP项目里,给每个核心都配了独立的电源开关。当某个核心空闲时,直接切断它的供电,功耗降为零。但要注意一个问题——开关的导通电阻不能太大,否则压降会导致核心电压不足。我一般选导通电阻在10mΩ以下的开关。

3.3.2 隔离单元(Isolation Cell)

当某个电源域断电时,它的输出信号会变成不确定状态(高阻或浮空)。如果这个信号连到了另一个还在工作的电源域,就会导致逻辑错误甚至漏电。

隔离单元的作用就是:在断电时,把输出钳位到一个确定的状态(通常是0或1)。

注意: 隔离单元本身也需要供电。它必须接在常开域或者不断电的那一侧。否则它自己都断电了,还怎么隔离别人?

3.3.3 电平转换器(Level Shifter)

这个前面提过了。不同电压域之间通信,必须用电平转换器。比如1.2V域的信号要传到3.3V域,电平转换器会把1.2V的“高电平”转换成3.3V的“高电平”。

电平转换器有两种常见结构:

  • 单端型: 结构简单,适合单向信号。
  • 差分型: 抗干扰能力强,适合高速信号。

我个人的经验是:对于时钟信号和高速数据总线,尽量用差分型电平转换器。普通控制信号用单端型就够了。

3.4 电源域划分的实战流程

说了这么多理论,咱们来点实际的。我一般按以下步骤做电源域划分:

  1. 列出所有功能模块: CPU、DSP核、内存、外设(UART、I2C、SPI、USB等)、模拟模块(ADC、DAC、PLL)。
  2. 分析工作模式: 哪些模块在什么模式下工作?比如休眠时只需要RTC和唤醒逻辑,录音时需要ADC和DSP核,播放时需要DAC和DSP核。
  3. 分组: 把在同一模式下同时工作的模块分到同一个电源域。把永远需要工作的模块分到常开域。
  4. 确定电压: 根据模块的工作频率和工艺,确定每个域的工作电压。核心域一般用最低电压,I/O域用标准电压。
  5. 设计隔离方案: 跨域信号要加电平转换器或隔离单元。注意方向和时序。
  6. 仿真验证: 用EDA工具做功耗仿真和时序仿真,确保隔离逻辑不会导致时序违例。

避坑指南: 我曾经在一个项目里,把两个不同电压域的信号直接连在了一起,结果仿真时没发现问题,流片回来后发现芯片发热严重。一查,原来是电平不匹配导致的漏电流。从那以后,我每次做电源域划分,都会画一张详细的“跨域信号表”,逐个检查每个跨域信号是否加了正确的隔离或电平转换。

3.5 电源域划分的框架图

下面这张图是我自己总结的电源域划分框架,你可以参考一下:

DSP电源域划分框架图 常开域 RTC 唤醒逻辑 关键寄存器 工作域 CPU核心 DSP内核 内存 可关断域 FFT加速器 特定外设 协处理器 隔离技术 电源开关 (Power Switch) 隔离单元 (Isolation Cell) 电平转换器 (Level Shifter) 电压域设计原则 电压匹配 + 电平转换 噪声隔离 (模拟/数字) 电压缩放 (DVS)

这张图把电源域、隔离技术和电压域设计原则串在了一起。你可以看到,常开域、工作域、可关断域之间通过隔离技术连接,而每个域内部又有各自的电压设计原则。实际项目中,你需要在芯片设计阶段就把这些规划好,而不是等PCB layout了再临时抱佛脚。

3.6 总结一下

电源域划分,说白了就是“分而治之”。把芯片拆成多个独立供电的区域,每个区域按需供电,该断就断,该降就降。隔离技术是保证这些区域之间能正常通信的关键。

我个人觉得,做低功耗设计,电源域划分是最值得花时间琢磨的环节之一。它不像算法优化那样需要高深的数学,也不像电路设计那样需要精密的计算,但它决定了整个系统的功耗天花板。你把这个搞好了,后面的工作会轻松很多。

最后一个小建议: 刚开始做电源域划分时,不要追求完美。先画一个粗粒度的方案,把最重要的几个域分出来,然后逐步细化。我见过有人一开始就想把每个外设都独立成一个域,结果设计复杂度爆炸,最后反而做不下去了。记住,好的设计是“够用就好”,不是“越多越好”。


公众号:蓝海资料掘金营,微信deep3321