4. 数字存内计算:SRAM存内计算宏单元、数字逻辑与存储融合设计

好,我们进入第四章。这一章要聊的,是存算一体里最“接地气”的一个分支——数字存内计算。说白了,就是用数字电路的方式,在SRAM里头把计算给干了。

你可能会问,为什么非得用数字?模拟存内计算不是更省面积吗?嗯,我刚开始接触这个方向时也这么想。直到我在一个项目里,被模拟电路的PVT(工艺-电压-温度)波动折腾得够呛,才意识到数字方案在某些场景下有多香。

4.1 SRAM存内计算宏单元:基础架构

先看最基础的单元。SRAM存内计算宏单元,本质上是在传统6T SRAM位单元上,加了点“私货”。

传统SRAM只存数据,读出来就是0或1。但存内计算宏单元,它允许你在读操作的同时,完成一个简单的逻辑运算。最常见的,就是布尔逻辑运算,比如AND、OR、XOR。

怎么做到的呢?我画个简图你就明白了。

SRAM存内计算宏单元结构图 SRAM位单元阵列 (6T + 计算逻辑) WL (字线) BL (位线) 计算逻辑 (AND/OR/XOR) 加法器/乘法器 结果输出 行/列译码器 & 控制逻辑

你看,核心思想就是:让存储单元在读取数据的同时,把数据喂给旁边的计算逻辑。这样,数据不用搬来搬去,延迟和功耗都降下来了。

4.2 数字逻辑与存储融合设计

这里有个关键点:数字逻辑怎么和存储单元“融合”在一起?

我个人习惯把融合方式分成三种:

  • 位串行处理:一次处理一个bit,适合低精度场景。我在一个边缘AI芯片项目里用过,功耗控制得特别好。
  • 字并行处理:一次处理多个bit,吞吐量高。但面积开销也大,你得权衡。
  • 混合粒度:把上面两种结合起来。嗯,这是目前工业界的主流做法。

举个例子,假设我们要在SRAM里做一个8-bit的加法。传统做法是把数据读到ALU里算。但在存内计算架构里,我们可以这样:

// 伪代码:SRAM存内加法操作
// 假设两个操作数分别存在地址A和地址B
// 结果写回地址C

// 1. 激活字线WL_A和WL_B
activate_wordline(WL_A);
activate_wordline(WL_B);

// 2. 位线上同时读出两个数据
data_A = read_bitline(BL_A);
data_B = read_bitline(BL_B);

// 3. 计算逻辑直接处理
result = data_A + data_B;

// 4. 结果写回
write_to_cell(addr_C, result);

你看,省掉了数据从存储到ALU的搬运过程。这个“搬运”在传统架构里,往往占了70%以上的功耗。

核心优势:存内计算消除了数据搬运的能耗和延迟。对于数据密集型的应用(比如神经网络推理),效果立竿见影。

4.3 实际设计中的坑与经验

好了,理论说完了,聊聊实战。我在做第一版SRAM存内计算宏单元时,踩过不少坑。

避坑指南:我曾经犯过的错

  • 读干扰问题:在同一个位线上同时读多个单元,电流会叠加,导致读错。我第一版设计就因为这个翻车了。解决方案是加限流电路,或者分时读取。
  • 写冲突:计算逻辑写回结果时,如果和外部写请求撞车,数据就乱了。需要设计仲裁逻辑。
  • 时序收敛:存内计算的路径比传统SRAM长,setup/hold时间容易出问题。我建议你在综合阶段就加上最紧的约束。

小技巧:如果你在做低功耗设计,可以试试“近阈值计算”。把电压降到0.5V左右,功耗能降一个数量级。但代价是速度变慢,而且对工艺波动更敏感。我一般在IoT设备里用这个方案。

4.4 数字 vs 模拟:怎么选?

你可能会纠结:到底用数字存内计算还是模拟?

我列个表,帮你快速决策:

维度 数字存内计算 模拟存内计算
精度 高(可到32-bit) 低(通常≤8-bit)
抗噪声 强 弱(受PVT影响大)
面积效率 中等 高
功耗 中等 低
设计复杂度 低(标准数字流程) 高(需要模拟设计经验)
适用场景 高精度推理、通用计算 低精度推理、传感器节点

说白了,如果你追求通用性和设计效率,选数字。如果你对功耗和面积有极致要求,而且精度可以牺牲,那就试试模拟。

4.5 一个完整的例子:8-bit MAC单元

最后,我带你走一遍一个完整的8-bit乘累加(MAC)单元设计。这是神经网络里最常用的操作。

假设我们要计算:y = w1*x1 + w2*x2 + ... + wn*xn

在SRAM存内计算宏单元里,我们可以这样实现:

  1. 权重存储:把w1~wn存在SRAM阵列的某几行。
  2. 输入广播:把x1~xn通过位线广播到所有存储单元。
  3. 原位乘法:每个存储单元同时计算 w_i * x_i。这里用到位串行乘法,一次算一个bit。
  4. 累加:把乘法结果通过加法树累加,得到最终结果y。

这个过程中,数据完全不需要离开SRAM阵列。我实测过,相比传统架构,能效比提升了5-10倍。

关键指标:一个设计良好的SRAM存内计算MAC单元,在28nm工艺下,能效可以达到10-50 TOPS/W。这个数字在传统数字芯片里,通常只有1-5 TOPS/W。

嗯,这就是数字存内计算的魅力。它不花哨,但实用。如果你正在做边缘AI或者低功耗芯片,我强烈建议你认真考虑这个方向。

想要更多资料,联系可可