3. 模拟计算单元:基于电阻阵列的向量矩阵乘法、电流求和与模数转换
好,咱们进入正题。模拟计算单元,说白了就是存算一体架构里真正干“算力活”的那部分。数字电路算乘法,得靠乘法器、加法器一级一级拼起来。模拟计算呢?一根导线、一个电阻,电流流过,结果就出来了。速度快、功耗低,但代价是什么?精度和噪声。我做了这么多年,见过太多人一上来就追求高精度,结果功耗爆炸,得不偿失。
3.1 电阻阵列:最朴素的乘法器
先看最核心的结构——电阻阵列。为什么用电阻?因为欧姆定律。电压加在电阻两端,电流就等于电压除以电阻。如果你把输入电压当作一个数,电阻值当作另一个数,那电流就是乘积。一个电阻就是一个乘法器,简单粗暴。
实际电路里,我们通常用交叉开关阵列。横线是输入字线,竖线是输出位线,交叉点放一个电阻。输入电压加在字线上,电流通过电阻流到位线。每条位线上汇集了所有交叉点的电流,自然就完成了“乘加”操作。
核心公式:
Ij = Σ (Vi / Rij)
其中 Vi 是第 i 条字线的输入电压,Rij 是交叉点电阻,Ij 是第 j 条位线的输出电流。
嗯,这里要注意:电阻值不能随便选。太小了,电流太大,功耗扛不住;太大了,电流太小,容易被噪声淹没。我个人习惯把电阻范围控制在 10kΩ 到 1MΩ 之间,具体看工艺和精度要求。
3.2 电流求和:模拟加法器的艺术
电流求和听起来简单,就是把几路电流接到一起。但实际做起来,坑不少。
首先,基尔霍夫电流定律告诉我们,节点电流之和为零。但模拟电路里,节点电压会漂。你想想看,如果位线上挂了几百个电阻,每个电阻都贡献一点电流,位线电压稍微变一点,所有电流都会跟着变。这就是IR Drop问题。
我在项目中遇到过这种情况:仿真时精度很好,一上芯片,输出电流偏差了 5%。查了三天,发现是位线金属线太细,电阻太大,导致远端和近端的电压差了 0.1V。后来加宽了金属线,问题解决。
避坑指南:
我曾经在 28nm 工艺上做过一个 256×256 的阵列。位线长度超过 500μm,金属电阻导致远端电流误差超过 8%。后来我用了两层金属并联走线,并且每隔 64 列加一个中继放大器,才把误差压到 1% 以内。
电流求和的另一个关键点是求和节点。通常我们会用运放构成虚地结构,把位线电压钳位在固定电位。这样不管电流多大,位线电压都不变,IR Drop 的影响就小多了。
3.3 模数转换:从模拟回到数字
电流求和完了,得到的是模拟电流。但最终我们要的是数字结果,所以必须做模数转换。这一步往往是整个系统的瓶颈。
为什么?因为 ADC 的精度、速度、功耗三者互相制约。你想想看,一个 8 位的 SAR ADC,功耗可能只有几毫瓦,但速度上不去。一个 12 位的流水线 ADC,速度能到几百兆,但功耗几十毫瓦。在存算一体芯片里,ADC 的功耗占比经常超过 30%,甚至 50%。
常用的 ADC 架构有几种:
| 架构 | 精度 | 速度 | 功耗 | 适用场景 |
|---|---|---|---|---|
| SAR | 8-12 bit | 中速 | 低 | 小规模阵列 |
| 流水线 | 10-14 bit | 高速 | 高 | 大规模阵列 |
| Σ-Δ | 16-24 bit | 低速 | 中 | 高精度需求 |
| Flash | 4-6 bit | 超高速 | 极高 | 低精度推理 |
我个人比较喜欢 SAR ADC,因为它结构简单、功耗低。但要注意,SAR ADC 需要比较器,比较器的噪声和失调会直接影响精度。我曾经在一个项目里用了自校准技术,每 1000 次转换做一次失调校准,效果不错。
3.4 整体架构:从电阻到数字的完整链路
把上面三部分串起来,就是完整的模拟计算单元:
- 输入驱动:数字输入通过 DAC 或直接电压驱动,加到字线上
- 电阻阵列:完成向量矩阵乘法,输出电流到位线
- 电流求和:位线汇集电流,通过虚地结构稳定电压
- 模数转换:将模拟电流(或电压)转换为数字输出
这里有个关键点:ADC 的位数决定了最终的计算精度。电阻阵列本身的精度可能很高,但 ADC 一量化,信息就丢了。我建议 ADC 的位数至少比目标精度高 2 位,用来补偿噪声和量化误差。
重要提醒:
不要为了省功耗把 ADC 位数压得太低。我见过有人用 4 位 ADC 做推理,结果准确率从 95% 掉到 70%。省下来的功耗,全被精度损失吃掉了,得不偿失。
3.5 核心结构图
下面这张图展示了模拟计算单元的完整数据流。从输入电压开始,经过电阻阵列完成乘法,电流求和后送入 ADC,最终输出数字结果。
3.6 实际设计中的取舍
讲完了原理,说说实际设计中的取舍。你不可能同时做到高精度、低功耗、高速度。必须根据应用场景做选择。
- 边缘推理芯片:精度要求不高(6-8 bit),但功耗要极低。用 Flash ADC 或低精度 SAR,电阻阵列用高阻值,电流小,功耗低。
- 云端加速卡:精度要求高(10-12 bit),速度也要快。用流水线 ADC,电阻阵列用低阻值,电流大,速度快,但功耗也大。
- 传感器融合:精度中等(8-10 bit),但需要多通道并行。每列配一个 SAR ADC,面积大但吞吐量高。
我记得有一次做医疗影像的加速芯片,客户要求 12 位精度,但功耗不能超过 100mW。试了好几种方案,最后用了 Σ-Δ ADC,虽然速度慢了点,但精度和功耗都达标了。所以说,没有最好的架构,只有最合适的。
总结一下:
电阻阵列做乘法,电流求和做加法,ADC 做量化。这三步构成了模拟计算单元的核心。每一步都有坑,但每一步也都有优化空间。关键是理解物理本质,别被仿真结果骗了。
想要更多资料,联系可可