想象你管理着一片山坡上的水田。山顶的泉水被分成几百条细流,沿着一层层梯田蜿蜒而下,最终汇入山脚的主水渠。你要根据主水渠的水位高度判断今年的收成——但问题来了:水位是连续的,一会儿涨一会儿跌,你的账本却只能记整数。于是你在水渠尽头立了一把水位标尺,把「多高」翻译成「第几格」。这把标尺,就是存内计算世界里的模数转换器(ADC)。SRAM/RRAM 存内计算阵列以电流汇聚的方式完成乘累加,输出的是一股「模拟水位」;ADC 就是那把把连续水位翻译成数字刻度的标尺。本文不讲 ADC 内部晶体管怎么搭,而是带你看懂:为什么 ADC 是存内计算芯片里面积和功耗最大的一笔开销,它如何决定芯片的整体能效,以及工程师在设计时如何权衡精度、速度和功耗——就像你最终要回答「标尺刻多细、多久读一次、花多少水费才划算」。

岗位关联

学懂 CIM 中 ADC 的设计权衡,你就握住了存内计算芯片能效的核心密码——这是从芯片架构师到 AI 推理部署工程师都绕不开的硬核素养。

目录
  1. 可视化演示
  2. ADC 角色定位
  3. 典型 ADC 架构
  4. ADC 精度需求
  5. 量化误差分析
  6. 采样速率设计
  7. 流水线架构
  8. 低功耗优化
  9. 能效与方案对比
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示ADC架构选型、量化误差传播与功耗优化,支持敏感度调节。

本节配有交互动效(进入视口后自动加载,约 3KB)。

ADC架构选型对比 红色Flash速度快但面积随位宽指数增长 蓝色SAR面积小但速度受限 Area_Flash ∝ 2^N - 1 Flash架构比较器数量随精度指数增长

ADC 角色定位

你是水田的主人,最关心的就是主水渠那个「水位读数」。在存内计算芯片里,SRAM/RRAM 阵列的每一行输入电压会驱动存储单元产生电流,同一列上几十上百个单元的电流在一条位线上自然叠加——这就是乘累加运算的物理实现。然而叠加的结果是一条连续的模拟电流/电压,就像不断变化的水位线,数字处理器根本读不懂它。ADC 站在阵列与数字电路之间,负责把这条位线上的「水位」翻译成一个二进制数字码,完成从模拟世界到数字世界的翻译。

这个翻译环节有多重要?在典型的 CIM 芯片中,ADC 的面积和功耗往往占据整个芯片的 30% 到 60%,是名副其实的「大户」。根源在于阵列是高度并行的——每一列输出都需要一个 ADC 通道,一个 256×256 的阵列可能同时对上百万个模拟量做转换。想象一下,如果每一条田垄出口都要立一把标尺,这把标尺的成本就决定了整个灌溉系统的造价。

因此,ADC 的角色不再是「一个外围电路」,而是 CIM 能效的天花板。它决定了阵列能以多快的速度、多高的精度把模拟计算结果送出,也决定了整颗芯片能效的上限。量化一个模拟电压的基本关系如下:

回到水田的场景:没有 ADC,你的账本永远只能写「水很多」这种模糊描述;有了 ADC,每一列计算都能精确记成「第 137 格刻度」。这把标尺的位置——紧贴着阵列、数量与列数一致、速度跟得上阵列出数——决定了整片水田的自动化程度。

D=⌊VinΔ⌋D = \left\lfloor \frac{V_{in}}{\Delta} \right\rfloor
这个公式说明:模拟输入的电压 V_in,除以最小刻度 Δ,向下取整,就得到数字码 D——就像看水位落在第几格刻度之间。
  1. 模拟输入电压V_in 是阵列位线上汇聚出的连续电压值,对应主水渠的实时水位高度。
    VinV_{in}
  2. 量化间隔Δ 是最小刻度对应的电压宽度,由 ADC 的位数决定,相当于标尺上两格之间的间距。
    Δ=VFS2N\Delta = \frac{V_{FS}}{2^N}
  3. 向下取整除法算出的商往往不是整数,向下取整表示「取水位落在的第几个刻度格里」,这也是量化误差的来源。
    ⌊⋅⌋\left\lfloor \cdot \right\rfloor

