SDRAM 介绍

article/2025/10/26 12:04:27

目录

1、名词解释

2、SDRAM 内部结构

3、SDRAM 外部信号描述

4、SDRAM 命令

4.1、COMMAND INHIBIT

4.2、NO OERATION

4.3、ACTIVE

4.4、LOAD MODE REGISTER (LMR)

4.5、READ

4.6、WRITE

4.7、PRECHARGE

4.8、BURST TERMINATE

4.9、REFRESH

4.9.1、AUTO REFRESH

4.9.2、SELF REFRESH

5、SDRAM 状态

5.1、Idle

5.2、Row active

5.3、Read

5.4、Write

5.5、Refreshing

5.6、Accessing mode register

5.6、Precharging all

6、SDRAM 初始化

7、Mode Register

7.1、Burst Length

7.2、Burst Type

7.3、CAS latency

8、Read operations

8.1、连续读

8.2、随机读

8.3、读过程中去 precharge

8.4、burst 读并终止

8.5、交替读

9、Write operations

9.1、Burst 写

9.2、换列写

9.3、随机写

9.4、写转读

9.5、写转precharge

9.6、交替写

10、PRECHARGE Operation

11、AUTO REFRESH Operation

12、SELF REFRESH Operation

13、POWER DOWN

14、Clock Suspend

15、驱动


1、名词解释

SDRAM :Synchronous Dynamic Random Access Memory,同步动态随机存储器。同步是指其时钟频率和CPU前端总线的系统时钟相同,也就是双方通信,有同步时钟;内部命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据的读写。

NOTES:这里需要强调一下:为了保证数据一直都在,SDRAM 需要不停的去刷新,刷新,刷新

2、SDRAM 内部结构

这里以 MICRON(美光)的 SDRAM(MT48LC16M16A2P-6AIT_256Mb_SDRAM)为例,进行 SDRAM 的结构介绍;

这款 SDRAM 有几种规格:

1、16 Meg x 4 x 4 banks

2、 8 Meg x 8 x 4 banks

3、 4 Meg x 16 x 4 banks

MT48LC16M16A2P-6AIT_256Mb_SDRAM 属于 :4 Meg x 16 x 4 banks,16 位的数据总线;

首先,先说一下存储结构,其实存储内部是由 Row、Column、Bank 组成:

 其中:

紫色部分,是 Bank,这款 SDRAM 有 4 个 Bank;

红色部分,是 Column,列;

绿色部分,是 Row,行;

那么不同组成部分的解释为:

1、16 Meg x 4 x 4 banks : 8192 row、2048 columns、by 4 bits

2、 8 Meg x 8 x 4 banks:8192 row、1024 columns、by 8 bits

3、 4 Meg x 16 x 4 banks:8192 row、512 columns、by 16 bits

那么 16Meg x16 他的内部是这样的:

 所以呢,如果我们要寻址一个 SDRAM 内部的单元,我们需要给出 3 个参数,Row、Colunm、Bank;

细心的读者可能看到,输入的地址总线只有 A[12:0],这代表可寻址的空间只有 2^13 = 8KB,那是如何访问到 256Mbit(32MB) 的空间的呢?稍安勿躁,看后面描述;

3、SDRAM 外部信号描述

我们来看看 SDRAM 的信号线描述:

引脚代号定义
Vdd/VddQ工作/DQ电压
Vss/VssQ相应电压的接地
DQ[15:0]数据I/O线
A[12:0]行列地址线
DQML/DQMH数据掩码
CS#片选(低电平有效)
CAS#列地址选通脉冲(低电平有效)
RAS#行地址选通脉冲(低电平有效)
WE#读写信号(低电平有效)
CK时钟信号
CKE时钟有效
BA[1:0]Bank 选择信号

可以看出来了吧,选择 Bank 的话,一共 4 个 Bank,2bit 就可以了,也就是 BA[1:0];

专门有 CAS# 和 RAS# 信号给到 SDRAM,告知,当前的 A[12:0] 代表的行地址,还是列地址;

那么,一切就说得通了;

Datasheet 中描述到一个概念:Speed Grade:-6A、-75、-7E,也代表了不同规格的 SDRAM,速率不一样,时序参数也有所区别;时序部分,下面在仔细看;

 另外,Datasheet 还描述了三种另外的规格:分别叫:

commercial:商业级

industrial:工业级

automotive:车规级

他们的时序和温度要求,可靠性要求有所不一样,但是大致都差不多,这里,我们暂时忽略他们的区别;

4、SDRAM 命令

