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 控制逻辑与时序

控制逻辑,是整个存储器的“大脑”。它负责协调各个外围电路的工作。

一个典型的读操作时序是这样的:

  1. 地址信号稳定后,控制逻辑使能行译码器。
  2. 行译码器选中字线,存储单元开始向位线放电。
  3. 等待一段时间(建立时间),控制逻辑使能灵敏放大器。
  4. 灵敏放大器放大信号,输出数据。
  5. 控制逻辑复位所有信号,准备下一次操作。

这里面的“等待时间”非常关键。等太短,信号没建立好,读错数据。等太长,性能下降。

我的做法: 我一般会在仿真里,把时序参数设成变量。然后跑一遍PVT(工艺、电压、温度)仿真,看看最差情况下的时序裕量。这样心里才有底。

为了让你更直观地理解整个存储器的架构,我画了一张结构图:

存储器芯片架构总览 存储阵列 (Memory Array) 6T SRAM Cell 1T1C DRAM Cell NAND Flash String 行译码器 Row Decoder 列译码器 Column Decoder 灵敏放大器 Sense Amplifier 写驱动 Write Driver 控制逻辑与时序 Control Logic & Timing Word Line Bit Line 图例: 存储阵列 译码器 读写电路 控制逻辑 控制信号

这张图把整个存储器的架构串起来了。你从左边看,地址进来,行译码器选中一行。存储阵列里的单元,通过位线连接到列译码器。列译码器再选通到灵敏放大器或写驱动。所有的操作,都由控制逻辑统一调度。

嗯,这就是存储器芯片的骨架。理解了这些,你再看具体的芯片手册,就会觉得清晰很多。


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