典型 ADC 架构

要测量主水渠的水位,工程师发明了三种典型的「标尺」:Flash、SAR 和流水线。它们各有各的读数哲学。

Flash ADC 是「大户人家」的做法:直接派 2^N 个测量员并排站在水渠边,每个人负责一个固定刻度,水位一到,所有测量员同时报数,瞬间完成转换。它速度最快,但代价是精度每增加一位,测量员数量翻倍——4 位需要 15 人,8 位需要 255 人。在 CIM 这种需要成百上千个 ADC 并排工作的场景,Flash 的面积代价高得让人心疼。

SAR ADC 则是「单人精读」:只派一个测量员,手持一根可伸缩的标尺,先假设水位在中间刻度,用二分法反复试探——「水位在上半段吗?在下半段吗?」每次试探缩小一半范围,N 位精度只需要 N 次试探。它面积小、功耗低,是当前 CIM 芯片中最主流的 ADC 架构。

流水线 ADC 像是组织的接力队:把一整条水渠分成若干段,每一段由一个小型子 ADC 快速读出粗刻度,余下的「残差水高」交给下一级继续精读。3 个人各读完一段,比 1 个人从头量到尾更高效。它吞吐率高,但单次延迟更长。三种架构的规模与速度特征可以通过比较器数量直观对比:

选哪种标尺,本质上是成本与效率的权衡。CIM 芯片通常追求「多快好省」:SAR 以最低的面积功耗完成足够的精度,因此最受青睐;速度要求极高的场景会让流水线上场,而 Flash 则少见地出现在超高速、低精度的特定位置。

Ncmp=2N−1N_{cmp} = 2^N - 1
Flash 架构需要的比较器数量随位数指数增长:4 位要 15 个,8 位要 255 个。这就是 Flash「快而贵」的根本原因。
  1. 位数 NADC 的数字输出位数,每增加一位,可区分的刻度数翻倍。
    NN
  2. 指数膨胀2^N 是可区分的刻度数量,Flash 需要为每个刻度准备一个比较器。
    2N2^N
  3. 减一修正最高刻度无需比较器,因为剩下那个值就是倒数第二个刻度以上,所以总数减 1。
    2N−12^N - 1

ADC 精度需求

标尺上的刻度刻多细,才配得上这片水田?这是 ADC 设计的第一问。ADC 位数直接决定刻度密度:4 位把满量程分成 16 格,8 位分成 256 格。听起来位数越多越好,但每多一位,面积约翻倍、功耗约翻倍、转换时间也要拉长——这就像把标尺刻得越细,标尺本身越贵越娇气。

更关键的是,CIM 阵列本身不是一台理想仪器。存储单元的工艺偏差导致电流有随机波动,位线上的寄生电容带来噪声,输入 DAC 的精度也有限——这些非理想因素叠加起来,给阵列的「真实水位」蒙上了一层雾。此时就算 ADC 有 12 位的精度,读出来的也只是一层被噪声污染的细刻度,多花的钱全打了水漂。因此工程师更关注有效位数 ENOB——排除了噪声和失真之后,ADC 实际能提供的可靠位数。

CIM 设计有一个经验法则:ADC 的有效位数与阵列计算的信噪比匹配即可。阵列本身信噪比只有 6 位,ADC 做到 6~7 位就是最优解;继续堆位数,精度收益会被阵列噪声淹没,功耗和面积却实打实地恶化。有效位数 ENOB 从实测信噪比反推:

刻度细到能看清雾里的水位就足够了。优秀的 CIM 设计师会把 ADC 位数调到与阵列固有噪声匹配的点上,把省下的面积和功耗预算留给更多计算单元——这才是「好钢用在刀刃上」。

