1.SDRAM介绍

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

2.基本概念

  物理Bank(P-Bank):处理器数据总线的位宽
  芯片位宽:每一片SDRAM缓存芯片本身的位宽
  逻辑Bank(L-Bank):SDRAM内部存储空间划分的片区(一般一个SDRAM有4个逻辑Bank)
eg:32M×4bit存储空间,分四块SDRAM:8M×4bit,则每个小格存储4bit,四块即四个L-Bank。
  在对 SDRAM 进行数据读写时,要先确定 Bank 地址,再依次确定行地址和列地址,进而进行数据的读写操作,而且一次只能对一个 Bank 的一个存储单元进行操作。

3.SDRAM基本结构


*数据掩码DQM:为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,简称DQM)技术。通过DQM,内存可以控制I/O端口取消哪些输出或输入的数据。这里需要强调的是,在读取时,被屏蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元”处被屏蔽。DQM由北桥控制,为了精确屏蔽一个P-Bank位宽中的每个字节,每个DIMM有8个DQM信号线,每个信号针对一个字节。这样,对于4bit位宽芯片,两个芯片共用一个DQM信号线,对于8bit位宽芯片,一个芯片占用一个DQM信号,而对于16bit位宽芯片,则需要两个DQM引脚。

*SDRAM官方规定,在读取时DQM发出两个时钟周期后生效,而在写入时,DQM与写入命令一样是立即成效。

*读取时数据掩码操作,DQM在两个周期后生效,突发周期的第二笔数据被取消

*写入时数据掩码操作,DQM立即生效,突发周期的第二笔数据被取消

4.SDRAM芯片的引脚示意图如下图所示


BA[1:0]:2位BANK地址
A[11:0]:12位共用的行列地址总线。我们选择SDRAM某个Bank的Row地址的时候,需要到12根地址线(A0~A11);当选择Col地址的时候,只用A0~A8这9根线;A10这个信号可以用来控制Auto-precharge
DQ[31:0]:32位双向数据引脚
DQM[3:0]:屏蔽线,数据掩码
CKE:使能(自刷新时拉低,其余时刻拉高)
CS#:片选
RAS#:行选通
CAS#:列选通
WE#:读写控制位

5.SDRAM操作指令


NOTES:
1. 除了SELF REFRESH., CKE对于所有显示的命令都是高的。
  初始化NOP指令–COMMAND INHIBIT (NOP) ;
  无操作NOP指令–No operation(NOP)。
2. 激活指令–ACTIVE
  A[0:n]提供行地址(其中An是最高的地址位),BA[1:0]决定哪个Bank被激活。
3. 激活指令–ACTIVE
   A[0:i]提供列地址(其中i =给定设备配置中最高的列地址)。A10 为高时启用自动预充功能(非持久),A10 为低时禁用自动预充功能。
4. 禁止指令–BURST TERMINATE
  BURST TERMINATE命令的目的是停止数据突发,因此该命令可以与总线上的数据重合。然而,DQ列读取“Don’t Care”状态,以说明在没有数据的情况下,可以发生BURST TERMINATE命令(中止指令,不会继续执行未执行完的指令)。
5. 预充电指令–Precharge
  A10 为低: BAO, BA1确定被预充电的Bank。A10为高:所有Bank预充电,BA[1:0]为“Don’t Care”。*(预充电为结束读写指令的标志,同时也是开启下一行读写指令的标志)*每次读写结束必须进行一次预充电。
6.刷新命令(Refresh)
  如果CKE为高,则该命令为AUTO REFRESH;如果CKE为低,则该命令为SELF REFRESH。
7. 内部刷新计数器控制行寻址;除了CKE以外所有的输入和I/ o都是“Don’t Care”。规定每隔64ms必须对数据刷新一次,即刷新周期不超过64ms,故刷新指令的周期为64ms/数据行数。
8. 模式寄存器加载指令–Load Mode Register
  A[11:0]定义写入模式寄存器的操作码。
9. 在写(零时钟延时)和读(双时钟延时)期间激活或去激活DQM。DQM的数据掩码信号。

