
1. 低功耗6T SRAM设计的核心矛盾与工程思路1.1 为什么6T SRAM成了低功耗设计的“钉子户”但凡做过MCU或者SoC低功耗设计的人心里都清楚一件事CPU核可以关外设可以停PLL可以锁但SRAM这块存储阵列想让它彻底不耗电几乎不可能。原因很简单SRAM是易失性存储只要你想保留数据就得给它供电只要供电漏电流就一直在那里啃你的功耗预算。6T SRAM之所以成为业界主流不是因为它完美而是因为它在面积、速度、功耗、良率之间找到了一个相对平衡的支点。四个晶体管构成两个交叉耦合的反相器形成锁存结构另外两个晶体管作为访问管控制读写通道。这个结构从原理上就决定了它的几个硬伤读写共用同一组位线、访问管在读写时承担双重角色、数据保持状态下仍然存在亚阈值漏电和栅极漏电。我见过不少项目CPU功耗优化做得漂漂亮亮结果一测待机电流SRAM占了六七成。尤其是那些用了HC32L196或者STM32L151C8T6A这类低功耗MCU做深度休眠的场景SRAM的保持功耗直接决定了电池寿命能不能从三个月拉到一年。所以低功耗6T SRAM设计本质上是在跟物理规律做交易你要速度就得加宽晶体管你要低漏电就得接受性能损失你要面积小就得忍受更大的工艺波动。1.2 低功耗设计的三个主战场噪声容限、漏电流、读写可靠性很多人一上来就盯着漏电流看觉得把漏电降下来就万事大吉了。实际项目中漏电流只是冰山一角。真正让设计者头疼的是三个相互纠缠的问题第一个是噪声容限。低功耗往往意味着低电压而低电压直接压缩了SRAM的静态噪声容限和读写噪声容限。电压从1.2V降到0.9V甚至0.6V晶体管的驱动能力下降工艺波动的影响被放大原本在标称电压下稳稳当当的存储单元可能在低压下就读写失效。第二个是漏电流。漏电流分好几块亚阈值漏电、栅氧漏电、结漏电、栅致漏极泄漏。在先进工艺节点下亚阈值漏电是主要矛盾在成熟工艺如110nm、90nm下栅氧漏电和结漏电也不能忽视。漏电流不仅影响待机功耗还会导致数据保持失效因为漏电太大会把存储节点的电荷抽走。第三个是读写可靠性。6T结构读写共用位线读操作时访问管和下拉管形成分压如果下拉管不够强位线放电不充分读出放大器就可能误判。写操作时访问管要把交叉耦合的反相器强行翻转如果上拉管太强写不进去如果访问管太弱写入速度慢甚至失败。这三个问题不是孤立的。你把晶体管尺寸调大来改善噪声容限漏电流就上去了你把阈值电压调高来降漏电读写速度就下来了你把电源电压降低来省动态功耗噪声容限就崩了。所以低功耗6T SRAM设计核心是在这三个维度上找平衡点而不是单独优化某一个指标。1.3 从系统需求反推SRAM设计指标我在实际项目中总结出一个原则不要先画晶体管先算系统账。你的芯片是做什么用的是低功耗语音唤醒那种需要常年待机、偶尔唤醒的场景还是低功耗蓝牙那种周期性收发、对峰值功耗敏感的场景不同的应用场景SRAM的设计指标完全不同。以低功耗语音唤醒为例语音检测算法需要持续运行SRAM要频繁读写但每次读写的数据量不大。这种场景下动态功耗和读写速度的优先级高于待机漏电因为SRAM大部分时间在工作。而如果是STM32L151C8T6A那种做数据采集、定时唤醒上报的场景SRAM大部分时间处于保持状态漏电流就是第一优先级读写速度可以适当牺牲。我一般会先列一个指标表把系统对SRAM的要求量化指标项语音唤醒场景数据采集场景蓝牙收发场景工作电压0.9~1.2V1.2~1.8V1.0~1.2V待机漏电占比30%60%40%读写频率高低中噪声容限要求中高高面积约束中低高这张表不是拍脑袋来的是根据实际项目中的功耗分解和失效分析反推出来的。有了这张表后面选工艺、定尺寸、调阈值才有依据。2. 噪声容限低电压下最容易翻车的地方2.1 静态噪声容限和读写噪声容限到底在测什么噪声容限这个词听起来很学术说白了就是存储单元抵抗干扰的能力。静态噪声容限测的是在保持状态下你在存储节点上施加多大的噪声电压才能让交叉耦合的反相器翻转。读写噪声容限测的是在读或者写的过程中单元抵抗干扰的能力。6T SRAM的静态噪声容限可以用蝴蝶曲线来直观理解。把两个反相器的电压传输特性曲线画在一起形成两个蝴蝶翅膀一样的图形中间围出来的最大正方形边长就是静态噪声容限。这个值越大单元越稳。但问题是低电压下蝴蝶翅膀会缩小正方形边长急剧减小。我实测过一组数据在55nm工艺下电源电压从1.2V降到0.8V静态噪声容限从280mV降到120mV左右降幅超过一半。如果工艺波动再吃掉一部分留给设计的余量就非常紧张了。所以低功耗设计不能只看标称值要把工艺角、温度、电压波动全部算进去。2.2 晶体管尺寸比例怎么定 pull-up、pull-down、pass-gate的三角关系6T SRAM里三个关键晶体管上拉管、下拉管、访问管。它们的尺寸比例直接决定了噪声容限和读写可靠性。业界有个经典的比例关系叫“beta ratio”就是下拉管和访问管的驱动能力之比。读操作时位线预充到高电平字线打开访问管和下拉管形成分压。如果下拉管不够强存储节点“0”的电压会被拉高严重时导致单元翻转。所以下拉管要比访问管强一般beta ratio取1.5到2.5之间。但下拉管太强也有问题写操作时访问管要把存储节点从“1”拉到“0”如果下拉管太强写驱动能力不够写不进去。上拉管和访问管的比例叫“alpha ratio”影响写能力。上拉管太强写操作时它会把节点往上拉跟访问管对着干导致写入失败。所以上拉管一般做得比访问管弱alpha ratio取0.5到1.5之间。我通常的做法是先根据工艺库提供的设计规则确定最小尺寸然后以访问管为基准下拉管取1.8倍宽度上拉管取0.8倍宽度。这个比例不是固定的要根据工艺角和目标电压微调。比如在0.6V超低电压下我会把下拉管加到2.2倍上拉管降到0.6倍牺牲一点写余量来换读稳定性。注意尺寸比例调整后一定要跑蒙特卡洛仿真不要只看典型值。工艺波动下标称值好看不代表量产良率高。2.3 低电压下的噪声容限补偿技巧电压降到0.8V以下光靠调尺寸已经不够了。这时候需要一些电路层面的补偿手段。我常用的有三种第一种是字线电压抬升。读操作时把字线电压抬到比电源电压高一点比如电源1.0V字线给1.2V。这样访问管的驱动能力增强位线放电更快读噪声容限改善。但字线电压不能太高否则访问管栅氧可靠性有问题而且写操作时字线电压太高会导致写能力下降。第二种是位线预充电压调整。传统做法是位线预充到电源电压但在低电压下预充到电源电压会让访问管承受更大的栅源电压差漏电增加。我试过把预充电压降到电源电压的80%左右读噪声容限略有改善漏电也降了一些。代价是读出放大器需要更灵敏。第三种是体偏置技术。通过给晶体管体端加偏置电压来动态调整阈值电压。读操作时给下拉管加正体偏置让它更强保持状态时给所有晶体管加负体偏置降低漏电。这个技术在FD-SOI工艺上特别好用体偏置范围大效果明显。但在体硅工艺上体偏置范围有限而且需要额外的电荷泵增加了设计复杂度。2.4 噪声容限的仿真验证方法仿真验证是低功耗SRAM设计中最耗时间也最容易出错的环节。我一般分三步走第一步是直流仿真扫描电源电压和工艺角画出蝴蝶曲线提取静态噪声容限。这一步要覆盖所有工艺角TT、FF、SS、FS、SF温度从-40度到125度电压从标称值的±10%到目标低压。第二步是瞬态仿真模拟读操作和写操作观察位线放电波形和存储节点电压变化。读操作要看位线放电速度是否足够读出放大器识别写操作要看存储节点是否被可靠翻转。第三步是蒙特卡洛仿真通常跑1000次以上统计噪声容限的分布。我一般要求静态噪声容限的3西格玛值大于50mV读写噪声容限的3西格玛值大于80mV。达不到就回去调尺寸或者加补偿。这里有个坑很多仿真模板只跑典型值或者蒙特卡洛次数不够导致流片后良率惨不忍睹。我吃过这个亏后来把蒙特卡洛次数加到2000次仿真时间多了三倍但流片风险降了一个数量级。3. 漏电流优化从波形图看懂每一微安的来源3.1 漏电流波形图解亚阈值漏电、栅氧漏电、结漏电的区分漏电流波形图是分析SRAM功耗的利器。把SRAM在保持状态下的电流波形拉出来你能看到几条不同的曲线叠加在一起。最底下那条平缓的、随温度变化明显的是亚阈值漏电中间那条对电压敏感的、在栅极电压变化时跳变的是栅氧漏电最上面那条跟结面积相关的、在存储节点电压变化时出现尖峰的是结漏电。亚阈值漏电是低功耗设计的主要对手。它跟阈值电压呈指数关系阈值电压降100mV亚阈值漏电大概涨10倍。在先进工艺下亚阈值漏电可以占到总漏电的60%到80%。栅氧漏电跟栅氧厚度直接相关工艺越先进栅氧越薄漏电越大但可以通过高K介质来缓解。结漏电跟PN结面积和掺杂浓度有关通常占比不大但在高温下会显著增加。我习惯在仿真里把这三部分分开看分别优化。亚阈值漏电靠调阈值电压和体偏置栅氧漏电靠选工艺和栅极结构结漏电靠优化版图减小结面积。3.2 阈值电压与漏电流的指数关系为什么降100mV漏电涨10倍这个指数关系来自亚阈值区的电流公式。简单说晶体管在亚阈值区工作时电流跟栅源电压呈指数关系斜率由亚阈值摆幅决定。亚阈值摆幅的物理极限是60mV/decade也就是说栅源电压每降60mV电流降一个数量级。实际工艺中亚阈值摆幅在80到100mV/decade之间。所以你把阈值电压调高100mV亚阈值漏电大概降一到两个数量级。但阈值电压高了驱动电流就小了读写速度就慢了。这就是低功耗SRAM设计的核心矛盾你要漏电低就得阈值高你要速度快就得阈值低。我一般用多阈值方案来平衡关键路径上的晶体管用低阈值保证速度非关键路径和保持状态下的晶体管用高阈值降低漏电。有些工艺库提供多阈值器件直接选就行有些工艺只提供单一阈值那就得靠体偏置或者电源门控来实现类似效果。3.3 电源门控与体偏置两种降漏电手段的取舍电源门控是最直接的降漏电方法在SRAM阵列和电源之间加一个开关管保持状态下把开关管关掉SRAM彻底断电。但问题是断电后数据就丢了。所以电源门控只适用于不需要保留数据的场景或者配合数据备份机制使用。体偏置更精细一些保持状态下给晶体管体端加负偏置提高阈值电压降低漏电读写时把体偏置撤掉或者加正偏置恢复速度。体偏置的好处是不丢数据缺点是需要额外的偏置电压产生电路而且体偏置范围受工艺限制。我做过一个对比在90nm工艺下电源门控能把待机漏电降到接近零但唤醒需要重新加载数据唤醒时间和功耗都不小。体偏置能把待机漏电降60%左右但唤醒几乎无延迟。所以如果系统对唤醒时间敏感体偏置更合适如果系统可以接受较长的唤醒时间电源门控更彻底。对比项电源门控体偏置漏电降低幅度95%50%~70%数据保持丢失保持唤醒时间长短额外电路开关管控制逻辑偏置产生电路工艺依赖低高适用场景深度休眠快速唤醒3.4 数据保持电压找到漏电和可靠性的平衡点数据保持电压是SRAM能保住数据的最低电源电压。低于这个电压漏电把存储节点电荷抽走数据就丢了。数据保持电压越低待机功耗越小因为漏电跟电压正相关。但数据保持电压不能无限低。它受工艺波动、温度、噪声容限的约束。我一般通过仿真找到数据保持电压的3西格玛值然后留20%的余量作为设计值。比如仿真出来3西格玛数据保持电压是0.5V那设计值就取0.6V。实际项目中我会在SRAM控制器里加一个可配置的保持电压调节功能。系统根据工作温度和工艺角动态调整保持电压在保证可靠性的前提下尽量降低功耗。这个功能在HC32L196这类低功耗MCU上特别有用因为它的工作温度范围宽固定保持电压要么浪费功耗要么在高温下不可靠。4. 读写分离6T SRAM的先天缺陷与后天补救4.1 为什么6T结构读写不能分离6T SRAM的6个晶体管里访问管是读写共用的。读操作时访问管把存储节点的电压传到味线上写操作时访问管把位线上的电压灌到存储节点里。同一个管子干两件事就必然有妥协。读操作要求访问管弱一点这样它和下拉管分压时存储节点“0”的电压不会被抬太高。写操作要求访问管强一点这样才能把存储节点从“1”拉到“0”。这两个要求是矛盾的所以6T SRAM的读写噪声容限总有一个要牺牲。8T SRAM通过增加两个晶体管把读和写分开读操作走单独的读缓冲写操作走原来的访问管。这样读写可以独立优化噪声容限大幅改善。但8T的面积比6T大30%左右对于面积敏感的应用不划算。所以6T SRAM的低功耗设计很多时候是在读写之间找平衡而不是追求两个都最优。4.2 写驱动能力与读稳定性的矛盾怎么解写驱动能力不够写操作就失败读稳定性不够读操作就出错。这两个问题在低电压下都会放大。我的经验是分场景处理如果系统对写速度要求不高可以适当减弱访问管增强下拉管优先保证读稳定性。写操作时通过延长字线开启时间或者提高写驱动电压来补偿。如果系统对写速度要求高可以适当增强访问管但这样读稳定性会下降。补偿方法是读操作时降低字线电压减弱访问管驱动或者提高位线预充电压让读出放大器更容易识别。我通常会在设计阶段做一组折中仿真固定下拉管尺寸扫描访问管尺寸画出读噪声容限和写噪声容限的曲线找到两条曲线的交点。这个交点就是最优的访问管尺寸。然后在这个基础上根据系统需求微调。4.3 辅助电路怎么补6T的短板6T SRAM的短板靠辅助电路来补这是低功耗设计的重要思路。我常用的辅助电路有几种读出放大器失调补偿。低电压下读出放大器的失调电压占比增大容易误判。我一般用失调补偿技术在读出前先采样失调电压读出时抵消掉。这样读出放大器可以在更小的位线电压差下可靠工作读速度也快了。写辅助电路。写操作时如果访问管不够强可以临时降低单元电源电压让上拉管变弱这样访问管更容易把节点拉下来。或者临时抬高地线电压让下拉管变弱。这两种方法都能改善写能力但会增加控制复杂度。字线脉冲宽度自适应。读操作和写操作对字线脉冲宽度的要求不同。读操作需要足够的时间让位线放电写操作需要足够的时间让节点翻转。我一般会根据工艺角和温度动态调整字线脉冲宽度在保证可靠性的前提下尽量缩短省动态功耗。4.4 版图层面的读写优化技巧版图对6T SRAM的性能影响很大尤其是低电压下。我总结了几条经验存储单元要尽量紧凑。面积越小寄生电容越小读写速度越快动态功耗越低。但太紧凑会导致工艺波动影响增大噪声容限下降。我一般用工艺库提供的最紧凑单元然后通过仿真验证噪声容限是否达标。位线要走高层金属。位线电容直接决定读速度和动态功耗。走高层金属可以减小寄生电容但高层金属电阻大需要折中。我一般用中间层金属走位线兼顾电容和电阻。电源地线要加宽。低电压下IR drop影响很大电源地线太窄会导致局部电压下降噪声容限恶化。我一般把电源地线加宽到最小宽度的两到三倍牺牲一点面积换可靠性。访问管和下拉管的版图要对称。不对称会导致工艺波动下两个存储节点的噪声容限不一致良率下降。我一般用共 centroid 布局让两个反相器的晶体管尽量对称。5. 实操过程从指标到流片的完整流程5.1 设计指标分解与工艺选型拿到系统需求后第一步是把系统指标分解成SRAM设计指标。比如系统要求待机电流小于10微安SRAM占60%那就是6微安。SRAM容量是64KB那就是每比特漏电小于0.1皮安。然后根据这个漏电指标反推阈值电压和晶体管尺寸。工艺选型要考虑几个因素目标电压、漏电水平、多阈值器件可用性、体偏置支持、成本。低功耗应用一般选55nm、40nm或者更成熟的90nm、110nm工艺。先进工艺漏电大但可以用高K介质和多阈值器件来缓解。成熟工艺漏电小但速度和面积不占优势。我一般会同时评估两到三个工艺跑一遍仿真对比漏电、速度、面积然后选综合最优的。不要只看工艺厂提供的标称数据一定要自己跑仿真因为标称数据是典型值实际设计要考虑工艺角和温度。5.2 单元尺寸扫描与蒙特卡洛仿真尺寸扫描是找到最优晶体管比例的关键步骤。我一般固定下拉管尺寸扫描访问管和上拉管尺寸跑蒙特卡洛仿真记录每个尺寸组合下的静态噪声容限、读写噪声容限、漏电流、读写速度。这个扫描过程很耗时间一个尺寸组合跑1000次蒙特卡洛大概需要几个小时。我一般用脚本自动化晚上跑第二天看结果。扫描范围不用太大根据经验访问管宽度在下拉管的0.4到0.8倍之间上拉管在0.3到0.6倍之间基本能覆盖最优解。扫描完成后我会画几张图横轴是访问管宽度纵轴分别是静态噪声容限、写噪声容限、漏电流。然后找静态噪声容限和写噪声容限的交点再看漏电流是否达标。如果漏电流超标就整体调高阈值电压或者加体偏置。5.3 辅助电路设计与参数整定辅助电路的设计要和存储单元协同。读出放大器的失调补偿电容、写辅助电路的电压调节范围、字线脉冲宽度的调节步长这些参数都要根据存储单元的特性来定。我一般先定读出放大器的失调补偿范围根据蒙特卡洛仿真得到的失调电压分布取3西格玛值作为补偿范围。写辅助电路的电压调节范围根据写噪声容限的仿真结果来定一般取100mV到200mV。字线脉冲宽度根据读速度和写速度的仿真结果来定留20%的余量。辅助电路的控制逻辑要尽量简单因为复杂逻辑会增加功耗和面积。我一般用查找表或者简单的状态机来实现避免用处理器。5.4 后仿真与流片前的最终检查后仿真要把寄生参数提取出来重新跑一遍噪声容限和漏电仿真。后仿真结果一般比前仿真差因为寄生电容和电阻会降低速度、增加漏电。我一般要求后仿真的噪声容限不低于前仿真的80%漏电不高于前仿真的120%。流片前还要检查几件事电源地线的IR drop是否在可接受范围内ESD保护电路是否影响SRAM性能测试电路是否覆盖了所有关键指标。我一般会加一个SRAM测试模式可以单独控制字线、位线、电源电压方便流片后调试。6. 常见问题与排查技巧实录6.1 读失败、写失败、保持失败的典型波形特征读失败的波形特征是位线放电速度不够读出放大器采样时位线电压差太小。在波形上表现为位线电压下降缓慢读出放大器输出抖动或者误判。原因可能是访问管太弱、位线电容太大、读出放大器失调太大。写失败的波形特征是存储节点电压没有完全翻转写操作结束后节点电压处于中间值。在波形上表现为节点电压下降后又回升或者两个节点电压接近。原因可能是访问管太弱、上拉管太强、写驱动电压不够。保持失败的波形特征是存储节点电压在保持状态下缓慢漂移最终翻转。在波形上表现为节点电压随时间下降或者上升温度越高漂移越快。原因可能是漏电太大、保持电压太低、噪声容限不够。6.2 工艺角与温度对漏电的影响排查工艺角和温度对漏电的影响是乘性的。FF角加高温漏电可能是TT角常温的好几倍。我一般会跑一个矩阵五个工艺角乘以三个温度点共15组仿真记录漏电和噪声容限。如果某个角下漏电超标先看是亚阈值漏电还是栅氧漏电。亚阈值漏电对温度敏感栅氧漏电对电压敏感。如果是亚阈值漏电超标调高阈值电压或者加体偏置如果是栅氧漏电超标换工艺或者加厚栅氧。温度排查时要注意高温下噪声容限也会下降所以不能只看漏电要同时看噪声容限。我一般要求高温下噪声容限的3西格玛值仍然大于50mV。6.3 常见问题速查表问题现象可能原因排查方法解决措施读失败访问管弱、位线电容大、读出放大器失调大看位线放电波形、读出放大器输出增强访问管、减小位线电容、加失调补偿写失败访问管弱、上拉管强、写电压不够看存储节点翻转波形增强访问管、减弱上拉管、加写辅助保持失败漏电大、保持电压低、噪声容限小看节点电压漂移波形调高阈值、提高保持电压、加体偏置漏电超标阈值低、温度高、电压高分工艺角和温度跑仿真调高阈值、加体偏置、降保持电压噪声容限不足尺寸比例不对、电压低、工艺波动大跑蒙特卡洛仿真调尺寸比例、加字线抬升、加体偏置6.4 独家避坑技巧第一条不要迷信工艺厂提供的SRAM编译器。编译器生成的单元是针对通用场景优化的不一定适合你的低功耗需求。我一般会拿编译器的结果作为起点然后自己调尺寸和辅助电路。第二条蒙特卡洛仿真次数要够。我见过只跑100次的结果流片后良率只有70%。跑2000次虽然慢但值得。第三条后仿真一定要做。前仿真和後仿真差距可能很大尤其是低电压下。我吃过亏前仿真噪声容限200mV后仿真只有120mV差点流片失败。第四条测试电路要留够。SRAM的很多问题流片后才能发现如果测试电路不够调试起来很痛苦。我一般会加字线电压调节、位线预充电压调节、体偏置调节、读出放大器失调调节这几个测试模式。第五条保持电压要留余量。仿真出来的数据保持电压是典型值实际芯片要考虑工艺波动和温度。我一般留20%到30%的余量宁可多耗一点电也不要丢数据。7. 低功耗SRAM设计的系统级协同7.1 SRAM功耗在系统功耗中的占比分析低功耗设计不能只看SRAM本身要看系统。我做过一个统计在典型的低功耗MCU中SRAM的待机功耗占系统待机功耗的40%到70%动态功耗占系统动态功耗的20%到40%。所以SRAM优化对系统功耗的影响很大。但SRAM优化不能孤立做。比如你把SRAM保持电压降到0.6V漏电降了一半但系统唤醒后SRAM要恢复到工作电压这个恢复过程需要时间和能量。如果系统频繁唤醒恢复功耗可能抵消掉待机功耗的收益。我一般会做一个系统级的功耗模型把SRAM的待机功耗、唤醒功耗、工作功耗都算进去然后优化唤醒周期和保持电压。这个模型不用很精确但要有否则容易捡了芝麻丢了西瓜。7.2 与电源管理单元的配合策略SRAM的电源管理要和系统的电源管理单元协同。我一般把SRAM的电源分成几档工作电压、保持电压、断电。系统根据工作状态切换。工作状态下SRAM用标称电压保证速度和可靠性。保持状态下SRAM降到保持电压降低漏电。深度休眠状态下如果不需要保留数据直接断电如果需要保留数据用保持电压。电源切换的时候要注意时序。从工作电压降到保持电压要先关掉SRAM的读写操作等字线关闭后再降电压。从保持电压升到工作电压要先升电压再开字线。时序不对会导致数据丢失或者读写错误。7.3 低功耗语音唤醒场景的SRAM配置实例低功耗语音唤醒场景对SRAM的要求比较特殊需要持续运行语音检测算法SRAM频繁读写但每次数据量不大。这种场景下我一般这样配置SRAM分成两块一块是小容量的高速SRAM用于存放语音检测算法的关键数据和堆栈保持在工作电压保证速度另一块是大容量的低速SRAM用于存放语音模型和缓存数据保持在保持电压降低漏电。语音检测算法运行时只唤醒高速SRAM低速SRAM保持低功耗状态。检测到唤醒词后再唤醒低速SRAM加载语音模型。这样在待机监听状态下只有高速SRAM耗电整体功耗很低。这个配置的关键是算法和SRAM的协同设计。算法要尽量把关键数据放在高速SRAM里把不常用的数据放在低速SRAM里。我一般会和算法工程师一起做数据分区根据访问频率和数据大小来分配。7.4 蓝牙低功耗场景的SRAM配置实例低功耗蓝牙场景的特点是周期性收发对峰值功耗敏感。SRAM的配置要兼顾待机漏电和收发时的动态功耗。我一般把SRAM分成三块协议栈SRAM、数据缓存SRAM、应用SRAM。协议栈SRAM在蓝牙连接期间一直保持在工作电压因为协议栈需要快速响应。数据缓存SRAM在收发时工作空闲时降到保持电压。应用SRAM根据应用需求动态调整。蓝牙连接间隔一般是几十毫秒到几秒。在连接间隔内SRAM可以降到保持电压连接事件到来前提前升到工作电压。这个提前量要根据SRAM的电压恢复时间来定一般留几百微秒。这个配置的关键是电压切换的时序和功耗平衡。切换太频繁切换功耗占比高切换太少待机漏电占比高。我一般会做一个仿真扫描连接间隔和保持电压找到最优的切换策略。8. 从仿真到硅验证的经验总结8.1 流片后的测试与调试方法流片后第一件事是测SRAM的功能和功耗。我一般先测保持状态下的漏电扫描保持电压找到数据保持电压的实际值。然后测读写功能扫描工作电压和温度找到读写失败的点。调试的时候先用测试模式单独控制字线、位线、电源电压定位问题。如果是读失败先看位线放电波形再看读出放大器输出。如果是写失败先看存储节点翻转波形再看写驱动电压。如果是保持失败先看节点电压漂移再看漏电。我一般会准备一个测试计划覆盖所有工艺角和温度点记录每个点的漏电、噪声容限、读写速度。这些数据不仅用于调试也用于后续项目的参考。8.2 仿真与实测的偏差分析仿真和实测总有偏差关键是分析偏差来源。我遇到过几种典型偏差第一种是漏电实测比仿真大。原因可能是寄生漏电、测试电路漏电、封装漏电。我一般会先排除测试电路和封装的漏电再看是不是工艺偏差。第二种是噪声容限实测比仿真小。原因可能是工艺波动比仿真模型大、电源噪声、温度影响。我一般会加大仿真余量或者加片上噪声监测电路。第三种是读写速度实测比仿真慢。原因可能是寄生电容电阻比提取的大、电源IR drop、温度影响。我一般会优化版图加宽电源地线减小寄生。8.3 设计迭代与优化方向流片后根据实测数据迭代设计。如果漏电超标调高阈值电压或者加体偏置。如果噪声容限不足调尺寸比例或者加字线抬升。如果读写速度不够增强访问管或者加写辅助。迭代的时候要注意不要一次改太多。我一般一次只改一个参数看效果再改下一个。这样能清楚知道每个参数的影响积累经验。优化方向要根据系统需求来定。如果系统对功耗敏感优先降漏电如果系统对速度敏感优先提速度如果系统对面积敏感优先减面积。不要追求所有指标都最优找到满足系统需求的平衡点就行。8.4 我个人在实际操作中的体会做了这么多年低功耗SRAM设计我最大的体会是不要跟物理规律较劲要学会跟它做交易。你想要低漏电就得接受速度损失你想要高噪声容限就得接受面积增加你想要低电压就得接受工艺波动影响放大。另一个体会是仿真很重要但不要迷信仿真。仿真模型是简化的实际芯片有太多仿真覆盖不到的因素。我一般会在仿真结果上留足够的余量然后靠实测数据来修正。最后一个体会是低功耗设计是系统级的工作不是SRAM一个模块的事。SRAM的功耗优化要和系统架构、电源管理、算法设计协同。我见过太多项目SRAM本身做得很好但系统架构不合理整体功耗还是下不来。所以做低功耗SRAM设计既要懂晶体管也要懂系统既要会仿真也要会实测既要追求指标也要接受妥协。这个平衡点找到了设计就成功了。