SDRAM读写控制器-学习1

373 阅读5分钟

SDRAM理论学习:

SDRAM: synchronous dynamic random access memory:同步动态随机存取内存。是动态随机存储区DRAM家族的一份子。

1 同步

dram通常是异步的,sdram和fpga时钟一致。sdram数据写入读取的读写时钟和主控时钟频率相同。

2 动态

电容进行存储,电容存储的电荷会慢慢释放,所以sdram需要不断充电,不断刷新。

3 随机

数据的存储是根据地址进行数据的读写。

五代产品: SDR SDRAM,DDR SDRAM, DDR2 SDRAM,DDR3 SDRAM,DDR4 SDRAM。

SDRAM采取单端信号,数据采集只在上升沿进行采样。后面几代都是差分信号,双沿采样。

地址线分时复用 (行列地址),需要刷新。- 所以对时序要求严格。

SDRAM数据存取原理:

image.png 先行后列可以精确定位到存储单元,就可以进行读写操作。 n个存储单元构成存储阵列。n为行数x列数。

存储队列称为: 逻辑bank,Bank。 一般为四个Bank。

Bank - 行 - 列 - 存储单元 - 读写

一个16位宽的SDRAM,存储单元为16bit。由位宽决定。

SDRAM容量计算

256MB SDRAM: 4Megx16x4banks 4Meg表示单个bank存储单元数行13位宽,列地址9位宽 8192x512 = 4Meg。 16为芯片位宽每个存储单元存储bit数。

bank数x存储单元位宽x存储单元数

image.png

speed grade 速度等级 clock frequency 频率

tRCD ns 激活命令写入到开始读写,中间需要等待的数值。

tRP ns 预充电写入到预充电完成需要的等待时间

CL ns 列选通潜伏期,数据读指令写入到读出的等待时间

Target RCD RP CL : 3-3-3 在该速度等级下,这三个参数需要等待3个时钟周期。

SDRAM器件引脚说明

image.png

CLK为输入信号

CKE为时钟使能信号,作用屏蔽时钟。

CS#(#表示低电平有效)片选信号,屏蔽使能输入输出。高电平时候屏蔽输入命令。

RAS# 行选通信号。行地址

CAS# 列选通信号。列地址

WE# 写使能信号,写操作和预充电。

以上为控制信号。

DQMH DQML数据掩码信号,对字节进行掩码,每个端口控制一个字节。DQML控制低八位。信号为有效高电平,下一个时钟周期数据总线为高阻态。

存储地址 A12 -A0

DQ15-DQ0 数据端口16位宽 数据输入输出复用

BA0 BA1为bank地址

SDRAM 操作命令

CS# RAS# CAS# WE# 构成指令集

BA CKE DQM等辅助作用。

comman inhibit禁止命令: cs为高电平。

no operation: 无操作命令 空命令 cs低电平,RAS CAS WE为高电平。 空闲状态时候占用空闲端口。

LOAD MODE REGISTER: 配置寄存器命令 CS RAS CAS WE为低电平,所有bank均处于空闲才可以写入,而且在执行命令后SDRAM要等待一段时间,为模式寄存器配置时间。 之后才可以写入新的命令。需要使用地址总线ADDR 完成辅助配置。

通过地址总线可以完成模式配置。

image.png

LOAD MODE REGISTER:

image.png

Brust length 突发长度,

突发:同一行中相邻的存储单元连续进行数据传输。 连续传输所涉及的存储单元称为突发长度。

111 fullpage 整页突发。

M3=0 5种突发方式,M3= 1只有四种突发方式。

000 突发长度为一个字节,代表着每次读写数据都要对存储单元寻址。 如果需要连续的操作,就要不断写入列地址和行地址。

需要不断写入地址和命令。 image.png

使用突发长度:

指定起始地址 和突发长度,写入读指令,内存就会自动进行操作。 image.png

如果实际需要数据长度小于 突发长度,我们需要发送突发停止命令,结束当前数据的传输。

M3寄存器,为突发类型的设置。

顺序突发类型和 隔行的突发类型。 image.png

CAS latency:列选通潜伏期。写入读命令,出现第一个数据的时间间隔。 可以设置周期。

OP mode : 模式设置,只开放了标准模式。低电平即可。

M9: 设置we 写操作设置,为0为突发长度,为1SDRAM 每个写命令只能写入一个。

其他为reserve 设置为0即可。

image.png

PRECHARGE 预充电命令,关闭指定逻辑bank,预充电执行后必须等待一定周期,完成这个命令,bank可以重新操作。 cs ras为低电平 cas we为高电平。

AUTO refresh or self refresh: 刷新命令

上限为64ms,刷新速度为行数除以64ms。 自动刷新和自刷新。 0001控制信号。
控制指令 0001

当时钟使能信号为高电平,写入刷新指令,执行的是自动刷新操作,自动刷新之前必须进行预充电命令,将所有bank关闭,针对一行中所有逻辑单元,在刷新过程中逻辑单元必须停止工作。完成后进入正常工作。 等待64ms后,可以对同一行刷新。

如果时钟使能信号为低电平,执行自刷新,在休眠状态下低功耗下数据保存。 依靠内部时钟工作,要退出,将时钟使能信号置为高电平。

激活命令

0011,SDRAM处于空闲状态才会被响应。 bank/row 选择指定逻辑bank和行进行激活操作。预充电命令关闭当前行后,才可以进行下一个激活操作。

一个逻辑bank预充电后需要使用,还需要进行激活操作。只有SDRAM处于空闲状态才会被响应,激活命令为后续操作激活某一行,指定逻辑bank,指定行。 预充电命令后,激活命令才会被关闭。

WRITE: 写命令

突发写入操作 0100,还需要使用A10,突发写操作后立即自动预充电命令当A10为高电平,A10为低电平时候,当前行依然处于激活状态,以便于对当前行继续进行读写操作。

read读命令:

进行突发读取

BURST terminate:突发终止命令

当突发长度大于发送数据数时,突发终止命令来终止操作。