4. 读出电路架构概述:像素级、列级、全局读出与数字/模拟SPAD对比

各位同学,今天我们聊聊读出电路的整体架构。说实话,这部分内容在SPAD阵列设计中非常关键,它直接决定了你的芯片面积、功耗、速度,甚至最终能做成什么级别的产品。我在几个项目中踩过不少坑,今天把这些经验分享给你们。

4.1 读出架构的三种基本类型

SPAD阵列的读出架构,说白了就是怎么把每个像素里那个雪崩信号给“捞”出来。根据信号处理的位置不同,主要分三种:像素级读出列级读出全局读出

核心区别:处理电路放在哪?像素内、列上、还是阵列外?

4.1.1 像素级读出

每个像素里不仅有SPAD,还集成了完整的淬灭、整形、甚至计数或TDC电路。这种架构的优点是速度极快,每个像素独立工作,互不干扰。我记得在做一个高时间分辨率的激光雷达项目时,就用了像素级TDC,每个像素都能达到几十皮秒的精度。

但代价也很明显——面积大、填充因子低。你想想看,一个像素里塞那么多晶体管,感光区域自然就被挤占了。我曾经做过一个128×128的阵列,像素级读出后,填充因子只有不到5%,光利用率极低。

  • 优点:速度快、并行度高、时间分辨率好
  • 缺点:像素面积大、填充因子低、功耗高
  • 适用场景:小阵列、高时间精度应用(如荧光寿命成像)

4.1.2 列级读出

这种架构把读出电路放在列上,每个像素只做简单的缓冲或整形,然后通过列总线共享处理单元。嗯,这里要注意,列级读出是面积和性能的折中方案,也是目前工业界最常用的架构。

我在一个64×64的SPAD阵列项目中就采用了列级读出。每个像素只放一个简单的淬灭电路和缓冲器,列上放一个共享的TDC。这样填充因子能做到15%左右,时间分辨率也能保持在100ps以内。说白了,就是“鱼和熊掌”都想要一点。

我的经验:列级读出设计时,一定要考虑列间的匹配问题。我曾经因为列放大器失配,导致整列像素的阈值电压偏差很大,最后不得不加了一路DAC做列级校准。

  • 优点:面积适中、填充因子较高、功耗可控
  • 缺点:列间串扰、读出速度受限于列总线
  • 适用场景:中等规模阵列、通用型SPAD传感器

4.1.3 全局读出

全局读出架构最简单——所有像素的雪崩信号通过一根或几根全局总线传输,在芯片外部或边缘统一处理。这种架构的填充因子最高,因为像素里几乎不放任何电路。

但问题也很突出:速度慢、容易冲突。你想想看,如果几百个像素同时发生雪崩,全局总线怎么区分是哪个像素触发的?所以全局读出通常只用于光子计数模式,或者配合事件驱动读出。

我记得早期做的一个256×1的线阵SPAD,就用了全局读出。每个像素只输出一个脉冲,通过时间门控来区分不同像素。虽然简单,但动态范围受限,后来还是改成了列级读出。

  • 优点:填充因子极高、设计简单、面积小
  • 缺点:无法区分像素位置、速度慢、易冲突
  • 适用场景:大阵列、低帧率、光子计数模式

4.2 数字SPAD与模拟SPAD读出架构对比

这个对比很有意思。数字SPAD和模拟SPAD,其实不是SPAD本身不同,而是读出信号的处理方式不同

4.2.1 数字SPAD读出架构

数字SPAD,说白了就是每个像素输出一个数字脉冲(0或1),然后通过数字电路进行计数、时间测量或直方图统计。这种架构的优点是抗噪声能力强、易于集成数字处理

我在一个3D堆叠的项目中,就用了数字SPAD读出。底层是SPAD阵列,顶层是数字处理电路,通过微凸点互联。每个像素输出一个数字信号,直接在顶层做TDC和直方图。效果很好,但功耗也不小——数字电路翻转时,动态功耗很可观。

数字SPAD的关键:每个像素需要至少一个比较器或施密特触发器,将雪崩电流整形为数字脉冲。

4.2.2 模拟SPAD读出架构

模拟SPAD则不同,它输出的是模拟信号——比如雪崩电流的大小、持续时间,或者通过模拟积分器累积的光子数。这种架构的优点是动态范围大、功耗低,但抗噪声能力相对弱一些。

我曾经做过一个模拟SPAD读出方案,每个像素用一个电容积分,然后通过列级ADC读出。这样填充因子能做到20%以上,而且动态范围比数字方案大一个数量级。但问题也很明显——模拟信号容易受工艺偏差影响,每个像素的积分电容、漏电流都不一样,需要做校准。

注意:模拟SPAD读出对温度非常敏感。我在一个项目中没做好温度补偿,结果芯片从25°C升到85°C时,读出信号漂移了30%以上。后来不得不加了片上温度传感器和校准算法。

4.3 架构对比总结

为了让大家看得更清楚,我整理了一个对比表格:

特性 像素级读出 列级读出 全局读出
填充因子 低(<5%) 中(10-20%) 高(>30%)
时间分辨率 高(<50ps) 中(50-200ps) 低(>1ns)
像素面积
功耗
设计复杂度
适用阵列规模 小(<32×32) 中(64×64~256×256) 大(>512×512)

至于数字SPAD和模拟SPAD的对比,我个人的看法是:没有绝对的好坏,只有合不合适。数字SPAD适合需要高时间精度、数字处理能力强的场景;模拟SPAD适合需要大动态范围、低功耗的场景。

4.4 架构选择的经验法则

说了这么多,到底怎么选?我给大家几个实用的建议:

  1. 先看阵列规模:32×32以下,可以考虑像素级读出;64×64到256×256,列级读出最稳妥;512×512以上,全局读出或事件驱动读出更现实。
  2. 再看时间精度需求:需要亚纳秒级精度?像素级或列级TDC是必须的。只做光子计数?全局读出就够了。
  3. 别忘了功耗预算:数字SPAD的功耗主要来自数字电路翻转,模拟SPAD的功耗主要来自偏置和ADC。我建议在项目初期就做功耗估算,别等到流片了才发现散热搞不定。
  4. 工艺兼容性:有些工艺对模拟电路不友好,比如纯数字CMOS工艺。这种情况下,数字SPAD方案更合适。

一个小技巧:如果你不确定选哪种架构,可以先做一个小的测试芯片(比如8×8阵列),把几种架构都放上去。我每次做新项目都会这么干,花不了多少钱,但能避免很多坑。

4.5 本章小结

好了,这一章的内容就到这里。我们讲了三种读出架构——像素级、列级、全局读出,也对比了数字SPAD和模拟SPAD的差异。说白了,架构选择就是面积、速度、功耗、填充因子之间的权衡。没有完美的架构,只有最适合你应用需求的方案。

下一章我们会深入像素级读出电路的设计细节,包括淬灭电路、整形电路和像素内TDC的实现。到时候我会拿一个实际项目中的电路图来讲解,大家敬请期待。

SPAD阵列读出电路架构分类 SPAD像素阵列 像素级 列级 全局 像素内集成 淬灭+整形+TDC 每个像素独立处理 填充因子低 列共享处理 像素内仅缓冲 列上共享TDC/ADC 折中方案 全局总线 像素内无电路 外部统一处理 填充因子高 数字/模拟信号 高速并行输出 数字/模拟信号 列级串行输出 数字脉冲 全局总线输出 数字SPAD vs 模拟SPAD 数字SPAD:抗噪声强、易集成、功耗高 模拟SPAD:动态范围大、功耗低、需校准

专注资料整理