ENOB=SNRactual−1.766.02ENOB = \frac{SNR_{actual} - 1.76}{6.02}
测量 ADC 实际输出的信噪比 SNR,代入公式反解出的位数才是「真实精度」,而不是芯片手册上印的标称位数。
  1. 实测信噪比SNR_actual 是 ADC 实际输出信号与噪声功率之比,单位 dB,噪声包括量化噪声、热噪声和失真。
    SNRactualSNR_{actual}
  2. 减去常数1.76 dB 是理想量化噪声的固定功率,先从总信噪比中扣除。
    SNRactual−1.76SNR_{actual} - 1.76
  3. 除以增益每增加一位有效位数,信噪比提升约 6.02 dB,所以反除得到真实的位数。
    SNRactual−1.766.02\frac{SNR_{actual} - 1.76}{6.02}

量化误差分析

无论标尺刻得多细,读数与真实水位之间永远有一道缝——这就是量化误差。它是 ADC 最本源的误差来源:一个连续变化的水位,硬要归入有限个离散刻度,注定要被「舍入」。好在这种误差是有界的:只要读数策略是四舍五入,误差最大不超过半个刻度宽度。

量化误差最迷人的地方在于它的统计规律。当输入信号在标尺上快速变化时,量化误差近似均匀分布在一个量化间隔内,表现得像一层叠加在信号上的噪声——即量化噪声。它的功率可以精确计算,并且与位数有简洁的关系:位数每增加 1,量化噪声功率降低到原来的四分之一,信噪比提升约 6 dB。这就是经典 SNR 公式的来历:

在一层层的神经网络中,量化误差还会像涟漪一样向前传递。第一层卷积输出的量化误差混入特征图,第二层再来一次量化,误差不断累计、放大,最终可能在深层网络中造成分类错误。这就像水位读数的一点点偏差,在梯田逐级灌溉中被放大成下游旱涝的差异。因此,量化误差分析是 CIM 芯片验证阶段必须反复推演的功课。

SNR=6.02N+1.76 dBSNR = 6.02N + 1.76 \text{ dB}
理想 N 位 ADC 的信噪比只由位数决定:4 位约 25.8 dB,8 位约 49.9 dB。每多一位,动态范围多 6 dB。
  1. 位数增益6.02N 表示每增加 1 位,信噪比线性提升约 6.02 dB,来源于量化噪声功率减半再减半。
    6.02N6.02N
  2. 固定偏置1.76 dB 来自信号满幅正弦波条件下量化噪声的统计平均功率,与位数无关,是一个常数。
    1.76 dB1.76 \text{ dB}
  3. 求和把两者的贡献相加,就得到了理想 ADC 的理论信噪比上限。
    6.02N+1.76 dB6.02N + 1.76 \text{ dB}

采样速率设计

标尺立好了、刻度也够细了,下一个问题是:你每隔多久读一次水位?这就是采样速率设计。在 CIM 芯片中,ADC 的转换时间直接决定了数据的出厂速度:每一次乘累加完成后,列线上的模拟结果必须在下一个计算周期开始前完成数字化,否则就会拖慢整个阵列的节奏。

这里的核心矛盾是「阵列太快,ADC 跟不上」。想象一个大型阵列一眨眼就完成了一次乘累加,而 ADC 还在慢悠悠地逐位逼近——ADC 就成了水渠的瓶颈。为了匹配阵列的吞吐,CIM 通常采用列并行结构:每列配一个 ADC 同时工作,用数量换速度。但 ADC 数量一多,面积功耗就上去了,鱼与熊掌不可兼得。

由此引出吞吐量的基本公式——转换时间越短,单位时间内能处理的模拟结果越多:

最后还要考虑数据率匹配:ADC 输出的数字码要喂给后级的数字累积器和激活函数模块,如果 ADC 出数太快而数字电路消费不过来,就会在接口处堆积「数据洪水」。所以采样速率设计是从阵列到 ADC 再到数字后端的一整条流水线的节奏协调,任何一个环节慢了,整个系统的吞吐就只能按最慢的算。