介绍完 SDRAM 的结构组成、以及信号后,接下来介绍一下他的命令;啥?他还有命令?当然,SDRAM 也有他自己的控制器和状态机,我们要用它,就需要深入了解他;

首先需要说明一下,SDRAM 的命令,是外部发给 SDRAM 的,也就是 CPU 或者 MCU;SDRAM 引脚就这么多,那么如何发送命令呢?肯定就是不同引脚上不同的电平状态的组合了:

 可以看到,SDRAM 支持如下命令:

COMMAND INHIBIT(NOP):空指令;

NO OERATION(NOP):空指令;

ACTIVE:选择 bank 和 row 的指令;

READ:选择 bank 和 column ,并且开始读数据的指令;

WRITE:选择 bank 和 column ,并且开始写数据的指令;

BURST TERMINATE:终止 Burst 指令;

PRECHARGE:预充电指令(会使得 bank 中的 row 变成 deactivate 状态);

AUTO REFRESH or SELF REFRESH:刷新指令;

LOAD MODE REGISTER:配置寄存器指令;

可以看到,发送这些指令,都是靠不同电平状态下的各个信号组合而成;

4.1、COMMAND INHIBIT

COMMAND INHIBIT 指令,不管 CLK 是否被使能,发送 COMMAND INHIBIT 指令的功能是阻止新的指令执行;

4.2、NO OERATION

NO OERATION 指令是为了发送 NOP 不想让其他的命令占用设备;

4.3、ACTIVE

当设备处于 IDLE 状态的时候,ACTIVE 指令用于激活指定 bank 的指定 row;其中 BA[1:0] 用于指定 Bank;

注意:在发送 PRECHARGE 命令之前,当前的 row 都可以持续被访问,直到该 bank 被发送了 PRECHARGE 命令;在打开同一个 bank 的不同 row 之前,PRECHARGE 命令都必须先被发送;

看到这里,小伙伴肯定很懵逼,什么又是选中 bank + row,什么又是 PRECHARGE 命令;不着急,后面我会再次汇总,现在有一个概念就可以了:访问一个 row 之前,必须先执行 PRECHARGE 命令(可以理解为,对他充电),要访问其他 row,需要再次充电;

4.4、LOAD MODE REGISTER (LMR)

刚刚不是说了么,SDRAM 也有自身的控制逻辑,这个控制逻辑有一部分是在 SDRAM 的寄存器里面,有且只有一个寄存器,就是这个 LOAD MODE REGISTER;我们在使用之前,需要去配置他,就是通过发送这个 LMR 命令配置;

4.5、READ

读命令是用来在 ACTIVE 命令之后,去选择 column ,并且发起 burst 读的;在读命令的时候,需要注意两点:

1、READ 的时候呢,A10 这个位,标记了,是否需要使用 auto precharge 功能;这里会衍生出几个问题:

1.1、A10 不是地址线么,为啥拿来做标志位了?:

因为在 READ 阶段,属于选 column 阶段,ACTIVE 阶段使用到 A[12:0],在 READ 阶段,只用到了:x4: A[9:0], A11; x8: A[9:0]; x16: A[8:0],,对于我们这块来说,就是 A[8:0];所以不管怎么说,这个阶段选择列,最大用到 10bit,那么 A10 (也就是第 11 bit 就可以挪作他用了)

1.2、auto precharge 是啥?

如果 auto precharge 被选择,那么就意味着,在这次 READ 结束的时候,会自动跟上一个 precharge 的操作;这个操作上了以后呢,就使得这个 row 变为了一个 inactive 状态,无法立即访问该 row;

如果 auto precharge 没有被选择,那么就意味着,在这次 READ 结束的时候,不会自动跟上一个 precharge 的操作;该 row 可以再次立即被访问;

现在你只需要知道,每次访问一个 row,都要先 precharge,然后等上一个时间;

2、READ 的时候呢,DQM 这个信号起作用了,这个 DQM 是什么意思呢?

数据掩码的意思,就是代表了那些位的数据是需要的,DQM分为 2 bit,DQMH 和 DQML,分别代表了高 D[15:8] 和 D[7:0]

4.6、WRITE

写命令基本上和 READ 是一样的,只不过变成了数据写入 SDRAM,在这个阶段,也是选择 column;其他都和 READ 一样,不再多说:

4.7、PRECHARGE

PRECHARGE 命令用于指定的 bank 的 处于 open 状态下的 row 进入 deactivate 状态,或者也可以让所有的 bank 的 row 都进入 deactivate 状态;当发送 PRECHARGE 命令后,经过一个指定的时间:tRP,指定 bank 的指定 row 就将可以被访问;

