2. SRAM设计与优化:6T SRAM单元原理、SRAM访问时序、低功耗SRAM技术
各位同学,今天我们来聊聊SRAM。说实话,在无线SoC芯片里,SRAM占的面积和功耗比例越来越高。我做过一个低功耗蓝牙芯片,SRAM占了将近60%的芯片面积。所以,搞懂SRAM的设计与优化,是内存子系统的基本功。
2.1 6T SRAM单元原理
先看最基本的存储单元——6T SRAM。为什么叫6T?因为它用了6个晶体管。两个交叉耦合的反相器构成锁存器,再加两个访问管。
我个人习惯把6T单元画成这样的结构:
WL (字线)
|
M5 (访问管) M6 (访问管)
| |
BL --- M1 --- M3 --- BLB
| |
M2 M4
| |
VSS VSS
M1和M2组成一个反相器,M3和M4组成另一个。两个反相器首尾相连,形成正反馈。只要上电,这个锁存器就能稳定地存一个0或1。
读操作时,WL拉高,M5和M6导通。如果存储节点Q是0,BL会被下拉,BLB保持高电平。差模信号被灵敏放大器检测到,输出数据。
写操作时,BL和BLB被强制驱动到相反的电平。比如写1,BL拉高,BLB拉低。这个驱动强度必须大于锁存器的反馈强度,才能把数据写进去。
关键设计参数:单元比(Cell Ratio)和上拉比(Pull-up Ratio)。
- 单元比 = W(M2)/W(M5) —— 影响读稳定性
- 上拉比 = W(M4)/W(M6) —— 影响写能力
我在项目中遇到过一个问题:为了省面积,把单元比设得太小。结果读操作时,存储节点被干扰翻转了。嗯,这就是所谓的读破坏(Read Disturb)。后来我把M2的宽度从120nm调到180nm,问题就解决了。
2.2 SRAM访问时序
SRAM的访问时序,说白了就是地址到数据输出的延迟。我习惯把它拆成几个阶段:
- 地址译码:地址信号经过预译码和主译码,选中某一行
- 字线激活:WL从低到高,访问管打开
- 位线放电:存储单元开始对BL/BLB放电,产生差模信号
- 灵敏放大:差模信号达到一定幅度(通常50-100mV),灵敏放大器启动
- 数据输出:放大后的数据送到输出锁存器
这里有个容易踩的坑——建立时间(Setup Time)和保持时间(Hold Time)。
我曾经犯过的错:在设计一个高速SRAM时,没留够地址的建立时间。结果地址变化和时钟沿几乎同时到达,导致读出了错误的数据。后来我在地址路径上加了一级流水线寄存器,才把时序收敛。
SRAM的访问时间可以用这个公式估算:
T_access = T_decoder + T_wl + T_bitline + T_sense + T_output
其中,位线放电时间T_bitline是最长的。为什么?因为位线电容很大,放电速度受限于单元驱动电流。你想想看,一条位线上挂了几百个单元,每个单元都有漏电流和寄生电容。
2.3 低功耗SRAM技术
低功耗是无线SoC的命门。SRAM的功耗主要来自三个方面:漏电流、动态读写功耗、位线充放电。我给大家介绍几种实用的低功耗技术。
2.3.1 电源门控(Power Gating)
当SRAM块不使用时,直接关掉它的电源。听起来简单,做起来有讲究。
- 细粒度门控:每个Bank独立控制,粒度可以到KB级别
- 状态保持门控:用高阈值电压的保持管,关掉大部分电源,只留一点维持数据
- 唤醒时间:从关断到恢复工作,需要几十纳秒到几微秒
我个人建议:对于经常访问的SRAM块,用状态保持门控。对于很少访问的,直接全关。我在一个IoT芯片上做过测试,全关能省70%的漏电。
2.3.2 读写辅助技术
随着工艺微缩,SRAM单元的稳定性越来越差。读写辅助技术就是帮单元一把,让它能稳定工作。
| 技术 | 原理 | 效果 |
|---|---|---|
| 写辅助:负位线 | 写操作时,BL拉到负电压 | 增强写能力,降低写失败率 |
| 写辅助:VDD降低 | 写操作时,降低单元电源电压 | 减弱锁存器反馈,便于写入 |
| 读辅助:WL升压 | 读操作时,字线电压高于VDD | 增大读电流,加快位线放电 |
| 读辅助:VDD升高 | 读操作时,提高单元电源电压 | 增强读稳定性,防止读破坏 |
我的经验:负位线技术效果很好,但需要额外的负压产生电路。如果芯片面积紧张,我建议优先考虑VDD降低方案。它只需要一个简单的电压调节器,面积开销小很多。
2.3.3 其他低功耗技巧
- 分层位线:把长位线分成多段,只激活需要的段
- 数据保持模式:降低SRAM的电源电压到数据保持电压(通常0.6-0.7V)
- 时钟门控:不访问时,关掉SRAM的时钟树
2.4 SRAM编译器选择
做SoC芯片,很少自己画SRAM单元。我们用的是SRAM编译器——一个自动生成SRAM硬宏的工具。
市面上主流的SRAM编译器有:
- ARM Artisan:最常用,支持多种工艺节点
- Synopsys DesignWare:集成度高,带DFT功能
- 台积电自家编译器:针对自家工艺优化
选择SRAM编译器时,我关注这几个点:
- 容量范围:能不能生成我需要的深度和宽度
- 功耗模式:支不支持电源门控、数据保持
- 时序模型:Liberty文件是否准确,有没有温度反转效应模型
- 测试支持:有没有MBIST接口,能不能做修复
- 面积效率:同样容量下,面积越小越好
避坑指南:我曾经选了一个小众的SRAM编译器,因为它面积特别小。结果流片回来,高温下时序不收敛。后来发现它的时序模型没考虑温度反转。从那以后,我只用经过量产验证的编译器。
还有一个细节:SRAM编译器的配置参数很多。比如字线宽度、位线预充电电压、灵敏放大器类型。我建议先用默认参数跑一版,然后根据时序和功耗分析结果,逐步优化。
好了,SRAM这部分就讲到这里。记住,SRAM设计没有银弹。每个项目都要根据功耗、性能、面积的要求,找到最适合的折中点。
公众号:蓝海资料掘金营,微信deep3321