Throughput=NADCTconvThroughput = \frac{N_{ADC}}{T_{conv}}
整个芯片的数据吞吐量等于并行 ADC 的数量除以单次转换时间:要么让每个 ADC 更快,要么铺更多 ADC 并行,两者都会付出功耗或面积的代价。
  1. 并行 ADC 数量N_ADC 是同时工作的 ADC 通道数,CIM 中通常等于阵列的列数。
    NADCN_{ADC}
  2. 转换时间T_conv 是单个 ADC 完成一次量化所需的时间,包含采样、比较和输出三个阶段。
    TconvT_{conv}
  3. 求倒数单位时间内每个 ADC 能完成的转换次数是 1/T_conv,乘以总通道数即总吞吐。
    NADCTconv\frac{N_{ADC}}{T_{conv}}

流水线架构

当 SAR 的速度撑不起高吞吐场景,流水线 ADC 便登场了。它的思想像田径场上的接力赛:与其让一个人从起点跑到终点,不如分成几棒,每人只跑一段,整体却可以同时有多段在跑。具体到 ADC 上,每一级先对本级的模拟输入做一次低精度的粗量化,然后算出「我还没读准的残差」,把残差放大后交给下一级继续处理。

级间残差放大是流水线的灵魂。每一级测完一部分后,剩余的残差往往很小,必须放大到满量程再交给下一级,下一级才能分辨出细节。这个放大倍率与级数设计密切相关,通常每级取 1.5 位或 2.5 位,并留出冗余位用于校准级间失配。残差的计算可以抽象为:

流水线的代价是时钟对齐。各级必须精密同步:当三级流水线同时处理三个不同的样本时,任何一个时钟抖动都会让各级数据错位,产生难以修复的误差。此外,单次转换的延迟比 SAR 更长——第一棒跑完要等最后一棒冲线才能得到完整结果。但吞吐率反而更高,因为流水线一旦填满,每一拍都有一个样本输出。在需要持续高速处理图像的 CIM 加速器中,这种「慢启动、高吞吐」的接力模式极具吸引力。

Vres=2×Vin−VDACV_{res} = 2 \times V_{in} - V_{DAC}
本级输入 V_in 先翻倍,扣掉本级 DAC 产生的粗量化电压 V_DAC,剩下的 V_res 就是交给下一级继续精读的「残余水位」。
  1. 输入翻倍2 × V_in 把残差放大到满量程附近,让下一级能充分发挥自己的分辨率。
    2×Vin2 \times V_{in}
  2. 扣除已量化部分V_DAC 是本级粗量化结果对应的模拟电压,把它从翻倍后的信号中减去,剩下的才是未读出的残差。
    VDACV_{DAC}
  3. 残差输出V_res 即残差电压,传递给下一级作为新的输入,接力棒就此交接。
    Vres=2×Vin−VDACV_{res} = 2 \times V_{in} - V_{DAC}

低功耗优化

水费是灌溉系统的日常开支,ADC 的功耗则是 CIM 芯片的「水费账单」。在数以千计的 ADC 列通道面前,哪怕每个 ADC 省 0.1 微瓦,汇总起来都是可观的节约。低功耗优化因此成为 CIM 设计中的显学,主要有三板斧。

第一板斧是动态比较器。传统比较器是常开的「电灯」,无论有没有信号都在耗电;动态比较器只在时钟触发的那一瞬间上电比较,平时处于复位状态,相当于「人走灯灭」。在 SAR ADC 中,比较器是最活跃的电路,动态化之后静态功耗趋近于零,是省电效果最明显的一招。

第二板斧是非二进制搜索。标准 SAR 的每一次比较都严格折半搜索,但模拟域的死区——接近阈值附近时比较器分辨不出的区域——会让某些比较变得毫无信息量。非二进制搜索算法在冗余刻度上多做一次校验,用额外的比较换取容错性,反而可以减少因误判导致的重复转换。这就像量水位时如果刻度太密看不清,聪明的测量员会先大步量一边,再回头验证关键位置。

第三板斧是电源门控。阵列计算并不是每时每刻都在进行,空闲的 ADC 列通道完全可以在一个操作周期内断电休息,等到下一轮计算开始时再恢复供电。动态功耗与电源电压的平方成正比:

这三板斧组合使用,能把 ADC 的功耗压到令人惊讶的水平。动态比较器负责日常节能,非二进制算法负责减少无效动作,电源门控则让空闲通道彻底「断水断电」。对于电池供电的边缘 AI 芯片来说,这些优化直接决定了设备能用一周还是一天。