A10 在这个过程中,依然充当了另外角色,指示了是要指定 bank 的 row 进入deactivate 状态,还是 all bank 的 row 进入 deactivate 状态;

4.8、BURST TERMINATE

用于终止一个 Burst 传输;

4.9、REFRESH

为了保持 SDRAM 的数据一直都在,需要不停的刷新,刷新分为两种类型如下:

4.9.1、AUTO REFRESH

第一种叫 AUTO 类型,这里说是 AUTO,其实一点都不 AUTO,就是需要手动去刷新(或者称之为 MCU 或者 CPU 端的 SDRAM Controller 去主动刷新),所以,就必须在一个指定的时间间隔之内,去刷新一次,也就是发送一次这个指令;

在每次发送 AUTO REFRESH 之前,所有的 active bank 都必须被 precharged 一次

在发送 PRECHARGE 之后,需要等待 tRP 时间,然后在去发送 AUTO REFRESH 指令;

在发送 AUTO REFRESH 命令期间,地址会在内部自动去递增的生成,所以,在这期间,外部输入的地址信息,是无效的;

根据 Spec 的要求,256Mb SDRAM 需要 8192 次 AUTO REFRESH Cycles 每 64ms (针对商业级和工业级的 SDRAM) 或者 16ms (车规级 SDRAM).

当然,这种刷新,你既可以按照时间来进行等时的刷新(比如你吧 64ms 分为 8192 份,就可以得到 7.813μs 就要刷新一次),当然,也可以在 64ms 到之前,一次性发送 8192 个 AUTO REFRESH,来一次性完成刷新;

4.9.2、SELF REFRESH

SELF REFRESH 这种才是真的自动刷新,它不需要外部参与,完全依靠 SDRAM 的内部时钟来刷新,从而保持内部数据;

这种刷新,需要将 CKE 信号拉低,也就是时钟的使能信号;

SDRAM 在进入这种模式后,最少持续时间是 tRAS,最长时间是无限期;

如果要推出 SELF REFRESH,需要几步:

1、CLK 必须要稳定

2、CKE 拉高

3、至少 2 个周期的 NOP 指令(tXSR),因为内部需要完成他的 refresh;

4、退出 SELF REFRESH 后,以后的刷新都要交给上面的 AUTO REFRESH 了;

5、SDRAM 状态

SDRAM 定义了几种状态如下:

5.1、Idle

当 bank 被 precharged 后,等了 tRP 时间后,SDRAM 处于 Idle 状态:

5.2、Row active

处于 Idle 状态的 SDRAM,收到 ACTIVE 后,bank 和 row 被选中,并等待了 tRCD 时间后的状态:

5.3、Read

处于 Row active 状态的 SDRAM,收到 READ 后,bank 和 column 被选中后的状态:

5.4、Write

处于 Row active 状态的 SDRAM,收到 WRITE 后,bank 和 column 被选中后的状态:

5.5、Refreshing

当发送 Refresh 后,等待 tRFC 时间,bank 进入 idel;

5.6、Accessing mode register

当发送 LOAD MODE REGISTER 指令后,等 tMRD 时间:

5.6、Precharging all

发送 Precharging 后等待 tRP 时间:

小结:命令+时序,组成了状态,各个状态直接,又有顺序的联系;

6、SDRAM 初始化

上面讲完了命令,状态,时序,下面是初始化的流程:

1、VDD 和 VDDQ 上电;

2、拉低 CKE;

3、CLK 稳定;

4、等 100us;

5、拉 CKE 高;

6、发送 PRECHARGE ALL 指令;

7、等待至少 tRP 时间;

8、发送 AUTO REFRESH 指令并等待 tRFC;

9、发送 AUTO REFRESH 指令并等待 tRFC(第二次);

10、现在 SDRAM 已经可以接受配置 REGISTER 了,上电时刻,mode register 是随机值,所以我们必须配置它;通过 LMR 指令配置 mode register;

11、等待至少 tMRD 时间;

12、此刻 SDRAM 初始化完成,可以被访问;

整个初始化流程和时序如下:

7、Mode Register

讲完了初始化,那么这个 mode register 到底是何方神圣呢?

Mode register 是 SDRAM 部分的控制逻辑,它定义了一个 16bits 的寄存器,里面包含了 burst len(BL),burst type, CAS latency (CL),操作模式等:

7.1、Burst Length

