3、DRAM基本结构:1T1C单元结构、电容存储原理、刷新机制与行/列地址选通

好,咱们今天聊聊DRAM。说实话,在逆向工程里,DRAM的识别是个绕不开的坎儿。你拆开一颗芯片,看到密密麻麻的存储阵列,怎么判断它是SRAM还是DRAM?关键就看单元结构。

3.1 1T1C单元结构:为什么能这么省面积?

DRAM的核心存储单元,就是1T1C——一个晶体管加一个电容。你想想看,SRAM一个单元要6个晶体管,DRAM只要1个,面积直接缩到六分之一。这也是为什么DRAM能做成Gb级别,而SRAM通常只有Mb级别。

我当年第一次在显微镜下看到DRAM阵列时,说实话挺震撼的。那种规则的、密集的排列,每个单元就是一个晶体管和一个电容的串联。晶体管负责开关,电容负责存电荷。

关键点:1T1C单元中,晶体管的栅极接字线(Word Line, WL),漏极接位线(Bit Line, BL),源极接存储电容。字线选通时,晶体管导通,电容与位线连通,实现读写。

这里有个坑要注意——电容的极板。在DRAM中,电容的下极板通常接一个参考电压(一般是Vdd/2),上极板接晶体管的源极。我见过不少新手在逆向时,把电容的上下极板搞反,结果整个存储阵列的逻辑全乱了。

3.2 电容存储原理:电荷去哪儿了?

DRAM存储数据,说白了就是电容里有没有电荷。有电荷代表逻辑1,没电荷代表逻辑0。但问题来了——电容会漏电。

为什么会漏电?因为晶体管在关断状态下,仍然有微弱的漏电流。这个漏电流会慢慢把电容里的电荷放掉。我做过测试,一个典型的DRAM电容,电荷保持时间大概在几十毫秒到几百毫秒之间。也就是说,你刚写进去的数据,过一会儿就没了。

嗯,这里要注意:DRAM电容的容值通常只有几十飞法(fF)。你想想看,这么小的电容,存的那点电荷,稍微有点漏电就没了。所以DRAM必须定期刷新。

参数 典型值 说明
存储电容容值 30-50 fF 深亚微米工艺下更小
保持时间 64 ms JEDEC标准规定
漏电流 1-10 fA 随温度升高而增大
读操作破坏性 读后必须重写

避坑指南:我曾经在逆向一颗老款DRAM时,发现存储阵列的电容结构很奇怪——不是传统的平板电容,而是沟槽电容(Trench Capacitor)。当时差点以为是新型存储技术,后来查资料才知道,早期DRAM为了节省面积,把电容做在硅衬底的沟槽里。如果你在芯片上看到深挖的沟槽结构,大概率就是DRAM。

3.3 刷新机制:为什么必须64ms刷一次?

刷新,说白了就是定期给电容补电。JEDEC标准规定,DRAM必须在64ms内完成所有行的刷新。为什么是64ms?这是综合考虑了电容漏电、温度变化和工艺偏差后的折中值。

我个人习惯把刷新分为两种:

  • 自动刷新(Auto Refresh):由DRAM内部的状态机控制,定时发起刷新操作。你只需要给个刷新命令就行。
  • 自刷新(Self Refresh):DRAM进入低功耗模式后,自己内部定时刷新。这时候外部时钟可以停掉。

在逆向分析时,怎么判断芯片是否支持自刷新?看控制逻辑里有没有自刷新定时器。我遇到过一颗芯片,它的自刷新定时器是用环形振荡器实现的,频率随温度和电压变化很大。这种设计在高温下容易出问题——刷新间隔变长,数据就丢了。

小技巧:在逆向DRAM控制逻辑时,可以找找有没有一个计数器,它的溢出周期大约是64ms除以行数。比如1024行,那计数器的溢出周期就是62.5μs。这个计数器就是刷新定时器。

3.4 行/列地址选通:怎么找到你要的单元?

DRAM的地址是分时复用的——先送行地址,再送列地址。为什么这么设计?因为DRAM的引脚数有限,如果地址线全部分开,封装成本就上去了。

具体流程是这样的:

  1. 行地址选通(RAS#):先把行地址送到地址引脚,然后拉低RAS#信号。DRAM内部锁存行地址,并激活对应的字线。
  2. 列地址选通(CAS#):再把列地址送到地址引脚,然后拉低CAS#信号。DRAM内部锁存列地址,并选通对应的位线。
  3. 读写操作:行和列都选通后,对应的存储单元就连接到了数据总线,可以进行读写。

这里有个细节:行地址选通后,整行的数据都会被读到感测放大器(Sense Amplifier)中。感测放大器是个关键模块,它负责检测位线上微弱的电压变化,并放大到逻辑电平。我当年在逆向一颗DRAM时,发现感测放大器占了芯片面积的很大一部分——大概15%左右。这玩意儿设计得好不好,直接决定了DRAM的读写速度。

核心逻辑:行地址决定哪一行被激活,列地址决定这一行中的哪一列被访问。行和列的交点,就是你要找的存储单元。

在逆向分析时,怎么找到行地址和列地址的边界?我建议你观察地址引脚的数量和DRAM的容量。比如一颗1Gb的DRAM,地址引脚是15根(A0-A14),那行地址可能是8位,列地址可能是7位。具体怎么分,要看芯片的设计手册。如果没有手册,那就只能通过实验来测——给不同的地址组合,看输出数据的变化规律。

DRAM存储阵列结构图 存储阵列 (Memory Array) 行地址译码器 列地址译码器 感测放大器 WL0 WL1 WLn BL0 BL1 BLm T T T T 地址输入 数据输出

这张图展示了DRAM存储阵列的基本结构。行地址译码器选通字线,列地址译码器选通位线,感测放大器负责检测和放大信号。每个交叉点就是一个1T1C存储单元。

好了,DRAM的基本结构就聊到这儿。记住三个核心:1T1C单元省面积、电容漏电要刷新、地址分时复用。下次你拿到一颗芯片,看到密集的阵列和感测放大器,基本就能判断是DRAM了。


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