PADC=α⋅C⋅VDD2⋅fP_{ADC} = \alpha \cdot C \cdot V_{DD}^2 \cdot f
ADC 的动态功耗等于开关活动因子 α、负载电容 C、电源电压 V_DD 的平方和工作频率 f 四者的乘积——电压下降一半,功耗降到四分之一。
  1. 开关活动因子α 表示电路节点在一个时钟周期内平均翻转的次数,0 到 1 之间,与输入数据的统计特性有关。
    α\alpha
  2. 负载电容C 是 ADC 内部节点充放电的等效电容,由晶体管尺寸和布线决定。
    CC
  3. 电压平方项V_DD^2 说明电压对功耗影响最大,采用低电压供电是省电的最优先手段。
    VDD2V_{DD}^2
  4. 工作频率f 是时钟频率,频率越低单位时间充放电次数越少,功耗越低。
    ff

能效与方案对比

最后回到全局:这片水田到底值不值得装上这套测量系统?衡量 ADC 在 CIM 中是否划算,行业通用的指标是能效——用 TOPS/W 表示每瓦功耗能完成多少万亿次运算。ADC 的功耗和面积直接拉低这个数字,因此 ADC 选型本质上是在做一笔投资回报计算。

常见的对比维度有三个。第一是能效指标 TOPS/W:SAR 以最低功耗完成中等精度转换,通常能效最高;流水线吞吐大但功耗也大,适合追求极致算力的云端场景;Flash 能效最低,除非速度要求极端否则很少入选。第二是面积成本:ADC 阵列要占用芯片大量面积,面积越小越能塞下更多计算单元。第三是部署难度:SAR 设计简单、鲁棒性强,对工艺偏差不敏感,最容易落地;流水线要处理级间校准和时钟对齐,设计和验证成本更高。

工程上常用 Walden 品质因数来统一比较不同 ADC 方案的效率:

没有绝对的赢家,只有合适的方案。一位经验丰富的设计师会先问三个问题:阵列的信噪比是几位?目标吞吐是多少?功耗预算是多少?然后在这张「精度-速度-功耗」的三角图中描出一个点,选中最接近那个点的 ADC 架构。水田的主人也一样:不是标尺越精细越好,而是让你的测量系统与整片田地的实际水位波动相匹配,才是大智慧。

FoM=P2ENOB⋅fsFoM = \frac{P}{2^{ENOB} \cdot f_s}
FoM 用一个数字概括「每完成一次有效转换要花多少能量」:功耗 P 除以有效位数决定的等效转换次数,数值越小越优秀。
  1. 总功耗P 是 ADC 的整体功耗,包括静态和动态两部分。
    PP
  2. 有效转换次数2^{ENOB} 表示有效位数对应的可区分状态数,乘上采样频率 f_s 得到每秒完成的等效转换次数。
    2ENOB⋅fs2^{ENOB} \cdot f_s
  3. 比值功耗除以每秒转换次数,就是单次有效转换消耗的能量,FoM 越小效率越高。
    P2ENOB⋅fs\frac{P}{2^{ENOB} \cdot f_s}

AI 应用场景

边缘端语音唤醒芯片

阶段:模型部署与硬件加速

解决的问题:智能音箱、可穿戴设备上的语音唤醒模型需要在毫瓦级功耗下持续运行。传统方案用数字电路做矩阵运算,访存开销大、功耗高。存内计算把权重存在 SRAM 中直接完成乘累加,但模拟输出必须靠 ADC 转换后才能进入后级数字分类器。低功耗 SAR ADC 列并行方案完美契合「小面积、低功耗、中等精度」的需求。

具体案例:一颗用于关键词唤醒的 CIM 芯片采用 256 列 SAR ADC,每列 6 位精度,整体功耗控制在 1 mW 以内,在「你好,小度」这一级唤醒场景中实现了 99% 以上的唤醒准确率,电池续航比纯数字方案提升 3 倍。

云端高吞吐推理加速器

阶段:数据中心推理优化

