3、DRAM基础:存储单元结构、刷新机制与SRAM对比

各位同学,今天我们聊聊DRAM。说实话,DRAM这东西,我入行头三年都没真正搞懂它为什么非得“刷新”。直到有一次,我在一个内存控制器项目里,因为刷新时序没算好,导致系统在高温下频繁丢数据……嗯,从那以后,我对DRAM的每一个电容都充满了敬畏。

3.1 1T1C存储单元:一个晶体管加一个电容

DRAM的核心存储单元,说白了就是一个晶体管加一个电容。你想想看,就两个器件,存一个bit。这结构简单得令人发指,但问题也出在这里。

为什么叫1T1C?

  • 1个晶体管(MOSFET):充当开关,控制电容的充放电。
  • 1个电容:存储电荷,电荷量代表逻辑“1”或“0”。

我画个简图帮你理解:

字线 (WL) 位线 (BL) MOS C GND 1T1C DRAM存储单元

你看,当字线(WL)拉高时,晶体管导通,位线(BL)上的数据就能写入电容,或者从电容读出来。读的时候,电容上的电荷会通过位线释放,产生一个微小的电压变化。这个变化有多小?我告诉你,大概只有200mV左右。你想想看,在1.8V的电压域里,200mV的摆幅,噪声稍微大一点就误判了。

关键点:DRAM读操作是破坏性读取。什么意思?就是你读一次,电容里的电荷就没了。所以读完之后必须立刻写回去,这叫“读后重写”。我当年第一次仿真时没注意这个,结果读一次数据就丢了,排查了整整两天。

3.2 DRAM刷新机制:为什么必须“续命”

DRAM的电容会漏电,这是物理规律。你存进去的电荷,过一段时间就跑光了。所以DRAM必须定期刷新——说白了就是每隔一段时间,把每个存储单元的数据读出来,再写回去,把电荷补满。

刷新参数:

参数 典型值 说明
tREF 64ms 所有行必须在64ms内刷新一次
tRFC 350ns(DDR4) 一次刷新操作所需时间
刷新行数 8192行 64ms内完成8192次刷新

计算一下:64ms / 8192 = 7.8μs。也就是说,每7.8微秒就得刷一行。这个时间窗口,在高速系统里非常紧张。我做过一个DDR4控制器,刷新请求来了,如果正在读数据,就得等。等久了,下一行就超时了。所以刷新优先级的设计,是个很讲究的活。

我的经验:在高温环境下(比如85°C以上),漏电会加剧。有些工业级芯片会把刷新周期缩短到32ms甚至16ms。设计时一定要留余量,别卡着64ms的极限算。

刷新方式有三种:

  1. 自动刷新(Auto Refresh):由DRAM内部的行地址计数器控制,外部只需要发刷新命令。这是最常用的方式。
  2. 自刷新(Self Refresh):DRAM进入低功耗模式,内部自己定时刷新。适合休眠场景。
  3. 由控制器逐行刷新:控制器自己管理行地址,逐行发激活+预充电。这种方式灵活性高,但控制器设计复杂。

我个人习惯用自动刷新,省心。但如果你在做低功耗设计,自刷新是必须的。我记得有个项目,待机功耗要求低于1mW,自刷新帮了大忙。

3.3 DRAM vs SRAM:一场关于速度与容量的博弈

很多初学者会问:为什么不用SRAM做内存?答案很简单:贵,而且密度低。

我直接给你看对比:

对比项 DRAM SRAM
存储单元 1T1C(1个晶体管+1个电容) 6T(6个晶体管,锁存器结构)
存储密度 高(同样面积,容量是SRAM的4~6倍)
访问速度 慢(50~70ns,需要刷新) 快(1~10ns,无需刷新)
功耗 需要刷新,动态功耗高 静态功耗低,但漏电随工艺增大
成本 低(每bit成本低) 高(每bit成本高)
易失性 是(断电丢失) 是(断电丢失)

你想想看,一个SRAM单元要6个晶体管,DRAM只要1个。同样1平方毫米的面积,DRAM能塞下几十兆bit,SRAM可能只有几兆。这就是为什么你的电脑内存是DRAM,而CPU缓存是SRAM。

避坑指南:我曾经在一个SoC项目里,把SRAM当DRAM用,想省掉刷新逻辑。结果发现SRAM的漏电在28nm工艺下大得惊人,待机功耗根本压不住。后来还是老老实实用了DRAM加自刷新模式。所以,选型时别只看速度,功耗和面积都要算清楚。

什么时候用DRAM?

  • 需要大容量(几百MB到几十GB)
  • 对成本敏感
  • 可以接受几十纳秒的延迟
  • 有专门的刷新控制器

什么时候用SRAM?

  • 需要极低延迟(比如CPU缓存、寄存器文件)
  • 容量小(几KB到几MB)
  • 不想处理刷新逻辑
  • 对功耗有严格限制(但要注意漏电)

嗯,DRAM的基础就这些。说白了,1T1C结构成就了它的高密度和低成本,但也带来了刷新这个“麻烦”。而SRAM用6个晶体管换来了速度和简单性,代价是面积和成本。两者各有千秋,关键看你的应用场景。


专注资料整理