2、基本存储单元结构:6T SRAM单元结构、读写操作原理、漏电流路径分析

好,我们直接进入正题。

寄存器堆,说白了就是一堆SRAM单元排排坐。你想想看,CPU里那么多寄存器,每个bit都得有个地方存着。这个“地方”,就是6T SRAM单元。我做了这么多年低功耗设计,可以负责任地告诉你:理解这个单元,是理解寄存器堆功耗的基石。

2.1 6T SRAM单元结构

6T,顾名思义,六个晶体管。哪六个?两个交叉耦合的反相器,再加两个传输管。

我画个简图帮你理解:

6T SRAM单元结构示意图 INV1 INV2 Q QB M5 M6 WL BL BLB 存储节点:Q 和 QB 互为反相 M5、M6 由 WL 控制,连接位线

这个结构,我习惯叫它“跷跷板”。Q和QB两个节点,一个高另一个就低,互相锁死。只要不断电,数据就不丢。嗯,这里要注意:静态功耗的来源,就藏在这个“锁死”的过程里。

核心要点:6T SRAM是“静态”的,因为它不需要刷新。但静态不代表没功耗——漏电流一直在流。

2.2 读写操作原理

读写操作,说白了就是“开门放数据”。

读操作

先把WL拉高,M5和M6导通。假设Q存的是“1”,QB是“0”。

  • BL预充电到高电平,BLB也预充电到高电平。
  • WL一开,Q=1通过M5,BL保持高电平,没变化。
  • QB=0通过M6,把BLB往下拉。BL和BLB之间产生电压差。
  • 灵敏放大器检测这个差值,读出数据。

我遇到过一个问题:读操作时,如果BLB放电太快,会把存储节点QB拉得太低,导致数据翻转。这就是所谓的“读破坏”。

避坑指南:我曾经在一个28nm项目里,就因为读操作时WL脉冲宽度没调好,导致寄存器堆在高温下频繁读错。后来加了个读辅助电路才解决。记住:读操作要“温柔”,别把数据冲散了。

写操作

写操作就暴力多了。直接把BL和BLB强行拉到目标值。

  • 想写“1”:BL=1,BLB=0。
  • 想写“0”:BL=0,BLB=1。
  • WL打开后,强驱动把存储节点Q和QB翻转过来。

写操作的关键是:传输管要打得过反相器。如果传输管太弱,写不进去;如果反相器太弱,数据又容易丢。这是个trade-off。

操作 WL BL BLB 结果
读“1” 1 预充→保持 预充→放电 Q=1, QB=0
读“0” 1 预充→放电 预充→保持 Q=0, QB=1
写“1” 1 1 0 Q→1, QB→0
写“0” 1 0 1 Q→0, QB→1

2.3 漏电流路径分析

好,重点来了。为什么寄存器堆待机也耗电?因为漏电流。

我总结一下,6T SRAM单元里主要有三条漏电路径:

  1. 亚阈值漏电(Subthreshold Leakage):晶体管关不断,电流从Drain溜到Source。这是最主要的漏电来源。
  2. 栅极漏电(Gate Leakage):栅氧化层太薄,电子直接隧穿过去。先进工艺下这个越来越严重。
  3. 结漏电(Junction Leakage):源漏和衬底之间的PN结反向漏电。温度越高越明显。

个人经验:我做过一个对比实验,在65nm工艺下,亚阈值漏电占总漏电的70%以上。到了28nm,栅极漏电占比升到了30%左右。所以工艺越先进,漏电管理越头疼。

具体到6T单元里,漏电路径是这样的:

  • 当Q=1, QB=0时:M2(上拉管)和M4(下拉管)都关断,但电流从VDD通过M2漏到Q,再从Q通过M5漏到BL。
  • 反过来,Q=0, QB=1时:M1和M3关断,电流从VDD通过M3漏到QB,再从QB通过M6漏到BLB。

你想想看,一个寄存器堆有成千上万个这样的单元。每个单元都在漏,加起来就是毫瓦级的功耗。对于电池供电的设备来说,这简直是灾难。

降低漏电的常用手段:

  • 电源门控(Power Gating):不用的时候直接把VDD切断。我习惯用高阈值电压的sleep transistor。
  • 多阈值电压设计:关键路径用低阈值(快但漏电大),非关键路径用高阈值(慢但漏电小)。
  • 体偏置(Body Biasing):反向偏置提高阈值电压,降低亚阈值漏电。

嗯,说到体偏置,我记得有一次在40nm项目里,我们用了反向体偏置,漏电降了40%多,但代价是速度慢了15%。所以低功耗设计永远是平衡的艺术。

最后总结一下:6T SRAM单元是寄存器堆的细胞。理解它的结构,你就能看懂读写操作;理解漏电路径,你就能找到降低功耗的突破口。下一节我们会聊寄存器堆的阵列架构,到时候这些知识都会用上。

再提醒一句:千万别小看漏电流。我见过一个团队,功能仿真全过,流片回来发现待机功耗超标3倍。查了两个月,最后发现是SRAM单元的漏电模型没选对。教训深刻啊。

可可精品资料库