存储介质基础(上):SRAM、DRAM与NAND Flash的原理与特性

各位同学,今天咱们聊聊存储介质。说白了,就是芯片里那些“存数据”的单元到底是怎么工作的。

我做了十几年芯片架构,接触过各种各样的存储方案。说实话,很多系统性能瓶颈,最后都卡在存储上。你处理器再快,数据拿不出来,白搭。

所以,理解SRAM、DRAM、NAND Flash这三种最基础的介质,是咱们做多芯片存储系统设计的必修课。今天先讲上半部分,把原理和特性吃透。

一、SRAM:静态随机存取存储器

SRAM,全称Static Random-Access Memory。静态,意味着它不需要像DRAM那样不断刷新。随机存取,就是你可以随时访问任意地址。

工作原理

SRAM的存储单元,通常由6个晶体管组成(6T结构)。这6个管子构成一个双稳态触发器。你想想看,两个反相器交叉耦合,要么输出高电平,要么输出低电平。只要不断电,这个状态就能一直保持。

我当年做第一颗CPU时,对SRAM的稳定性印象特别深。它不像DRAM那样需要电容来存电荷,所以抗干扰能力强很多。

核心特性:

  • 速度快:访问延迟通常在1-5ns级别
  • 功耗高:6个晶体管一直处于导通或截止状态,静态功耗不小
  • 面积大:一个bit需要6个晶体管,密度低
  • 无需刷新:数据保持简单

实际应用场景

SRAM主要用在CPU的Cache里。L1 Cache、L2 Cache,基本都是SRAM。为什么?因为快。处理器等不起DRAM那几十ns的延迟。

不过,SRAM也有个让人头疼的问题——漏电。随着工艺节点缩小,漏电流越来越严重。我记得有一次做7nm芯片,SRAM的静态功耗占了整个芯片的30%以上。嗯,这问题到现在也没完全解决。

个人经验:做多芯片系统时,SRAM通常放在离处理器最近的位置。我习惯把最热的数据放在L1 SRAM里,次热的放L2。别把所有SRAM都堆在一个地方,分布式布局能有效降低布线延迟。

二、DRAM:动态随机存取存储器

DRAM,Dynamic Random-Access Memory。动态,意味着它需要不断刷新,否则数据会丢失。

工作原理

DRAM的存储单元更简单——1个晶体管加1个电容(1T1C结构)。电容存电荷,晶体管控制读写。有电荷代表1,没电荷代表0。

但问题来了:电容会漏电。电荷慢慢跑掉,数据就没了。所以DRAM需要定期刷新,一般每64ms刷新一次。这就是“动态”的由来。

我刚开始做存储系统时,对刷新这事不太在意。结果有一次,系统跑着跑着突然出现随机数据错误。排查了三天,最后发现是刷新时序没处理好。从那以后,我再也不敢小看DRAM的刷新机制了。

核心特性:

  • 密度高:1个bit只需要1个晶体管+1个电容,成本低
  • 速度中等:访问延迟约50-100ns
  • 需要刷新:刷新操作会占用带宽
  • 功耗相对较低:但刷新也有功耗

实际应用场景

DRAM就是咱们常说的内存条。DDR4、DDR5、LPDDR这些,都是DRAM的变种。在服务器里,DRAM容量可以做到几百GB甚至TB级别。

做多芯片系统时,DRAM通常作为主存。处理器和SRAM之间速度很快,但容量有限。DRAM正好填补这个空白——容量大、成本低、速度也能接受。

避坑指南:我曾经遇到过DRAM的“行锤效应”(Row Hammer)。频繁访问某一行,会导致相邻行的数据出错。这在多芯片系统中尤其危险,因为多个处理器可能同时访问DRAM。解决方案?要么用ECC内存,要么在控制器层面做行锤防护。

三、NAND Flash:非易失性闪存

NAND Flash,Non-Volatile Flash。非易失,意味着断电后数据不丢失。这是它和SRAM、DRAM最大的区别。

工作原理

NAND Flash的存储单元是一个浮栅晶体管。浮栅被绝缘层包围,可以存储电荷。写入时,通过隧穿效应把电子注入浮栅;擦除时,把电子拉出来。

浮栅里有电子,代表0;没电子,代表1。嗯,这里要注意,NAND Flash的初始状态是1,写入操作是把1变成0。

我刚开始接触NAND Flash时,最不习惯的就是它的操作方式。不能像SRAM那样按字节读写,必须按页(Page)读写,按块(Block)擦除。这设计思路完全不同。

核心特性:

  • 非易失性:断电后数据保留
  • 密度极高:一个芯片可以做到TB级别
  • 速度慢:读延迟约50-100μs,写延迟约200-500μs
  • 寿命有限:每个存储单元有擦写次数限制(SLC约10万次,MLC约1万次,TLC约3000次)
  • 需要坏块管理:出厂就有坏块,使用中还会产生新坏块

实际应用场景

NAND Flash就是SSD、U盘、手机存储的核心。在多芯片系统中,它通常作为持久化存储层。

举个例子,一个典型的服务器存储层次是这样的:SRAM(Cache)→ DRAM(主存)→ NAND Flash(SSD)→ 硬盘。越往左速度越快,越往右容量越大。

个人经验:做多芯片系统时,NAND Flash的写入放大问题要特别关注。你写一个4KB的数据,可能触发一个256KB的块擦除操作。我建议在软件层面做写合并,把零散的小写入合并成大写入,能显著延长SSD寿命。

三种介质的对比

特性 SRAM DRAM NAND Flash
易失性 易失 易失 非易失
读延迟 1-5ns 50-100ns 50-100μs
写延迟 1-5ns 50-100ns 200-500μs
密度
成本/bit
寿命 无限 无限 有限
刷新需求

看到这个表格,你应该能理解为什么多芯片系统要分层设计了吧?没有一种存储介质能同时满足快、大、便宜、持久这四个要求。所以,咱们得组合使用。

好了,今天先讲到这里。SRAM、DRAM、NAND Flash的原理和特性,是后续所有设计的基础。下一节,我会讲它们在实际系统中的接口和时序控制,那才是真正动手的地方。

记住一句话:存储系统的设计,本质上是在延迟、容量、成本、功耗之间做权衡。没有完美的方案,只有最适合的方案。