声明1. 本文是博主学习《高手进阶,终极内存技术指南》一文时所记录的学习笔记,文中内容和图片大部分来源于此文。
声明2. 本文所用到的SDRAM学习资料下载链接,感谢硬汉哥!
文章目录
一、 SDRAM内存模组与基本结构
SDRAM全称Synchronous Dynamic Random Access Memory,即同步动态随机存储器,其中有三个关键词:
- 同步:指其时钟频率域CPU总线的系统时钟频率相同;
- 动态:指SDRAM存储阵列需要不断的刷新来保持数据不丢失;
- 随机:指数据不是线性依次存储,而是自由的指定地址进行数据的读写;
1. 物理Bank
在传统内存系统中,内存的数据总线位宽称为物理Bank(Physical Bank,P-Bank)的位宽,一般等于CPU数据总线的位宽。
2. SDRAM芯片位宽
SDRAM芯片有自己的位宽,即每个周期能传输的最大数据宽度。一片SDRAM的芯片通常是 8 bit 或者 16 bit 数据位宽,所以通常使用的都是由多片SDRAM组合而成的SDRAM内存模组。
比如要组合64 bit位宽的内存条,则需要4片16bit的SDRAM芯片,表示为 4x16bit。
二、 SDRAM内存芯片的内部结构
本节我以SDRAM芯片 W9825G6KH 为例,学习SDRAM内存芯片的内部结构。(Datasheet)
1. 逻辑Bank与芯片位宽
SDRAM内部是一个存储阵列,如同一张表格,访问某一个内存地址的时候:先指定行地址、再指定列地址,就能轻松的做到随机访问。
这张表格就称之为SDRAM的一个逻辑Bank(L-Bank)。
随着SDRAM容量的增大,一个逻辑Bank不能无限制的增大,在一定程度之后会造成严重的寻址冲突、大幅降低内存效率。
所以人们在SDRAM中分割出多个逻辑Bank,一般都是4个,是SDRAM规范中最高的L-Bank数量。
这样,在寻找某一个存储单元的时候,流程变为:
- 发出L-Bank地址
- 发出行地址
- 发出列地址
在寻找到某一个存储单元的之后方可进行读取或者写入的操作,所以:SDRAM芯片的数据位宽 = 一个存储单元的数据位宽。
☆ 知识点1:
在拿到一块SDRAM芯片时,首先要搞清楚芯片的存储容量、位宽、Bank数。
比如 W9825G6KH,在数据手册中查到其规格为:4M word x 4 banks x 16bits
,表示该SDRAM的规格为:
- 每个L-BANK有4M 个存储单元;
- 每个存储单元的大小是16bit;
- 芯片中一共有4个L-Bank;
最后得出该SDRAM芯片的容量为 32 MB。
2. SDRAM的引脚和封装
W9825G6KH 芯片的引脚封装如下:
每个引脚的描述如下:
引脚编号 | 引脚名称 | 功能 | 描述 |
---|---|---|---|
23-26、22、29-36 | A0-A12 | 地址线 | 行地址线:A0-A12,列地址线A0-A8 |
20、21 | BS0、BS1 | BANK选择线 | 选中哪个L-BANK被激活 |
2、4、5、7、8、10、11、13、42、44、45、47、48、50、51、53 | DQ0-DQ15 | 数据总线 | 数据输入/数据输出 |
19 | CS# | 片选信号 | 禁止/使能芯片内部的命令解析器 |
18 | RAS# | 行地址选通脉冲 | 命令输入。在时钟上升沿采样的时候,RAS、CAS、WE决定了要执行的操作 |
17 | CAS# | 列地址选通脉冲 | |
16 | WE# | 写使能 | |
15、39 | LDQM、UDQM | 数据掩码 | |
38 | CLK | 时钟输入 | 提供系统时钟,在时钟上升沿采样输入数据 |
37 | CKE | 时钟使能 | CKE控制时钟是否使能,低电平时SDRAM进入掉电模式 |
1、14、27 | VDD | 电源 | |
28、41、54 | VSS | 地 | |
3、9、43、49 | VDDQ | 电源 | 与VDD分离,改进DQ噪声 |
6、12、46、52 | VSSQ | 地 | 与VSS分离,改进DQ噪声 |
40 | NC | 无连接 |
3. SDRAM的内部操作与工作时序
3.1. 芯片上电和初始化
在SDRAM芯片内部有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数,每次开机时都SDRAM都要先对这个控制逻辑进行初始化。
设置模式寄存器的时序如图:
模式寄存器的值通过地址线提供:
设置模式寄存器之后,SDRAM就进入了正常工作状态。
3.2. 行有效
初始化完成之后,可以同时给定片选信号、L-Bank选择信号、以及地址数据,同时拉低RAS信号,表示地址线上是行地址。
时序如图:
3.3. 列有效与读写控制信号
地址线A0-A12是共用的,所以在行地址确定之后再给定列地址。拉低CAS信号,表示地址线上是行地址。
因为列地址给出之后就可以寻找到对应的存储单元,所以在给定列地址的时候,顺便可以给定读写控制信号,标明本次需要读数据还是写数据。
☆ 知识点2:
SDRAM需要搞清楚的第一个重要的时序参数:tRCD。
在发送列读写命令时必须要与行有效命令有一个延时,这个延时时间成为tRCD,即 RAS to CAS Delay。
tRCD一般以时钟周期(tCK,Clock Time)为单位,具体的时间需要根据时钟频率的值来定。
比如 W9825G6KH 的tRCD最小为15ns:
3.4. 读数据时序
SDRAM需要搞清楚的第二个重要的时序参数:CL。
在CAS行有效脉冲发出之后,需要经过一段时间,数据线上才能有数据输出,这段时间称为CL(CAS Latency,CAS潜伏期),单位是时钟周期。
需要注意,CL只在读取时出现,也称为读取潜伏期(RL,Read Latency)。
CL的值在模式寄存器中可配置:
3.5. 写数据时序
数据写入的操作也是在tRCD之后(给定列地址后)进行,时序如图:
SDRAM需要搞清楚的第三个重要的时序参数:tWR。
需要注意,虽然数据与CAS同时发送,但是由于电容的充电需要有一段时间,所以数据真正写入需要有一定的周期,为了保证数据真正被可靠的写入,都会留出足够的写入/校正时间(tWR,Write Recovery Time),这个操作也被称为写回。
3.6. 预充电
由于SDRAM的寻址具有独占性,所以在进行完读写操作后,如果要对同一L-Bank的另一行进行寻址,就要将原来有效的行关闭,重新发送行地址和列地址。
L-Bank关闭现有工作的行,准备打开新行的操作称为预充电(Precharge)。
预充电有两种方法:通过命令控制或者通过辅助设定让芯片在每次读写完之后自动预刷新。
① 自动预刷新
在之前读取/写入的时序图可以看到:A10表示允许/禁止自动预充电。
② 预充电命令
SDRAM需要搞清楚的第四个重要的时序参数:tRP。
在发出预充电命令之后,要经过一段时间才能允许RAS行有效命令打开新的工作行,这段间隔称为tPR(Precharge command Period,预充电有效周期),单位是时钟周期数。
3.7. 刷新
之所以称为DRAM,是因为它要不断的进行刷新(Refresh)才能保留住数据,因此它是DRAM最重要的操作。
SDRAM需要搞清楚的第五个重要的时序参数:刷新间隔。
目前公认的标准是,存储体中电容的数据有效保存期是64ms,也就是说每一行刷新的循环周期是64ms,这样刷新速度就是行数量/64ms。
比如 W9825G6KH 的参数为:8K Refresh Cycles/64ms
,其中 8K(8192) 就代表该芯片中每个L-Bank的行数。刷新命令每次只对一行有效,8K行时,发送间隔为:7.8125us。
另外一些比较常用的SDARM参数为:4096 Refresh Cycles/64ms
,表示一个L-Bank有 4096 行,发送间隔为15.625us。
刷新操作分为两种:自动刷新(Auto Refresh,AR)和自刷新(Self Refresh,SR)。
3.8. 数据掩码
为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,DQM)技术。
通过DQM,内存可以控制I/O端口取消哪些输入/输出的数据,每一根DMQ信号线对应控制一个字节。
比如 W9825G6KH 芯片是 16bit 位宽,所以有两条 DQM 信号线:LDQM和UDQM。
SDRAM官方规定,在读取时DQM发出两个时钟周期信号后生效,如图:
而写入时DMQ与写入命令一样立即生效: