2、SRAM原理与设计:6T SRAM单元结构、读写操作原理、SRAM阵列组织、SRAM时序参数

各位同学,今天我们来聊聊SRAM。说实话,SRAM是芯片设计里最基础也最绕不开的存储单元。你做大模型芯片,无论是做计算阵列的本地缓存,还是做片上的共享存储,都离不开它。我个人习惯把SRAM比作芯片的「便签纸」——速度快,但容量做不大,而且贵。

好,我们直接进入正题。

2.1 6T SRAM单元结构

为什么叫6T?因为一个存储单元用了6个晶体管。你想想看,这6个管子是怎么分工的?

核心是两个交叉耦合的反相器,构成一个锁存器。说白了,就是两个反相器首尾相接,形成一个正反馈环路。这个环路能稳定地存储一个比特——要么是0,要么是1。

另外四个管子呢?两个是访问管(也叫传输管),用来控制读写。还有两个是负载管,通常是PMOS,用来上拉。

我画个简图帮你理解:

        VDD
         |
        M2 (PMOS)
         |
   BL --- M5 --- Q --- M6 --- BLB
         |           |
        M1 (NMOS)   M3 (NMOS)
         |           |
        GND         GND

这里Q和QB是存储节点,BL和BLB是位线。M5和M6是访问管,由字线WL控制。

关键点:6T单元是静态存储,不需要刷新。这是它和DRAM最大的区别。我在项目中遇到过有人把SRAM当DRAM用,结果数据丢了——嗯,那是另一回事了。

2.2 读写操作原理

读操作和写操作,原理完全不同。我分开讲。

读操作

读的时候,先把BL和BLB预充到VDD。然后拉高WL,打开M5和M6。

假设Q存的是0,QB是1。那么BL通过M5和M1放电,电压下降。BLB保持高电平。差分放大器检测到BL和BLB的电压差,输出0。

这里有个坑:读操作不能破坏存储的数据。如果BL放电太快,可能会把Q从0翻转到1。这就是读干扰问题。

避坑指南:我曾经设计过一个SRAM,读操作时单元翻转了。查了半天,发现是M1和M5的尺寸比例不对。记住,M1的驱动能力要远大于M5,才能保证读稳定性。

写操作

写操作正好相反。你要强行把数据写进去。

比如要写0,就把BL拉到0,BLB拉到1。然后拉高WL。这时候,BL通过M5强行把Q拉到0,BLB通过M6把QB拉到1。即使原来存的是1,也会被强行改写。

写操作的关键是:访问管要足够强,能压倒反相器的反馈。所以M5和M6的尺寸要比读操作时大一些。

我个人的经验是:写操作比读操作容易出问题。尤其是写1的时候,如果BLB的驱动能力不够,可能写不进去。

2.3 SRAM阵列组织

单个6T单元只能存1比特。实际芯片里,我们需要成千上万个单元组成阵列。

阵列的组织方式,说白了就是行和列。行由字线WL控制,列由位线BL/BLB控制。

举个例子:一个8Kb的SRAM,可以组织成256行×32列。每行256个字线,每列32个位线对。

我画个阵列结构图:

SRAM阵列组织结构 行译码器 存储单元阵列 (256行 × 32列) 列选择器 字线 (WL) 水平方向,位线 (BL/BLB) 垂直方向

阵列外围还需要一些辅助电路:

  • 行译码器:把行地址翻译成具体的字线选择信号
  • 列选择器:从32列中选出要读写的列
  • 灵敏放大器:检测位线上的微小电压差,放大成逻辑电平
  • 写驱动:提供足够的电流来写入数据

我记得第一次设计SRAM阵列时,忽略了灵敏放大器的布局位置,结果版图走线太长,读速度上不去。后来把灵敏放大器放在阵列中间,才解决问题。

2.4 SRAM时序参数

做芯片设计,时序参数是绕不开的。SRAM的时序参数,说白了就是告诉你:从你发出命令到数据出来,需要等多久。

几个关键参数:

参数 含义 典型值(28nm)
tAA 地址访问时间:从地址变化到数据输出 0.5-1.5 ns
tRC 读周期时间:两次连续读操作的最小间隔 1-2 ns
tWC 写周期时间:两次连续写操作的最小间隔 1-2 ns
tAS 地址建立时间:地址在写使能前必须稳定的时间 0.2-0.5 ns
tAH 地址保持时间:写使能后地址必须保持的时间 0.2-0.5 ns
tWP 写脉冲宽度:写使能信号的最小宽度 0.5-1 ns

小技巧:做大模型芯片时,SRAM的时序参数直接影响计算单元的流水线设计。我一般会留20%的时序裕量,因为PVT(工艺、电压、温度)变化会让实际速度变慢。

还有一个参数容易被忽略——功耗。SRAM的功耗分为动态功耗和静态功耗。动态功耗来自读写操作时的充放电,静态功耗来自漏电流。

在先进工艺下,静态功耗越来越严重。28nm以下,漏电流可能占到总功耗的30%以上。我做过一个项目,芯片待机时SRAM漏电占了芯片总功耗的一半——嗯,那是个惨痛的教训。

降低漏电的方法:

  • 使用高阈值电压的晶体管(但速度会变慢)
  • 电源门控(不用时关掉电源)
  • 数据保持电压(降低待机电压,但保持数据不丢)

好了,SRAM的原理和设计就讲到这里。记住,6T单元是基础,读写操作要理解电流路径,阵列组织要考虑布局布线,时序参数要留裕量。这些知识点,后面讲大模型芯片的存储层次时都会用到。


公众号:蓝海资料掘金营,微信deep3321