SDRAM介绍和时序
参考:
SDRAM学习笔记(eg. W9825G6KH)
寻址
SDRAM内部是一个存储阵列,如同一张表格,访问某一个内存地址的时候,先指定行地址、再指定列地址,就能轻松的做到随机访问。
这张表格就称之为SDRAM的一个逻辑Bank(L-Bank)。
随着SDRAM容量的增大,一个逻辑Bank不能无限制的增大,在一定程度之后会造成严重的寻址冲突、大幅降低内存效率。
所以人们在SDRAM中分割出多个逻辑Bank,一般都是4个,是SDRAM规范中最高的L-Bank数量。
这样,在寻找某一个存储单元的时候,流程变为:
- 发出L-Bank地址
- 发出行地址
- 发出列地址
在寻找到某一个存储单元的之后方可进行读取或者写入的操作,所以:SDRAM芯片的数据位宽 = 一个存储单元的数据位宽。
在拿到一块SDRAM芯片时,首先要搞清楚芯片的存储容量、位宽、Bank数。
比如 W9825G6KH,在数据手册中查到其规格为:4M word x 4 banks x 16bits,表示该SDRAM的规格为:
每个L-BANK有4M 个存储单元;
每个存储单元的大小是16bit;
芯片中一共有4个L-Bank;
最后得出该SDRAM芯片的容量为 32 MB。
引脚和封装
内部操作与工作时序
芯片上电和初始化
在SDRAM芯片内部有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数,每次开机时都SDRAM都要先对这个控制逻辑进行初始化。
设置模式寄存器的时序如图:
模式寄存器的值通过地址线提供:
设置模式寄存器之后,SDRAM就进入了正常工作状态。
行有效
初始化完成之后,可以同时给定片选信号、L-Bank选择信号、以及地址数据,同时拉低RAS信号,表示地址线上是行地址。
时序如图:
列有效与读写控制信号、tRCD
地址线A0-A12是共用的,所以在行地址确定之后再给定列地址。拉低CAS信号,表示地址线上是行地址。
因为列地址给出之后就可以寻找到对应的存储单元,所以在给定列地址的时候,顺便可以给定读写控制信号,标明本次需要读数据还是写数据。
在发送列读写命令时必须要与行有效命令有一个延时,这个延时时间称为tRCD,即 RAS to CAS Delay。
tRCD一般以时钟周期(tCK,Clock Time)为单位,具体的时间需要根据时钟频率的值来定。
比如 W9825G6KH 的tRCD最小为15ns:
读数据时序、CL
在CAS行有效脉冲发出之后,需要经过一段时间,数据线上才能有数据输出,这段时间称为CL(CAS Latency,CAS潜伏期),单位是时钟周期。
需要注意,CL只在读取时出现,也称为读取潜伏期(RL,Read Latency)。
CL的值在模式寄存器中可配置:
SDRAM配置CL为不同的值,最大工作频率也不同
如W9825G6KH-6,当CL=3工作频率可以到166M,当CL=2工作频率只能到133M。
写数据时序、tWR
数据写入的操作也是在tRCD之后(给定列地址后)进行,时序如图:
虽然数据与CAS同时发送,但是由于电容的充电需要有一段时间,所以数据真正写入需要有一定的周期,为了保证数据真正被可靠的写入,都会留出足够的写入/校正时间(tWR,Write Recovery Time),这个操作也被称为写回。
W9825G6KH-6需要2个时钟周期。
预充电、tPR
由于SDRAM的寻址具有独占性,所以在进行完读写操作后,如果要对同一L-Bank的另一行进行寻址,就要将原来有效的行关闭,重新发送行地址和列地址。
L-Bank关闭现有工作的行,准备打开新行的操作称为预充电(Precharge)。
预充电有两种方法:通过命令控制或者通过辅助设定让芯片在每次读写完之后自动预刷新。
① 自动预刷新
在之前读取/写入的时序图可以看到:A10的高低电平状态表示允许/禁止自动预充电。
② 预充电命令
在发出预充电命令之后,要经过一段时间才能允许RAS行有效命令打开新的工作行,这段间隔称为tPR(Precharge command Period,预充电有效周期)。
W9825G6KH-6需要15nS。
刷新、刷新间隔
之所以称为DRAM,是因为它要不断的进行刷新(Refresh)才能保留住数据,因此它是DRAM最重要的操作。
目前公认的标准是,存储体中电容的数据有效保存期是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)。
数据掩码
为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,DQM)技术。
通过DQM,内存可以控制I/O端口取消哪些输入/输出的数据,每一根DMQ信号线对应控制一个字节。
比如 W9825G6KH 芯片是 16bit 位宽,所以有两条 DQM 信号线:LDQM和UDQM。
SDRAM官方规定,在读取时DQM发出两个时钟周期信号后生效,如图:
而写入时DMQ与写入命令一样立即生效:
tMRD
SDRAM_Timing.LoadToActiveDelay = 2;
tMRD 定义加载模式寄存器的命令与激活命令或刷新命令之间的延迟。
tXSR
SDRAM_Timing.ExitSelfRefreshDelay = 7;
tXSR 定义从发出自刷新命令到发出激活命令之间的延迟。不管那种 SDRAM 速度等级,此参数都是
需要 70ns,实际驱动 SDRAM 是用的 100MHz,TXSR = 7 时正好是 70ns。
W9825G6KH-6需要72nS
tRAS
SDRAM_Timing.SelfRefreshTime = 4;
tRAS 定义最短的自刷新周期。SDRAM 手册上提供的是四种速度等级时提供的参数,V7 开发板用的
SDRAM 支持 166MHz,TRAS=7 就是 42ns,而我们实际驱动 SDRAM 是用的 100MHz,TRAS = 4
时是 40ns,保险起见这里可以设置 TRAS=5,实际测试 40ns 也是稳定的。
W9825G6KH-6需要42nS
tRC
SDRAM_Timing.RowCycleDelay = 7;
tRC 定义刷新命令和激活命令之间的延迟。SDRAM 手册上提供的是四种速度等级时提供的参数,V7
开发板用的 SDRAM 支持 166MHz,TRC=10 就是 60ns,而我们实际驱动 SDRAM 是用的 100MHz,
TRAS = 7 时是 70ns,设置 TRC=6 也是可以的,不过保险起见,设置 TRAS=7。
W9825G6KH-6需要60nS