解决的问题:云端大模型推理要求极高的吞吐量,CIM 加速器需要流水线 ADC 来保证矩阵乘的每一拍都能出数。流水线架构虽然单次转换延迟略高,但填充后的持续吞吐率远超 SAR,且能通过级间校准达到较高有效位数,匹配大模型的精度需求。

具体案例:某互联网公司的 RRAM 存内计算加速器采用 10 位流水线 ADC,每列转换速率达到 1 GS/s,配合 512×512 的阵列,实现单芯片 100 TOPS 的整数算力,在以 BERT 为代表的中等规模模型推理中比传统 GPU 方案能效提升 5 倍。

Python 演示

python38 行
"""模拟存内计算中 SAR ADC 的量化过程"""import math  def sar_adc(analog, bits=4, vref=1.0):    """SAR ADC 逐次逼近量化:模拟电压 -> 数字码"""    analog = max(0.0, min(vref, analog))    lo, hi = 0.0, vref    code = []    for _ in range(bits):        mid = (lo + hi) / 2.0        if analog >= mid:            code.append(1)            lo = mid        else:            code.append(0)            hi = mid    value = (lo + hi) / 2.0    return code, value, analog - value  def cim_mac_with_adc(weights, inputs, bits=4):    """模拟存内计算乘累加后经 ADC 量化的完整链路"""    mac = sum(w * x for w, x in zip(weights, inputs))    v_in = 1.0 / (1.0 + math.exp(-mac))    code, value, err = sar_adc(v_in, bits)    return v_in, value, err, code  if __name__ == "__main__":    weights = [0.8, -0.3, 0.5, 0.2]    inputs = [1.0, 0.5, -0.2, 0.7]    raw, quantized, err, code = cim_mac_with_adc(weights, inputs, bits=4)    print("模拟 MAC 结果(归一化): {:.4f}".format(raw))    print("ADC 量化输出: {:.4f}".format(quantized))    print("量化误差: {:.4f}".format(err))    print("4-bit 数字码: {}".format(code))    print("量化精度损失: {:.2f}%".format(abs(err) / raw * 100))
目的:用 Python 模拟 CIM 中最核心的「乘累加 → 模拟电压 → SAR ADC 量化」链路,直观展示量化误差如何产生。
  1. lo, hi = 0.0, vref初始化 SAR 搜索区间为整个电压范围,对应标尺的最高和最低刻度
  2. for _ in range(bits):每一位数字码对应一次二分试探,4 位就是 4 次比较
  3. mid = (lo + hi) / 2.0取当前区间中点作为本次试探的参考电压
  4. if analog >= mid:比较器判断:输入电压在中点之上置 1,否则置 0
  5. value = (lo + hi) / 2.0用最终区间中点作为量化代表值,即标尺读数
  6. v_in = 1.0 / (1.0 + math.exp(-mac))用 sigmoid 把 MAC 结果归一化到 0~1V 模拟电压范围,模拟列电流到电压的映射

常见误区

误区ADC 位数当然是越高越精准,12 位一定比 8 位好,设计时直接选最高位数不就完事了?

正解CIM 阵列本身有存储单元工艺偏差、位线噪声和 DAC 误差,整体信噪比通常只有 6~8 位。ADC 位数超出阵列噪声水平后,精度收益趋近于零,功耗和面积却按指数增长。就像给一辆轰鸣的拖拉机装赛车级精密仪表,仪表再准也被发动机噪音盖住。正确做法是让 ADC 的有效位数略高于阵列信噪比即可。

为何常见:芯片手册上动辄 12 位、16 位的标称参数给人「越高越好」的直觉,忽略了系统级噪声才是真正的精度天花板。

误区量化误差既然是「噪声」,那多做几次采样取平均不就能消掉吗?

正解量化误差是有界的、确定的舍入误差,它与输入信号强相关——同一个输入永远落在同一个刻度格里,平均多少次都不会变。只有当输入信号在刻度间快速变化时,量化误差的统计表现才接近均匀分布的白噪声。这就像标尺读数:你盯着同一格看十遍也还是同一格,而不是在真实值和刻度之间随机跳动。