6.模式寄存器加载指令–Load Mode Register

  配置模式寄存器指令只有所有 Bank 均处于空闲状态时才可被写入,否则配置出错,而且在执行此命令后,SDRAM 必须等待相应的响应时间 tRSC(Register Set Cycle),模式寄存器配置周期)后,才可写入新的命令。

   在写入此命令对 SDRAM 进行模式寄存器配置时,需要地址总线 A0-A11 辅助寄存器的模式设置,A0-A11 赋值不同对应寄存器配置不同模式,未使用的地址总线设置为低电平。 A0-A11 的不同赋值所对应的寄存器不同模式。模式寄存器配置如下图所示。

6.1突发模式:
  突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Length,简称 BL)。地址总线的低三位 A0-A2 是突发长度的控制位,SDRAM 芯片的突发长度可设置为 1、2、4、8 和整页,单位为字节,整页表示一次突发传输一整行的数据量。

6.2突发类型:
  突发类型的设置位为 A3,可将突发类型设置为两类,顺序和交替触发。一般将 A3 设置为低电平,选择顺序类型。

6.3列选通潜伏期CL
  列选通潜伏期(CAS Latency,简称CL)是指从读命令被寄存到数据总线上到出现第一个有效数据之间的时钟周期间隔,列选通潜伏期可被设置为 2 个或 3 个时钟周期,设置位为 [6:4]A。只在读数据时有,写数据时不需要。

6.4运行模式(Operating Mode)
  运行模式设置位为 A7,A8,SDRAM 存在标准模式、测试模式等多种模式,但对于普通用户,在使用 时只需将 A7,A8 设置为低电平进入标准模式。

6.5写模式
  写模式设置位为 A9,控制 SDRAM 的写模式。当 A9 为低电平时,SDRAM 的读/写操 作均采用突发方式,突发长度由突发长度寄存器(A0-A2)设定;当 A9 位高电平时, SDRAM 的读操作依然采用突发方式,突发长度由突发长度寄存器(A0-A2)设定,但 SDRAM 的写操作不在使用突发方式,每一个写命令只能写入一个数据。

  补充:在进行不同指令的转换时,需要满足一定的时序,具体查看使用芯片的器件手册。

tRP:PRECHARGE  command  period,发送预充电指令后进行下一个操作需要等待的时间;
tRCD:从行选通命令到列读写命令发出之间的间隔,该数据以时钟周期表示;
tRFC:AUTO REFRESH period ,自动刷新时间;
tRC:ACTIVE-to-ACTIVE command period,ACTIVE-to-ACTIVE命令周期;
tMRD:LOAD MODE REGISTER command to ACTIVE or REFRESH command,发送设置模式寄存器指令后进行下一个操作需要等待的时间;
CL:CAS Latency,选通潜伏期,列地址被选中之后,将会触发数据传输,数据从存储单元中输出到真正出现在      芯片的 I/O 接口之间还需要的时间。CL 的数值以时钟周期数表示。
tAC:Access time from CLK (positive edge) ,从CLK(正边缘)开始的访问时间
tAH:Address hold time,地址保存时间
……

  以上时间均可通过查询器件手册获得

7.数据操作

7.1初始化

  初始化操作的时序图如下图所示

CK:时钟
CKE:使能
COMMAND:命令,CS#(片选信号),RAS#(行选通信号),CAS#(列选通信号),WE#(写使能信号)四根线组成
DQM:屏蔽线,数据掩码
A[9:0],A[12:11]:数据地址线,也可用来设置模式寄存器
A10:数据地址线,可以用来控制Auto-precharge
BA[1:0]:2位BANK地址
DQ:32位双向数据引脚

初始化操作过程:

  1.开始上电时,在初始化操作之前先等待一段时间(图中T=100us,具体根据器件手册),同时CKE需拉高,然后发送NOP指令(防止对SDRAM进行误操作);
  2.对所有BANK进行预充电操作,A10拉高即是选中所有BANK,等待tRP时间,在此期间同样需要发送NOP空指令;
  3.发送自动刷新指令,等待tRC时间,在此期间同样需要发送NOP空指令
  4.重复进行发送自动刷新指令,等待tRFC,不同的芯片刷新次数不同
  5.设置模式寄存器,设置指令后需要等待一定的时间、即tMRD,在此期间同样需要发送NOP空指令;
  6.初始化完成。

7.2自动刷新

SDRAM内部存储体是利用电容能够保持电荷以及可充放电的特性制成,而电容所存储的电荷会随时间不断流失,会造成存储数据的丢失。为保证SDRAM中数据的可靠性,需要对SDRAM进行不断刷新。

