4. 模拟前端低功耗设计:像素级功耗优化、列级ADC与片上放大、偏置电流管理

各位同学,咱们今天聊点实在的。模拟前端,说白了就是视觉仿生系统的“耳朵”和“眼睛”。它要把光信号转成电信号,再放大、数字化。这个环节要是功耗控制不好,后面数字电路再怎么省电也白搭。我个人习惯,做系统级低功耗设计时,第一个盯死的模块就是模拟前端。

为什么?你想想看,一个百万像素级别的传感器阵列,每个像素都在耗电,列级电路也在耗电,偏置电流更是无底洞。咱们今天就把这三个大头拆开揉碎了讲清楚。

模拟前端低功耗设计 像素级功耗优化 子阈值区偏置 · 动态范围 列级ADC与片上放大 逐次逼近 · 单斜 · 增益共享 偏置电流管理 PTAT · 动态偏置 · 关断 对数像素 事件驱动 动态复位 SAR ADC 单斜ADC 可编程增益 PTAT电流源 动态偏置 电源关断 目标:每像素功耗 < 1μW @ 30fps

4.1 像素级功耗优化:从源头省电

像素是整个链路的起点,也是功耗的源头。传统有源像素传感器(APS)里,每个像素都有一个源极跟随器做缓冲,这个缓冲器一直在耗电。我做过一个项目,像素阵列是1024x768,光源极跟随器的静态电流就占了整个芯片功耗的40%。

怎么优化?三个方向:

  • 子阈值区偏置:让像素内的晶体管工作在弱反型区。电流可以降到纳安级别。代价是速度变慢,但视觉仿生系统通常帧率不高(30fps左右),完全够用。
  • 动态范围与功耗的权衡:高动态范围像素往往需要多次采样或对数响应,功耗会翻倍。我建议根据应用场景选择——室内场景用线性像素,户外强光场景用对数像素。
  • 事件驱动读出:只有像素值变化超过阈值时才读出。这招在稀疏场景下特别省电,比如监控摄像头对着空走廊。

关键公式:像素功耗 ≈ VDD × Ibias × Npixel。降低Ibias是最直接的手段,但要注意噪声会随之增大。

实战技巧:我在设计一款事件驱动视觉传感器时,把像素的复位晶体管改成了动态偏置——平时几乎不耗电,只有事件发生时才开启。最终像素功耗从2.3μW降到了0.4μW。

4.2 列级ADC与片上放大:架构选择决定功耗

像素输出的是模拟电压,必须转成数字信号。传统做法是芯片级ADC,但那样需要高速高精度ADC,功耗爆炸。列级ADC把模数转换分散到每一列,速度要求降低,功耗也随之下降。

我个人比较推荐两种架构:

架构 功耗 面积 速度 适用场景
逐次逼近型(SAR) 低(每列~10μW) 中等 中等 中等分辨率、中等帧率
单斜ADC 极低(每列~2μW) 低帧率、高分辨率
流水线型 高(每列~50μW) 高速应用(不推荐视觉仿生)

嗯,这里要注意。单斜ADC虽然功耗极低,但转换时间与分辨率成指数关系。10位分辨率需要1024个时钟周期。如果帧率要求不高(比如10fps),单斜ADC是绝佳选择。

片上放大这块,我建议采用可编程增益放大器(PGA)。为什么?因为不同光照条件下,像素输出摆幅差异很大。弱光时增益需要40dB,强光时可能只需要0dB。固定增益放大器要么在弱光下噪声太大,要么在强光下饱和。

避坑指南:我曾经在一个项目中,为了省面积把PGA的增益级数减少,结果导致不同列之间的增益失配高达5%。图像上出现了明显的竖条纹。后来不得不增加校准电路,反而更费面积和功耗。所以,PGA的精度和级数不能省。

4.3 偏置电流管理:看不见的功耗黑洞

偏置电流是模拟电路里最容易被忽视的功耗来源。一个运算放大器可能只消耗几十微安,但整个芯片有成百上千个运放——列放大器、ADC比较器、参考缓冲器……加起来就是毫安级。

我的管理策略有三条:

  1. PTAT电流源:使用与绝对温度成正比的电流源。温度升高时,MOS管阈值电压下降,需要的偏置电流反而减少。PTAT电流源可以自动补偿,避免在高温下过度偏置。
  2. 动态偏置:电路不工作时,把偏置电流关断或降到1/10。比如列ADC在非转换期间,比较器的偏置电流可以完全关断。我做过一个设计,利用行空白时间关断偏置,整体功耗降低了30%。
  3. 电流复用:多个电路模块共享同一个偏置电流镜。比如所有列放大器的偏置可以从同一个主电流源复制,避免每个放大器都单独产生偏置。

设计实例:一个128列×128行的视觉传感器,每列有一个10位SAR ADC。如果每个ADC的比较器偏置电流为5μA,128列就是640μA。加上像素偏置、放大器和数字电路,总功耗约2.1mW。通过动态偏置和电流复用,可以降到0.8mW。

// 偏置电流管理伪代码示例
// 动态偏置控制状态机
always @(posedge clk) begin
  case(state)
    IDLE: begin
      bias_en = 0;          // 关断偏置
      adc_powerdown = 1;    // ADC下电
    end
    CONV_START: begin
      bias_en = 1;          // 开启偏置
      #100ns;               // 等待偏置稳定
      adc_powerdown = 0;    // ADC开始转换
    end
    CONV_DONE: begin
      bias_en = 0;          // 转换完成,关断偏置
      adc_powerdown = 1;
    end
  endcase
end

个人经验:偏置电流的启动时间是个坑。我曾经以为关断偏置能省电,结果每次开启时电流冲击很大,而且建立时间需要几微秒。后来我改用“弱偏置保持”模式——关断到1/10而不是完全关断,既省电又避免了启动冲击。

好了,模拟前端的低功耗设计,说白了就是三个字:抠细节。像素级抠纳安,列级抠微安,偏置抠毫安。每个环节省一点,整个系统就能降一个数量级。做视觉仿生系统,功耗就是生命线——电池容量就那么大,你省下来的每一毫安,都能让系统多运行几分钟。


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