4. 数字存算一体原理:基于SRAM的数字近存计算

各位同学,今天我们来聊聊数字存算一体里最接地气的一个分支——基于SRAM的近存计算。说实话,我刚入行那会儿,大家还在拼命把存储和计算分开优化,觉得“存算分离”是天经地义的事。直到后来做AI加速器项目,被数据搬运的功耗折磨得够呛,才真正意识到:把计算搬到存储边上,甚至揉进存储里,才是解决“存储墙”问题的关键。

我个人习惯把数字近存计算分成两类:一类是“离得近”,一类是“融进去”。前者就是SRAM紧挨着计算单元,后者则是直接在SRAM位线上做计算。今天我们先讲前者,也就是数字近存计算的核心——乘累加器设计。

4.1 为什么是SRAM?

你想想看,芯片里最常用的片上存储是什么?没错,就是SRAM。它的速度快、工艺成熟、密度也还行。更重要的是,SRAM的读写接口是数字的,天然适合跟数字计算单元对接。

我在项目中遇到过一个问题:用DRAM做近存计算,刷新周期和延迟让人头疼。换成SRAM之后,延迟直接降了一个数量级。所以现在主流数字近存方案,基本都围着SRAM转。

核心观点:SRAM近存计算不是把SRAM和计算单元简单拼在一起,而是让计算单元“寄生”在SRAM的读写通路上,减少数据搬运的距离和次数。

4.2 数字乘累加器(MAC)的基础结构

乘累加器,说白了就是做 y = Σ(a_i × w_i) 这个运算。在数字域里,乘法器加加法器,再配上累加寄存器,就构成了最基本的MAC单元。

但这里有个坑:位宽。我刚开始设计时,天真地以为8位乘8位累加,用16位加法器就够了。结果一跑仿真,溢出得乱七八糟。后来才明白,累加器的位宽必须考虑累加次数。比如累加256次,就要多8位。

输入位宽 累加次数 累加器位宽
8-bit 64 8+8+6=22-bit
8-bit 256 8+8+8=24-bit
4-bit 1024 4+4+10=18-bit

避坑指南:我曾经在一个项目里,因为累加器位宽少算了2位,导致最终结果在边界条件下出错。那两天排查得我头都大了。所以设计MAC时,请务必把累加次数考虑进去,宁可多留几位,也别省。

4.3 位串行架构:用时间换面积

位串行架构,说白了就是一次只处理1位数据。比如8位的乘法,串行做8次。听起来很慢对吧?但它的好处是硬件资源极省。

我做过一个对比:同样是做32个8×8的MAC,并行架构需要32个乘法器+32个加法器,面积大概占0.5mm²(28nm工艺)。而位串行架构只需要1个1位乘法器+1个累加器,面积不到0.05mm²。

位串行的基本流程是这样的:

  1. 把输入数据和权重按位拆开
  2. 从最低位开始,逐位相乘
  3. 每次乘法结果移位后累加
  4. 重复直到所有位处理完
// 位串行MAC的伪代码示例
for (bit = 0; bit < N; bit++) {
    partial = (a >> bit) & 1;  // 取输入的第bit位
    result += partial * w << bit;  // 乘权重并移位累加
}

个人经验:位串行架构特别适合那些对延迟不敏感、但对面积和功耗有严格要求的场景。比如可穿戴设备里的关键词检测,每秒只要处理几十次,用位串行完全够用,还能省下面积放电池。

4.4 位并行架构:用面积换速度

位并行就简单粗暴了——所有位同时处理。8位乘法,一次搞定。速度是位串行的8倍,但面积也是8倍以上。

你想想看,如果做卷积神经网络推理,一次要算几百上千个MAC,位并行架构可以在一个时钟周期内完成所有计算。而位串行可能要几百个周期。

但位并行也有它的烦恼:

  • 布线拥堵:所有数据同时进出,SRAM的读写带宽要足够大
  • 功耗峰值高:所有MAC同时翻转,瞬间电流可能很大
  • 面积开销大:每个MAC都要完整的乘法器和加法器

我记得有一次做边缘AI芯片,客户要求延迟低于1ms。用位串行算了一下,需要800个周期,时钟200MHz,延迟4ms,超标了。换成位并行,8个周期搞定,延迟40μs,完美达标。当然,代价是芯片面积大了30%。

4.5 位串行 vs 位并行:如何选择?

这个问题没有标准答案。我个人的经验是看三个指标:

指标 位串行 位并行
面积 小(省) 大(费)
速度 慢(N个周期) 快(1个周期)
功耗 低且平稳 高且有峰值
适用场景 IoT、可穿戴 云端、自动驾驶

说白了,这就是一个经典的“面积-速度-功耗”三角权衡。没有绝对的好坏,只有合不合适的方案。

4.6 混合架构:取长补短

在实际工程中,我很少看到纯位串行或纯位并行的设计。大多数方案都是混合的——比如4位并行、2位串行,这样总延迟是2个周期,面积介于两者之间。

举个例子:

  • 8位乘法,拆成2组4位并行计算
  • 每组内4位同时乘,组间串行累加
  • 这样只需要2个周期,面积是纯并行的1/4

这种混合架构,我个人觉得是工程实践中最实用的方案。它给了设计师一个连续可调的“旋钮”,可以根据需求在面积和速度之间做精细权衡。

核心总结:数字近存计算的核心是MAC设计。位串行省面积但慢,位并行快但费面积。实际工程中多用混合架构,在两者之间找到最佳平衡点。记住,没有完美的架构,只有最适合你项目的架构。

数字存算一体原理:基于SRAM的近存计算 数字近存计算 为什么选择SRAM?速度快、工艺成熟、数字接口 数字乘累加器(MAC)基础结构 位串行架构 用时间换面积 位并行架构 用面积换速度 混合架构:取长补短 4位并行 + 2位串行 = 面积与速度的平衡 核心权衡:面积 ↔ 速度 ↔ 功耗,没有最优只有最合适

最后说一句:数字近存计算这块,理论其实不难,难的是在工程中做权衡。我见过太多团队,要么一味追求速度把芯片做得巨大,要么死抠面积导致性能不达标。记住,好的设计是“刚刚好”的设计。

专注资料整理