自动刷新:作用是在SDRAM使用过程中保证数据不丢失,自动刷新需要外部时钟的参与,但刷新行地址由内部刷新计数器控制,无需外部写入。

自刷新模式:则主要用于休眠模式低功耗状态下的数据保存,自刷新过程无需外部时钟参与,与自动刷新相同的是,刷新行地址由内部刷新计算器控制,无需外部写入。

在上述的初始化操作中,已经进行了自刷新。
自刷新的过程可以概括为:
  1.对所有BANK进行预充电操作,A10拉高即是选中所有BANK,等待tRP时间,在此期间同样需要发送NOP空指令;
  2.发送自动刷新指令,等待tRC时间,在此期间同样需要发送NOP空指令
  3.重复进行发送自动刷新指令,等待tRFC,不同的芯片刷新次数不同
  4.自动刷新完成。

7.3读/写操作

读:初始化→发行地址→RCD→发列地址→CL→数据
写:初始化→发行地址→RCD→发列地址→数据

突发长度:即连续读几个列地址
SDRAM提供了多种数据读取方式,诸如单个读、页突发读(突发长度1、2、4、8、全页)等
全页突发:P-Bank中的每一个芯片的同一个L-Bank、同一个行地址,进行操作。

  绝大部分SDRAM都不支持在全页突发的情况下自动预充电,所以我们的读/写操作时序中包含手动预充电。

7.3.1读操作

连续读突发时序图:

随机读突发时序图:

全页突发读的过程可概括为:
   1.发送激活指令,同时在bank总线输出想要写入数据的bank地址,在地址总线输出写入数据的行地址,所以该操作也称之为 “ 行激活 ”。发送激活指令后需要等待tRCD时间,在此期间同样需要发送NOP空指令
  2.在地址总线输出要读取数据的列首地址,然后等待潜伏期(CL,CAS latency)个时钟周期。
  3.潜伏期结束后,数据总线开始输出数据,此后每个周期均有数据输出,直到向SDRAM发送突发终止指令,结束这次突发读取,由此可实现突发长度的控制(不能超过一行数据的最大数,即2*9=512个数据)
  4.发送预充电指令对所有BANK进行预充电操作,A10拉高即是选中所有BANK。等待tRP时间,在此期间发送NOP空指令
   5.tRP时间结束后,一次突发写操作完成。

7.3.2写操作

写突发时序图:

全页突发写的过程可概括为:
1.发送激活指令,同时在bank总线输出想要写入数据的bank地址,在地址总线输出写入数据的行地址,所以该操作也称之为 “ 行激活 ”。发送激活指令后需要等待tRCD时间,期间发送NOP空指令;
2.等待结束后发送写指令,同时在在bank总线输出想要写入数据的bank地址,在地址总线输出写入数据的列首地址,并且在数据总线输出要写入SDRAM的第一个数据,所以该操作也称之为 “ 列读写 ”。每个周期多输出空指令,但数据总线一直输出想要输出的数据;
3.在所有数据输出完成后的下一个周期输出 “ 突发终止 ”指令,结束这次突发写入,由此可实现突发长度的控制(不能超过一行数据的最大数,即2*9=512个数据);
4.发送预充电指令对所有BANK进行预充电操作,A10拉高即是选中所有BANK。等待tRP时间,期间发送NOP空指令;
5.tRP时间结束后,一次突发写操作完成。

8.仲裁模块

  在sdram正常工作时,需要控制自动刷新、写操作、读操作三个过程的进行。即当需要进行某一操作时,对应模块向仲裁模块发送给请求信号,仲裁模块根据自身所处的状态来响应请求信号,模块收到响应信号后,开始进行操作。

9.读写仿真