突发长度决定了给定 READ 或 WRITE 命令可以访问的最大列位置数。突发长度为 1、2、4、8 或连续位置可用于顺序和交错突发类型,连续页突发可用于顺序类型。连续页突发与 BURST TERMINATE 命令结合使用以生成任意突发长度。

7.2、Burst Type

突发类型定义了2种,一个是顺序,另一个是交错,他和 Burst len 组合如下:

7.3、CAS latency

CAS latency 指的是,在 READ 操作的时候,数据延时几个 CLK 出来;这个值可以配置位 2 或者 3;

8、Read operations

 读操作有很多次 case,spec 里面列出来很多,这里就简单截图:

8.1、连续读

分别列出来 CL=2 和 CL=3 的情况,先读 Bank 的 n 列,如果没有换的话,burst 会继续读 n+1、n+2....

8.2、随机读

 

8.3、读过程中去 precharge

读过程中去 precharge 后,需要再次发送 ACTIVE ;

 

8.4、burst 读并终止

读的过程中,发送 BURST TERMINATE;

8.5、交替读

9、Write operations

 写的时序类似

9.1、Burst 写

9.2、换列写

9.3、随机写

9.4、写转读

9.5、写转precharge

9.6、交替写

10、PRECHARGE Operation

11、AUTO REFRESH Operation

12、SELF REFRESH Operation

13、POWER DOWN

14、Clock Suspend

这些部分参考 Spec,不再赘述;

15、驱动

对于软件驱动主要应该做哪些事情呢?

1、按照 SDRAM 的时序,合理的配置驱动的时序信息;

2、发送对应的命令,初始化 SDRAM;

3、访问 SDRAM 的时候,由对应的 decoder 进行地址译码,并且生成相应的时序;

4、根据需要,配置 refresh 的时间间隔;

5、低功耗的时候,进行对应的配置;


http://chatgpt.dhexx.cn/article/FpB4aOQC.shtml

相关文章

SDRAM控制器操作时序

此为学习http://dengkanwen.com/137.html整理的笔记,侵删! SDRAM工作原理 内部的状态跳转图 我们所需关注的几个地方: 1)粗黑线表示在该状态下会自动跳转到另一个状态,细黑线表示需要给命令才会跳转。 2&#xff09…

SDR SDRAM控制器设计

目录 前言 1、关于刷新 2、关于数据中心对齐 3、SDRAM芯片手册介绍 3.1SDRAM芯片的管脚 3.2 SDRAM指令集 3.3 模式寄存器 3.4 关于SDRAM上电初始化和装载模式寄存器 3.5 SDRAM刷新时序 3.6 关于写访问 3.7 关于突发访问 4、FPGA工程设计 4.1状态机设计 5、仿真测试…

【GD32】从零开始学GD32单片机高级篇——外部存储器控制器EXMC详解+SDRAM读写例程

目录 简介外部设备地址映射NOR和PSRAM的地址映射NAND/PC Card地址映射SDRAM地址映射 NOR/PSRAM控制器接口描述控制时序模式1模式2 NAND Flash或PC Card控制器接口描述控制时序 SDRAM控制器接口描述控制时序突发读操作突发写操作读写FIFO跨边界读写操作低功耗模式自刷新模式掉电…

初识内存控制器和SDRAM【一文了解】

原文链接:https://blog.csdn.net/qq_36243942/article/details/85596249 目录 1.引入内存控制器 2.不同位宽内存设备之间的连接 3.如何确定芯片的访问地址 4.分析读写NOR FLASH的读写时序 5.SDRAM初识 6.编程读/写 SDRAM 附录:源代码 1.引入内存控制器 我…

存储控制器(SDRAM操作)

什么是存储控制器 2440是32位单片机,进行数据访问时通过32位地址访问。 CPU发出32位地址信号给存储控制器,存储控制器根据地址信号设置片选信号及地址总线,将相应数据通过数据总线传回存储控制器,存储控制器将收到的数据以字节为…

数字IC实践项目(2)——高速SDRAM控制器的设计与综合(入门级工程项目)

数字IC实践项目(2)—高速SDRAM控制器的设计与综合(入门级工程项目) 写在前面的话项目简介和学习目的SDRAM简介SDRAM控制器简介完整项目框图SDRAM控制器项目框图SDRAM初始化模块SDRAM自动刷新模块SDRAM写模块SDRAM读模块SDRAM仲裁机…

SDRAM控制器——仲裁模块的实现