为何常见:很多人套用热噪声「多次平均降噪」的经验,把量化误差误当成随机过程。

误区Flash 是最快的 ADC 架构,CIM 要追求高吞吐,每个列通道都放一个 Flash 不就行了?

正解Flash 的快是以比较器数量指数级膨胀为代价的。8 位 Flash 需要 255 个比较器,在 CIM 动辄几百列阵列的并行场景下,面积和功耗会爆炸。SAR 虽然单次转换慢一些,但面积小功耗低,可以在同样面积预算下铺更多并行通道,总量反而更高。CIM 追求的是「面积功耗约束下的总吞吐」,不是单通道的极限速度。

为何常见:孤立比较单个 ADC 的速度指标,忽略了 CIM 列并行结构下的面积换吞吐策略。

误区芯片手册上写了 10 位,那它输出的精度就是 10 位,直接用就行。

正解标称位数是理想条件下的分辨率,实际电路中比较器失调、时钟抖动、参考电压噪声都会侵蚀精度。ENOB 是根据实测 SNR 反推出的真实位数,往往比标称低 1~3 位。设计系统时若按标称位数做精度预算,最终部署时精度可能不达标。就像标尺上虽然印了 100 格刻度,但印刷模糊、刻度歪斜,实际能可靠读出的只有 70 格。

为何常见:芯片厂商的标称参数最容易查到,实测的 ENOB 需要搭建测试平台才能获得,很多工程师图省事直接用标称值。

误区把 ADC 的功耗和速度优化好,整个 CIM 芯片的能效自然就上去了。

正解CIM 是阵列、DAC、ADC、数字后端的整体系统。ADC 的输入信号质量、阵列的电流稳定性、数字接口的数据率匹配都会影响最终能效。有时降低 ADC 精度、把省下的预算用于增大阵列规模,反而能获得更高的整体能效。孤立的 ADC 优化就像只校准标尺却不管水渠本身的淤堵,读数是准了,水流却不畅。

为何常见:ADC 占芯片面积功耗比例最大,容易让人产生「抓住主要矛盾就万事大吉」的错觉。

面试题

Q1. 在存内计算芯片中,ADC 的核心作用是什么?

单选题 · easy

  • A.把数字权重转换为模拟电压
  • B.把模拟计算结果转换为数字码← 正确答案
  • C.把数字信号放大后存储起来
  • D.把存储单元的数据永久保存

答案:B。CIM 阵列以电流叠加方式完成乘累加,输出模拟电压/电流,ADC 负责把这个模拟结果量化为数字码,供后级数字电路处理。选项 A 是 DAC 的功能,C 和 D与 ADC 无关。这就像水渠尽头的水位标尺,把连续水位翻译成刻度读数。

Q2. 一个 N 位 ADC 可以区分的量化电平数是多少?

单选题 · easy

  • A.N 个电平
  • B.2N 个电平
  • C.2^N 个电平← 正确答案
  • D.N^2 个电平

答案:C。N 位二进制码共有 2^N 种组合,对应 2^N 个量化电平。例如 4 位 ADC 可将满量程分成 16 格,8 位分成 256 格。选项 C 正确,其他选项都低估了位数带来的电平数增长。这与标尺上刻度的总格数是一样的道理。

Q3. 关于 SAR ADC 的工作过程,下列说法正确的是?

单选题 · mid

  • A.所有位并行比较,一次完成转换
  • B.从最高位开始逐位二分逼近输入电压← 正确答案
  • C.不需要比较器,直接输出数字码
  • D.只能用于低频信号,速度最慢

答案:B。SAR ADC 的核心是逐次逼近:从最高位开始,每次用参考电压与输入比较,根据比较结果锁定当前位的值,再进入下一位,N 位共需 N 次比较。选项 A 描述的是 Flash ADC,C 和 D 均不成立。这就像一个测量员用二分法反复试探水位。

Q4. 满量程 1V 的 4 位 ADC,量化间隔 Δ 是多少?

单选题 · easy

  • A.1/16 V← 正确答案
  • B.1/8 V
  • C.1/4 V
  • D.1/2 V

