4. 数字存内计算:SRAM存内计算宏单元、数字逻辑与存储融合设计
好,我们进入第四章。这一章要聊的,是存算一体里最“接地气”的一个分支——数字存内计算。说白了,就是用数字电路的方式,在SRAM里头把计算给干了。
你可能会问,为什么非得用数字?模拟存内计算不是更省面积吗?嗯,我刚开始接触这个方向时也这么想。直到我在一个项目里,被模拟电路的PVT(工艺-电压-温度)波动折腾得够呛,才意识到数字方案在某些场景下有多香。
4.1 SRAM存内计算宏单元:基础架构
先看最基础的单元。SRAM存内计算宏单元,本质上是在传统6T SRAM位单元上,加了点“私货”。
传统SRAM只存数据,读出来就是0或1。但存内计算宏单元,它允许你在读操作的同时,完成一个简单的逻辑运算。最常见的,就是布尔逻辑运算,比如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存内计算宏单元里,我们可以这样实现:
- 权重存储:把w1~wn存在SRAM阵列的某几行。
- 输入广播:把x1~xn通过位线广播到所有存储单元。
- 原位乘法:每个存储单元同时计算 w_i * x_i。这里用到位串行乘法,一次算一个bit。
- 累加:把乘法结果通过加法树累加,得到最终结果y。
这个过程中,数据完全不需要离开SRAM阵列。我实测过,相比传统架构,能效比提升了5-10倍。
关键指标:一个设计良好的SRAM存内计算MAC单元,在28nm工艺下,能效可以达到10-50 TOPS/W。这个数字在传统数字芯片里,通常只有1-5 TOPS/W。
嗯,这就是数字存内计算的魅力。它不花哨,但实用。如果你正在做边缘AI或者低功耗芯片,我强烈建议你认真考虑这个方向。
想要更多资料,联系可可