模拟存内计算的电路级设计挑战

原理很优美,工程很骨感。ADC 吃掉一半功耗、器件变异悄悄毁掉精度、潜行电流在暗处流动……聊聊模拟 CIM 设计师真正要面对的那些"坑",以及学界和工业界的应对之策。

一、从"能算"到"算得准"

在入门篇里我们看到:交叉阵列用欧姆定律和基尔霍夫定律完成矩阵-向量乘法,优雅得像一首物理诗。但诗和田野之间隔着一整个工程世界。模拟计算的每一步都在和不精确打交道:器件的电导不是理想值,导线上有寄生电阻,累加电流里有各种噪声,而最后所有的模拟量都必须变成数字量才能被数字系统使用。

这篇文章把模拟 CIM 宏单元设计中的主要挑战梳理成一张"问题清单",并附上常见的工程对策。

二、第一座大山:ADC 开销

阵列输出的本质是模拟累加电流,要送进数字域,必须经过模数转换器(ADC)。问题在于:

  • 精度与能耗的矛盾:神经网络推理通常需要累加结果达到 6~10 bit 的有效精度。传统逐次逼近(SAR)或流水线 ADC 的功耗随精度指数级增长,一个阵列成百上千列,每列配一个高精度 ADC,功耗和面积都会爆炸;
  • 面积占比:多篇 CIM macro 的实测数据显示,ADC 常占宏单元总功耗的 30%~50%、总面积的 20%~40%,"存内计算省下的能量,一半又还给了 ADC"。

围绕这个矛盾,业界演化出几类经典策略:

2.1 逐位激活(Bit-Serial / Bit-Parallel 激活)

把输入激活值按位拆分成多个周期施加:第 k 个周期只施加第 k 位为 1 的那些行。每一位的输出都是"整数量级的电流和",只需要一个极低精度的 ADC(甚至 1-bit 比较器),最后在数字域移位相加还原。代价是周期数增加、速度换功耗。

2.2 分段 ADC(Segmented ADC)

根据累加电流的动态范围分配不同位数的 ADC:小信号段用低精度 ADC,大信号段启用高精度 ADC。相当于把"钱花在刀刃上"。

2.3 时域 / 混合信号 ADC

用 PWM、VCO 型或斜坡型 ADC 把幅度信息转换为时间/频率信息,在小面积下换取可用的精度,也是当前 macro 设计的热门方向。

三、第二座大山:器件非理想性

模拟计算的精度上限由存储介质的"保真度"决定。以阻变/MRAM 器件为例:

非理想因素物理来源对计算的影响
D2D 变异(器件间)工艺波动导致同批次器件电导不一致权重映射失真,网络精度系统性下降
C2D/C2C 变异(周期间)重复编程同一器件,阻值不完全一致推理结果不可复现,抖动增加
I-V 非线性1S1R 选通管/MTJ 的整流特性乘加结果偏离理想 G·V,出现谐波失真
潜行电流(Sneak Path)半选/未选单元的漏电路径求和串入"幽灵电流",大阵列尤甚
IR Drop字线/位线金属电阻远端单元实际激励电压被拉低,行列间结果不均
热噪声 / 1/f 噪声器件与读出电路固有噪声小信号时信噪比恶化

3.1 电路层的对策

  • 差分权重映射:用两个器件表示正负权重(G⁺/G⁻),共模变异被差分结构天然抑制,是 MRAM/ReRAM CIM 的标配技巧;
  • 冗余行 / 列与校准:预留备用行列替换坏单元,流片后做一次出厂校准( trimming / lookup table 补偿);
  • 分段阵列:把大阵列切成小块,限制 IR drop 与潜行电流的影响半径;
  • 输入编码优化:调整脉冲宽度/幅度调制方式,避开器件的非线性区。

3.2 算法层的对策(越来越重要)

  • 器件感知训练(Device-aware / Noise-aware Training):把实测的器件变异与噪声模型注入训练过程,让网络学会"容忍"硬件的不完美——等效于免费的精度回补;
  • 量化感知训练(QAT):直接按硬件位宽训练,避免"训练高精度、部署低精度"的断崖;
  • 冗余权重 / 容错编码:对关键层用更高冗余表示,牺牲容量换可靠。

我的体会是:模拟 CIM 的精度问题,从来不是电路单方面能解决的。算法-电路-器件三方各让一步,才能在给定功耗预算下逼近可用的推理精度。这也是"协同设计"这个词在 CIM 领域出现频率如此之高的原因。

四、第三座大山:阵列规模与互连

阵列做大,收益是算力密度,代价是寄生效应:字线/位线的电阻让激励电压沿线衰减,行列交叉点的电容让信号建立变慢。工程上的取舍通常是:

  • 分层组织:macro 内部分块(tile/block),块间用中继器或缓冲;
  • H-Tree 供电网络:保证阵列各处激励电压的一致性;
  • 仿真分层:整阵列级用行为级模型(含寄生提取),关键路径回到晶体管级验证——这也是我日常最多的时间开销所在。

五、一张对策速查表

挑战电路侧架构 / 算法侧
ADC 开销bit-serial、分段 ADC、时域 ADC网络剪枝 / 降位,减少求和动态范围
器件变异差分权重、冗余校准噪声感知训练、QAT
潜行电流1S1R 选通、多级译码权重稀疏化(稀疏天然减少半选路径)
IR Drop分段阵列、H-Tree 供电层到阵列的均衡映射
读出噪声低噪声 SA / ADC、相关双采样集成多次读出求均值

六、写在最后

模拟 CIM 的设计哲学,和数字电路世界"非 0 即 1"的确定性思维很不一样:它要求设计师与物理世界的不完美共舞。一个宏单元流片回来,可能面临"功能正确但精度差 3%"的尴尬——这时候拼的不是灵光一闪的巧思,而是对器件、电路、算法三者耦合关系的系统理解。

这很难,但也很迷人。下一篇我们把视角拉到系统层,看看端侧 AI 为什么需要一个"自旋存算一体加速器"。


参考文献与延伸阅读

  1. N. Verma et al., "In-memory computing: Advances and prospects," IEEE Solid-State Circuits Magazine, 2019.(含 ADC 开销的系统分析)
  2. M. Si et al., "A 58.6 TOPS/W ReRAM-based CIM macro with bit-serial activation," ISSCC, 2022.(bit-serial 代表作之一)
  3. W. Wan et al., "A compute-in-memory chip based on RRAM with 33.5 TOPS/W," ISSCC, 2022.
  4. B. Yan et al., "Rescuing memory-based neural network accelerators from device variations," IEEE TCAD, 2021.(器件感知训练经典)
  5. 李瑞 et al., 存算一体芯片技术研究进展(中文综述,可按你精读的文献替换补充)

注:文中占比数据为公开文献中的典型统计,具体设计差异较大。