2、存储器芯片架构:存储阵列架构与外围电路
大家好,我是你们的讲师。今天我们来聊聊存储器芯片的架构。说实话,这部分内容是我个人觉得最“硬核”的。你想想看,一颗芯片里动辄几亿甚至几十亿个存储单元,它们是怎么组织起来的?外围电路又是怎么协同工作的?嗯,我们一步步拆解。
2.1 存储阵列架构:三种核心存储单元
存储阵列,说白了就是存储单元的“集合体”。不同的存储器类型,用的单元结构完全不同。我做过好几个项目,每种单元都有它的脾气。
2.1.1 6T SRAM Cell
SRAM,静态随机存取存储器。它的核心是“6T”,也就是6个晶体管构成一个存储位。这6个管子,4个组成两个交叉耦合的反相器(锁存器),2个是访问管。
关键特性:
- 速度快: 这是它的最大优势。因为是用锁存器存储数据,不需要刷新。
- 面积大: 6个晶体管,占地方。所以SRAM容量做不大,通常用在CPU缓存里。
- 静态功耗: 有漏电,但动态功耗相对较低。
我在项目中遇到过一个问题:SRAM的“读干扰”。读操作时,如果位线电压没控制好,可能会把存储的数据给翻转了。嗯,这就要靠灵敏放大器来帮忙了,我们后面会讲。
2.1.2 1T1C DRAM Cell
DRAM,动态随机存取存储器。它的结构更简单:1个晶体管 + 1个电容。所以叫1T1C。
为什么会叫“动态”?因为电容会漏电。数据存进去,过一会儿就没了。所以必须定期“刷新”。
个人经验: 我建议你在设计DRAM控制器时,一定要把刷新逻辑想清楚。我曾经因为刷新时序没算好,导致数据丢失,查了整整两天才找到问题。说白了,就是刷新请求和读写请求冲突了。
DRAM的容量可以做得很大,成本低。但速度比SRAM慢不少。你想想看,每次读数据,都要先把电容上的电荷转移到位线上,这个过程很慢。
2.1.3 NAND Flash String
NAND Flash,非易失性存储器。它的存储单元是浮栅晶体管。多个这样的晶体管串在一起,形成一个“串”(String)。
一个典型的NAND Flash String,有32个、64个甚至128个存储单元串联。为什么这么干?为了节省面积。你想想看,如果每个单元都单独拉一根位线,那芯片得有多大?
注意: NAND Flash的读写是以“页”为单位的,擦除以“块”为单位。这个特性决定了它的使用方式。我见过不少新手,把NAND Flash当RAM用,结果写几次就坏了。嗯,这是不对的。
为了让你更直观地理解这三种存储单元的区别,我画了一张对比表:
| 特性 | 6T SRAM | 1T1C DRAM | NAND Flash |
|---|---|---|---|
| 存储元件 | 6个晶体管 | 1晶体管+1电容 | 浮栅晶体管 |
| 易失性 | 易失(掉电丢失) | 易失(需刷新) | 非易失 |
| 速度 | 最快(~1ns) | 较快(~10ns) | 慢(~10μs读,~1ms写) |
| 密度 | 低 | 高 | 极高 |
| 典型应用 | CPU Cache | 主存 | SSD、U盘 |
2.2 外围电路:让存储单元“活”起来
光有存储单元不行,你得能“找到”它、“读”它、“写”它。这就是外围电路的工作。
2.2.1 行译码器与列译码器
行译码器,负责选择“行”(Word Line)。列译码器,负责选择“列”(Bit Line)。
举个例子:一个1Kb的SRAM,有32行、32列。你想访问第10行、第20列的单元。行译码器会把第10行的字线拉高,列译码器会把第20列的位线连接到数据总线上。
我个人习惯,在设计译码器时,会特别注意“竞争”问题。如果译码速度太慢,可能会导致多个字线同时被选中,那就乱套了。
2.2.2 灵敏放大器
这个电路,我称之为“存储器的灵魂”。
你想想看,读一个SRAM单元时,位线上的电压差可能只有几十毫伏。这么小的信号,你怎么判断是“0”还是“1”?
灵敏放大器就是干这个的。它能把微小的电压差放大到满摆幅的0或1。
避坑指南: 我曾经在设计DRAM的灵敏放大器时,忽略了失调电压。结果读出来的数据,有一半是错的。嗯,从那以后,我每次都会在仿真里加入蒙特卡洛分析,看看放大器的匹配性好不好。
2.2.3 写驱动
写驱动,负责把数据“灌”进存储单元。
写SRAM时,你需要强驱动能力,把锁存器的状态强行翻转。写DRAM时,你需要把电容充到正确的电压。写NAND Flash时,你需要用隧道效应把电子注入浮栅。
不同的存储器,写驱动的设计思路完全不同。我建议你,在设计之前,先搞清楚存储单元的“写入机理”。
2.3 控制逻辑与时序
控制逻辑,是整个存储器的“大脑”。它负责协调各个外围电路的工作。
一个典型的读操作时序是这样的:
- 地址信号稳定后,控制逻辑使能行译码器。
- 行译码器选中字线,存储单元开始向位线放电。
- 等待一段时间(建立时间),控制逻辑使能灵敏放大器。
- 灵敏放大器放大信号,输出数据。
- 控制逻辑复位所有信号,准备下一次操作。
这里面的“等待时间”非常关键。等太短,信号没建立好,读错数据。等太长,性能下降。
我的做法: 我一般会在仿真里,把时序参数设成变量。然后跑一遍PVT(工艺、电压、温度)仿真,看看最差情况下的时序裕量。这样心里才有底。
为了让你更直观地理解整个存储器的架构,我画了一张结构图:
这张图把整个存储器的架构串起来了。你从左边看,地址进来,行译码器选中一行。存储阵列里的单元,通过位线连接到列译码器。列译码器再选通到灵敏放大器或写驱动。所有的操作,都由控制逻辑统一调度。
嗯,这就是存储器芯片的骨架。理解了这些,你再看具体的芯片手册,就会觉得清晰很多。
公众号:蓝海资料掘金营,微信deep3321