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的引脚数有限,如果地址线全部分开,封装成本就上去了。
具体流程是这样的:
- 行地址选通(RAS#):先把行地址送到地址引脚,然后拉低RAS#信号。DRAM内部锁存行地址,并激活对应的字线。
- 列地址选通(CAS#):再把列地址送到地址引脚,然后拉低CAS#信号。DRAM内部锁存列地址,并选通对应的位线。
- 读写操作:行和列都选通后,对应的存储单元就连接到了数据总线,可以进行读写。
这里有个细节:行地址选通后,整行的数据都会被读到感测放大器(Sense Amplifier)中。感测放大器是个关键模块,它负责检测位线上微弱的电压变化,并放大到逻辑电平。我当年在逆向一颗DRAM时,发现感测放大器占了芯片面积的很大一部分——大概15%左右。这玩意儿设计得好不好,直接决定了DRAM的读写速度。
核心逻辑:行地址决定哪一行被激活,列地址决定这一行中的哪一列被访问。行和列的交点,就是你要找的存储单元。
在逆向分析时,怎么找到行地址和列地址的边界?我建议你观察地址引脚的数量和DRAM的容量。比如一颗1Gb的DRAM,地址引脚是15根(A0-A14),那行地址可能是8位,列地址可能是7位。具体怎么分,要看芯片的设计手册。如果没有手册,那就只能通过实验来测——给不同的地址组合,看输出数据的变化规律。
这张图展示了DRAM存储阵列的基本结构。行地址译码器选通字线,列地址译码器选通位线,感测放大器负责检测和放大信号。每个交叉点就是一个1T1C存储单元。
好了,DRAM的基本结构就聊到这儿。记住三个核心:1T1C单元省面积、电容漏电要刷新、地址分时复用。下次你拿到一颗芯片,看到密集的阵列和感测放大器,基本就能判断是DRAM了。
公众号:蓝海资料掘金营,微信deep3321