低功耗SRAM设计技术:多阈值电压、电源门控与存储体划分
SRAM在片上存储里占了很大一块面积,功耗占比也相当可观。我做过几个SoC项目,SRAM的漏电经常占到总功耗的30%以上,尤其是在先进工艺下。所以,怎么把SRAM的功耗降下来,是每个芯片设计者都得面对的硬骨头。
这一章,我把自己在实际项目中用过的几种低功耗SRAM设计技术梳理一下。说白了,就是四个方向:多阈值电压设计、电源门控技术、存储体划分策略,还有读写辅助电路。每个方向都有它的适用场景和坑,咱们一个一个聊。
核心思路:低功耗SRAM设计不是单一技术能搞定的,需要从工艺、电路、架构三个层面协同优化。多阈值解决漏电,电源门控解决待机功耗,存储体划分解决动态功耗,读写辅助保证良率——四者缺一不可。
多阈值电压设计:用不同Vt管子做不同事
多阈值电压(Multi-Vt)设计,是低功耗SRAM最基础的手段。你想想看,SRAM存储单元里,有的管子对漏电敏感,有的对速度敏感。那我们就用不同阈值的管子来各司其职。
我习惯的做法是:
- 存储单元的核心交叉耦合对:用高阈值(HVT)管。为什么?因为存储单元大部分时间在保持数据,漏电是主要矛盾。HVT管漏电小,能大幅降低静态功耗。
- 位线(BL/BLB)上的传输管:用标准阈值(SVT)或低阈值(LVT)管。因为读写操作时,位线充放电速度直接影响访问时间,这里需要速度。
- 外围控制逻辑:关键路径用LVT,非关键路径用HVT。这个需要仔细做时序分析,不能一刀切。
我在一个28nm的项目里试过,存储单元全部用HVT,外围关键路径用SVT,整体漏电比全SVT方案降低了约40%。代价是读写裕度稍微变差了一点,但通过后续的读写辅助电路补回来了。
小技巧:多阈值设计时,别忘了检查存储单元的静态噪声容限(SNM)。HVT管子的SNM通常会好一些,因为阈值高,抗噪声能力强。但传输管用LVT时,要注意读破坏问题——我曾经因为这个吃过亏,后来加了一级写辅助才解决。
电源门控技术:不用时就断电
电源门控(Power Gating)是降低待机功耗的利器。说白了,就是当某个SRAM模块不工作时,直接把它的电源切断。听起来简单,但做起来有不少门道。
我常用的电源门控方案有两种:
| 方案类型 | 实现方式 | 适用场景 | 注意事项 |
|---|---|---|---|
| 细粒度电源门控 | 每个存储体(Bank)独立控制 | 多Bank结构,部分Bank可休眠 | 需要额外的隔离单元和状态保持逻辑 |
| 粗粒度电源门控 | 整个SRAM宏单元统一控制 | 单Bank或小容量SRAM | 唤醒时间长,数据需要保存到外部 |
我个人更推荐细粒度方案。虽然控制逻辑复杂一些,但灵活性高。比如在AI加速器里,不同存储体在不同时间片被访问,细粒度门控可以做到“用多少开多少”,功耗优化空间很大。
避坑指南:我曾经在一个项目里,电源门控的唤醒时间没算够,导致数据恢复时出现竞争风险。后来加了一个唤醒序列控制器,按顺序先恢复存储单元电源,再恢复外围逻辑电源,最后才允许访问。这个顺序不能乱,否则数据会丢。
存储体划分策略:把大SRAM切成小块
存储体划分(Bank Partitioning)是降低动态功耗的有效手段。你想想,一个大的SRAM阵列,每次访问都要给整条位线充放电,功耗自然大。如果把它切成多个小Bank,每次只激活一个Bank,位线长度变短,充放电电容变小,功耗就降下来了。
我一般遵循这几个原则:
- Bank大小:每个Bank的容量建议控制在4KB~16KB之间。太小了控制逻辑开销大,太大了位线功耗降不下来。
- 地址映射:尽量让连续访问的地址落在同一个Bank里,减少Bank切换次数。这个需要和软件协同设计。
- Bank数量:2的幂次方,方便地址译码。4个、8个、16个都是常见选择。
举个例子,一个256KB的SRAM,如果做成一个Bank,位线电容大概有几百fF。切成16个16KB的Bank,每个Bank的位线电容降到几十fF,动态功耗能降低60%以上。当然,代价是面积增加了约10%~15%,因为每个Bank都需要独立的译码器和控制逻辑。
经验之谈:存储体划分不是越细越好。我做过一个极端测试,把256KB切成64个4KB的Bank,结果面积增加了40%,功耗只比16个Bank的方案降低了5%。所以,4KB~16KB是一个比较合理的区间。
读写辅助电路:保证良率的最后一道防线
低功耗设计往往会牺牲一些性能或良率。比如用了HVT管子,读写速度变慢;电源门控后,电压恢复需要时间。这时候,读写辅助电路就派上用场了。
我常用的几种辅助电路:
- 写辅助(Write Assist):降低位线电压或提高存储单元电源电压,帮助写入。典型方案有负位线(Negative Bitline)和VDD提升(VDD Boost)。
- 读辅助(Read Assist):提高位线预充电电压或降低存储单元电源电压,防止读破坏。常用方案有读电流增强(Read Current Boost)和位线电压降低(Bitline Lowering)。
- 时序辅助(Timing Assist):动态调整字线脉冲宽度,保证读写窗口。这个在低电压下特别重要。
我记得在一个7nm的项目里,SRAM在0.6V低电压下读写失败率很高。后来加了负位线写辅助和读电流增强,良率从70%提升到了95%以上。代价是面积增加了约5%,但相比流片失败的风险,这点代价完全可以接受。
建议:读写辅助电路不要全开。我一般会在芯片测试阶段做一次“辅助强度扫描”,找到每个芯片的最优配置。因为工艺角不同,有的芯片需要强辅助,有的芯片弱辅助就够了。全开反而会增加功耗。
四种技术的协同设计
上面四种技术不是孤立的。在实际项目中,我通常这样组合:
- 工艺层面:多阈值电压设计,存储单元用HVT,外围用SVT/LVT。
- 架构层面:存储体划分,每个Bank 8KB~16KB,细粒度电源门控。
- 电路层面:读写辅助电路,根据测试结果动态调整强度。
这样组合下来,动态功耗和静态功耗都能得到有效控制,同时良率也有保障。
嗯,以上就是低功耗SRAM设计的四个核心技术。每个技术都有它的适用场景和权衡点。在实际项目中,我建议你先做功耗分析,找到功耗瓶颈,再有针对性地选择技术组合。不要一上来就全上,那样面积和设计复杂度都会失控。