前面一文中,我们已经对SDRAM的上电初始化、自动刷新以及突发读写进行了学习。 本文跟着大佬学习SDRAM中的仲裁模块。 仲裁机制 仲裁(arbit):在FPGA中,当多个source源同时发出请求,容易导致操作冲突&#x…

SDRAM读写控制器

第1节 –作者:小黑同学 本文为明德扬原创及录用文章,转载请注明出处! 1.1 总体设计 1.1.1 概述 同步动态随机存取内存(synchronous dynamic randon-access menory,简称SDRAM)是有一个同步接口的动态随…

FPGA综合项目——SDRAM控制器

FPGA综合项目——SDRAM控制器 目录 1.整体框架2.串口接收模块3.接收模块测试仿真4.串口发送模块5.发送模块测试仿真6.SDRAM基础学习7.SDRAM顶层模块8.SDRAM初始化模块设计与仿真测试9.自动刷新模块设计与测试10.写模块设计与测试11.读模块设计与仿真测试12.通信处理模块13.顶层…

细说SDRAM控制器

SDRAM的基本概念 SDRAM凭借其极高的性价比,广泛应用于高速数据存储、实时图像处理等设计当中,但是相对于SRAM、FIFO等其他存储器件,SDRAM的控制相对复杂。虽说是复杂,但也不代表没办法实现,仔细梳理一下,发…

SDRAM控制器

1.SDRAM简介 简介:SDRAM为同步动态随机存储内存,同步指的是时钟与外部输入的时钟保持一致,也就是与外部共用一个时钟;动态指的是每个时间段内,都要进行一次刷新操作,否则里面的数据会丢失,这也…

FPGA学习历程(四):SDRAM 控制器(初始化与刷新)

目录 一、数据手册相关信息1.1 命令真值表1.2 时间参数1.3 模式寄存器配置 二、初始化模块2.1 模块时序图2.2 模块源码2.2.1 sdram_init.v2.2.2 sdram_top.v2.2.3 tb_sdram_top.v 2.3 Modelsim仿真 三、刷新模块3.1 模块时序图3.2 模块源码3.2.1 sdram_aref.v3.2.2 sdram_top.v…

手把手带你实现SDRAM控制器(带Verilog代码)

上篇博客,我们了解了SDRAM的控制命令以及寻址方式,SDRAM芯片需要配合专门的控制电路使用才能发挥功能,这一节我们将一步步分析,使用Verilog搭建一个SDRAM驱动控制器。 目录 学习目标 问题分析 初始化模块 信息收集 模块接口确…

SDRAM 控制器(一)

1、基础知识 SDRAM(synchronous Dynamic Random ),同步动态随机存储器,同步指内存工作需要同步时钟,内存的命令的发送和数据的接收都以它为标准。动态是指需要不断地刷新来保证数据不丢失(电容存储&#xf…

操作系统面试题(二十一):什么是DMA

DMA DMA(Direct Memory Access 直接内存访问) DMA意味着CPU授予I/O模块权限不涉及在不涉及CPU的情况下依然可以读取/写入内存,即DMA不需要CPUde支持 DMAC(DMA 控制器) 控制直接内存访问的过程 DMA的优点&#xff1a…

操作系统面试题:虚拟内存是什么,解决了什么问题,如何映射?

虚拟内存是什么? 虚拟内存别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟内存技术&…

Linux面试题(34道)

1、Linux中各个目录的作用 1)/ 根目录 2)/boot 引导程序,内核等存放的目录 3)/sbin 超级用户可以使用的命令的存放目录 4)/bin 普通用户可以使用的命令的存放目录 5)/lib 根目录下的所程序的共享库目录 6&…

【游戏客户端面试题干货】-- 2021年度最新游戏客户端面试干货(操作系统篇)

【游戏客户端面试题干货】-- 2021年度最新游戏客户端面试干货(操作系统篇) 大家好,我是Lampard~~ 经过一番艰苦奋战之后,我终于是进入了心仪的公司。 今天给大家分享一下我在之前精心准备的一套面试知识。 今天和大家分享的是操作系统相关的面…

操作系统和网络(一):计算机网络常见面试题

计算机网络常见面试题总结 1. OSI , TCP/IP ,五层协议的体系结构 OSI分层(7层) :物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层(4层) :网络接…

【Java实习生】每日面试题打卡——操作系统篇

临近秋招,备战暑期实习,祝大家每天进步亿点点!Day15本篇总结的是 操作系统 相关的面试题,后续会每日更新~ 1、请分别简单说一说进程和线程以及它们的区别? 根本区别:进程是操作系统资源分配的基本单位,而…