2、基本存储单元结构:6T SRAM单元结构、读写操作原理、漏电流路径分析
好,我们直接进入正题。
寄存器堆,说白了就是一堆SRAM单元排排坐。你想想看,CPU里那么多寄存器,每个bit都得有个地方存着。这个“地方”,就是6T SRAM单元。我做了这么多年低功耗设计,可以负责任地告诉你:理解这个单元,是理解寄存器堆功耗的基石。
2.1 6T SRAM单元结构
6T,顾名思义,六个晶体管。哪六个?两个交叉耦合的反相器,再加两个传输管。
我画个简图帮你理解:
这个结构,我习惯叫它“跷跷板”。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单元里主要有三条漏电路径:
- 亚阈值漏电(Subthreshold Leakage):晶体管关不断,电流从Drain溜到Source。这是最主要的漏电来源。
- 栅极漏电(Gate Leakage):栅氧化层太薄,电子直接隧穿过去。先进工艺下这个越来越严重。
- 结漏电(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单元的漏电模型没选对。教训深刻啊。
可可精品资料库