学习笔记——SDRAM学习相关推荐

  1. SilverLight学习笔记--进一步学习Isolated Storage独立存储一(理论篇)

    在"silverlight如何在客户端读取文件"以及"silverlight如何在客户端写入文件"两篇文章中我们初步接触了Isolated Storage概念. ...

  2. Python3学习笔记之-学习基础(第三篇)

    Python3学习笔记之-学习基础(第三篇) 文章目录 目录 Python3学习笔记之-学习基础(第三篇) 文章目录 一.循环 1.for循环 2.while循环 3.break,continue 二 ...

  3. 强化学习笔记-强化学习概述

    强化学习笔记-强化学习概述 机器学习分类 强化学习与监督学习的异同点 强化学习基本原理 强化学习解决的是什么样的问题 强化学习分类 请分别解释随机性策略和确定性策略 回报.值函数.行为值函数三个指标的 ...

  4. 学习笔记 mysql_MySQL 学习笔记

    MySQL 学习笔记 1 定义 数据库中的表:一行叫一条记录.每一列叫一个属性,或一个字段. 主键:表中的某个特殊字段,具有唯一的确定的值,可以根据该字段唯一的确定一条记录 外键:表中的某个字段的值为 ...

  5. cocos2d学习笔记2——学习资源

    1. 视频 找了好几个视频,有一些讲得好的文件资源没有,后来终于找到一个讲得不错还有文件资源的,还有高清下载地址,虽然是2.2版本的,但是确实能学到不少东西,对用cocos2d做游戏有了基本的印象,对 ...

  6. lucene学习笔记_学习Lucene

    lucene学习笔记 我目前正在与一个团队合作,开始一个基于Lucene的新项目. 虽然大多数时候我会争论使用Solr还是Elasticsearch而不是简单的Lucene,但这是一个有意识的决定. ...

  7. 大数据业务学习笔记_学习业务成为一名出色的数据科学家

    大数据业务学习笔记 意见 (Opinion) A lot of aspiring Data Scientists think what they need to become a Data Scien ...

  8. Linux学习笔记------java学习

    前言 学习笔记仅供参考 该笔记是作者根据b站狂神说视频以及自己翻阅的一些资料而写 视频连接:狂神Linux视频链接 如果有兴趣的小伙伴可以前去观看 如果购买过服务器的话,可以直接使用宝塔进行傻瓜式安装 ...

  9. shell学习笔记---工具学习

    . sort工具 . uniq工具 . paste工具 . cut工具 . xargs工具 . sed工具 . awk工具 . find工具 . 模式空间选择空间 # sort工具 # sort将文件 ...

最新文章

  1. 自定义滚动条(Custom ScrollBar)
  2. 189A. Cut Ribbon
  3. hp服务器硬盘ultra320,HP服务器上安装和管理HP 磁盘柜MSA500G.pdf
  4. ImageIO 框架详细解析
  5. 卢伟冰正式预告Redmi K30:首发双开孔全面屏+双模5G
  6. LabView2018的安装
  7. 各种边缘检测算子特点比较(canny)
  8. 南加大计算机硕士学制,2020年南加州大学硕士读几年
  9. C#WinForm的TextBox 按TAB键让光标按照指定顺序走
  10. c语言编程简单好玩的图,几个有趣的画图编程
  11. 计算机基础第五章知识,计算机基础第5次作业-第五章-Powerpoint知识题
  12. 如何查找native方法
  13. ivx中字体显示_Windows 7 中的 SimSun-ExtB 是什么字体,为何与中易宋体 SimSun 显示出来不一样?...
  14. arcgis怎么压缩tif文件_怎么压缩PDF文件?快来试试这些工具!
  15. 迅雷beat下载为php,迅雷beta版本下载
  16. 服务器装Win10虚拟机流畅,win10自带虚拟机和vmware哪个更流畅_win10自带虚拟机和vm哪个好用-win7之家...
  17. 电脑登录微信,手机退出微信,电脑端微信仍然在线(IOS)
  18. 地磅无人值守称重系统怎样实现自动发货的?
  19. Java实现短链接URL生成
  20. Scratch技巧—-使用克隆技术实现菜单按钮

热门文章

  1. 最终幻想之父——坂口博信 (转载自天幻网(www.SquareCN.com))
  2. 字节跳动测试岗位面试题
  3. (Python)sum函数的用法
  4. 《哈利·波特:霍格沃茨之谜》游戏特推出万圣节内容致敬黑魔法
  5. pku1905 Expanding Rods
  6. 看板娘全是php的怎么办,【教程】给网站添加互动二次元看板娘老婆
  7. 如何优雅地在Stack OverFlow 上进行编程问题搜索
  8. 基于javaweb的宠物商城系统(java+jsp+javascript+servlet+mysql)
  9. 又到年末“团建”!某企业员工吐槽:这真是一场噩梦……
  10. PYNQ-Z2上手笔记之系统安装