答案:A。量化间隔等于满量程除以电平数:Δ = 1V / 2^4 = 1/16 V。4 位 ADC 将 0~1V 的范围分成 16 个均匀刻度,每个刻度宽 1/16 V。这是量化误差分析的基础,也是理解标尺刻度密度的起点。

Q5. 理想 8 位 ADC 的信噪比 SNR 约为多少?

单选题 · mid

  • A.约 25.8 dB
  • B.约 49.9 dB← 正确答案
  • C.约 100.2 dB
  • D.约 16.0 dB

答案:B。根据 SNR = 6.02N + 1.76 dB,代入 N=8 得:6.02×8 + 1.76 = 49.92 dB,约 49.9 dB。选项 A 是 4 位的结果,C 约等于 16 位的结果,D 没有对应关系。每增加一位,信噪比提升约 6 dB。

Q6. 流水线 ADC 相比 SAR ADC 的主要优势是什么?

单选题 · hard

  • A.单次转换的延迟更低
  • B.持续输出数据的吞吐率更高← 正确答案
  • C.有效位数一定更高
  • D.芯片面积一定更小

答案:B。流水线 ADC 把转换分成多级接力,虽然单次转换的延迟比 SAR 更长,但流水线一旦填满,每个时钟周期都能输出一个完整样本,持续吞吐率显著更高。选项 A 恰好说反,C 和 D 并不必然成立。这就像接力赛跑,第一棒到终点虽然慢,但整体节奏很快。

Q7. 在 CIM 中决定 ADC 精度选择的主要因素有哪些?

多选题 · hard

  • A.阵列计算固有的模拟噪声← 正确答案
  • B.存储单元的工艺偏差← 正确答案
  • C.功耗与面积的预算约束← 正确答案
  • D.操作系统中的线程调度

答案:ABC。CIM 的 ADC 精度应匹配系统的整体信噪比:阵列噪声和工艺偏差决定了精度的天花板,功耗面积预算决定了可持续的位数上限。选项 D 是纯软件层概念,与硬件 ADC 精度无关。精度的本质是「与系统噪声匹配」,而不是越高越好。

Q8. 以下哪些措施属于 CIM 中 ADC 的低功耗优化手段?

多选题 · mid

  • A.采用动态比较器减少静态功耗← 正确答案
  • B.使用非二进制搜索算法减少冗余比较← 正确答案
  • C.对空闲 ADC 通道实施电源门控← 正确答案
  • D.提高参考电压来增强信号幅度

答案:ABC。动态比较器只在时钟触发瞬间耗电,非二进制搜索通过冗余校验减少误判导致的重复转换,电源门控让空闲通道断电——这些都是 ADC 低功耗的经典手段。选项 D 提高参考电压反而会增加功耗,不是优化手段。

Q9. 关于量化误差,下列说法正确的有哪些?

多选题 · mid

  • A.量化误差的最大值不超过半个量化间隔← 正确答案
  • B.增大 ADC 位数可以减小量化误差← 正确答案
  • C.量化误差是满足白噪声特性的随机噪声
  • D.量化误差与输入信号的取值无关

答案:AB。四舍五入策略下量化误差有界,最大为 Δ/2,位数增大使 Δ 变小,误差随之减小。选项 C 错误:量化误差是确定性且与输入强相关的,仅在信号快速变化时才近似均匀分布;D 错误:不同输入电压的量化误差完全不同。它更像标尺读数的固定偏差,而不是随机抖动。

Q10. 3 位 SAR ADC,参考电压 1V,输入 0.72V,第二次比较使用的参考电压是多少?

单选题 · extreme

  • A.0.250 V
  • B.0.500 V
  • C.0.750 V← 正确答案
  • D.1.000 V

答案:C。SAR 第一次比较参考电压为中间值 0.500V,0.72V > 0.5V,因此锁定高位为 1,搜索区间变为 [0.5, 1.0]V。第二次比较取该区间中点,即 (0.5 + 1.0)/2 = 0.750V。这正是动画中逐位逼近的二分搜索过程,理解 SAR 的核心逻辑即可推出答案。