文档章节

存储控制器_SDRAM详解

季风_落地窗
 季风_落地窗
发布于 2014/04/08 21:59
字数 2269
阅读 218
收藏 3

什么是 SDRAM

Synchronous Dynamic Random Access Memory: 同步动态随机存储器.   同步 : 由soc发送时钟给SDRAM, 通过该时钟的节拍来发送控制信号.    动态 : 存储器需要不断的刷新来保证数据不丢失.    随机 : 数据非线性存储, 可自由指定地址进行数据的读写

SDRAM的内部与外部结构

  1. 外部

    图1    本开发板用两片sdram来配置为32bit位宽的sdram. 

  2. 内部

    sdram的检索原理和表格一样,  通过先指定行, 再指定列就能准确找到所需要的存储单元. 但是由于技术/成本的原因, 一个sdram内部不可能只有一个表格, 目前基本是4个,  这个类似表格一样的结构叫做 逻辑Bank, L-Bank. 这样要找到某个存储单元就要先确定是哪个bank, 然后选定行,再选定列.

SDRAM的内部基本操作与工作时序

行有效  

必须先使能芯片, 选中相应的L-BANK, 再使能 行(ROW),  再使能 列(COLUMN)来对某个存储单元进行读写.

图2    行有效时序图

通过BA0\BA1来选中某个L-BANK, 通过RAS\CAS来区分 行 与 列. 这是同时进行的, 所以行有效也可以称为 L-BANK有效

列读写

行选通之后就可以发送列地址对存储单元进行读写了.   读/写 命令是通过 WE 信号线来区分的, WE = 1 : 写入 ;  WE = 0 : 读取

图3    命令列表

由上表可知, SDRAM的各种指令都是通过 控制/地址线 的高低电平组合来完成的, 并没有命令字. 所以 读写命令 与 列地址 同时发出.

图4    读写操作示意图

CAS(ColumnAddress Strobe,列地址选通脉冲)信号配合A0-A9/A11(不固定)来确定具体的列地址. 


图5 

在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟),也可以理解为行选通周期,这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一 种状态变化的过程)所制定的延迟。tRCD是SDRAM的一个重要时序参数,广义的tRCD以时钟周期(tCK,Clock Time)数为单位,比如tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,对于PC100的SDRAM,tRCD=2,代表20ns的延迟,对于PC133则为15ns


S3C2440存储控制器的各个寄存器配置解析

BWSCON = 0x2201 1110

BWSCON[31] = 0, 禁止数据掩码引脚

数据掩码

在讲述读/写操作时,我们谈到了突发长度。如果BL=4,一次就传送4×64bit的数据。但是,如果第二笔 数据是不需要的,怎么办?为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,简称DQM)技术。通过DQM,内存可以控制I/O端口取消哪些输出或输入的数据。这里需要强调的是,在读取时,被屏 蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元”处被屏蔽。为了精确屏蔽一个P-Bank位宽中的每个字节,每个DIMM有8个DQM信号线,每个信号针对一个字节。这样,对于4bit位宽芯片,两个芯片共用一个DQM信号线,对于8bit位宽芯片,一个芯片占用一个DQM信号,而对于16bit位宽芯片,则需要两个DQM引脚。SDRAM官方规定,在读取时DQM发出两个时钟周期后生效,而在写入时,DQM与写入命令一样是立即成效

BWSCON[30] = 0, 禁止WAIT信号

BWSCON[29:28] = 1:0; 设置BANK7数据总线宽度为32bit

(BANK6同BANK7)

BANKCONx = 0x0700

BANKCONx( 0 <= x <= 5)用来控制BANK0~BANK5外接设备的访问时序, 采用默认值即可

BANKCONx(6 <= x <= 7) = 0x0001 8005

BANKCONx[16:15] = 1:1, 设置存储器类型为 SDRAM

BANKCONx[3:0] = 0:1:0:1, 设置RAS到CAS的延迟(tRCD)为3个时钟, 设置列地址数为9bit




REFRESH = 0x008C 07A3

BANKCONx[23] = 1, 使能自动刷新功能

BANKCONx[22] = 0, Auto refresh, 等于1为 self refresh

BANKCONx[21:20] = 0:0, 预充电时间为2个时钟周期 (预充电见解释)

BANKCONx[19:18] = 1:1, 设置半行周期时间为7个时钟

BANKCONx[10:0] 设置刷新计数, 刷新计数= 2^11+1-12*7.8=1955( 0x07A3 )


刷新

之所以称为DRAM,就是因为它要不断进行刷新(Refresh)才能保留住数据,那么要隔多长时间进行一次刷新呢? 我们在看内存规格时,经常会看到4096 Refresh Cycles/64ms或8192 Refresh Cycles/64ms的标识,这里的4096与8192就代表这个芯片中每个L-Bank的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15.625μs(微秒,1/1000毫秒),8192行时就为7.8125μs.  刷新操作分为两种:Auto Refresh,简称AR与Self Refresh,简称SR。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。

预充电

由于SDRAM的寻址具有独占性,所以在进行完读写操作后,如果要对同一L-Bank的另一行进行寻址,就要将原来有效(工作) 的行关闭,重新发送 行/列地址。L-Bank关闭现有工作行,准备打开新行的操作就是预充电(Precharge)


BANKSIZE = 0xB1

BANKCONx[7] = 1, 使能突发操作

BANKCONx[6] = 0, 保留

BANKCONx[5] = 1, 使能SDRAM掉电模式

BANKCONx[4] = 1, 设置只在访问SDRAM的时候发送时钟

BANKCONx[3] = 0, 保留

BANKCONx[2:0] = 0:0:1, BANK6/BANK7存储器映射大小 = 64MB/64MB


数据输入(写入)

图7

数据写入的操作也是在tRCD之后进行,但此时没有了CL(记住,CL只出现在读取操作中),行寻址与列寻址的时序图和上文一样 ,只是在列寻址时,WE#为有效状态。从图中可见,由于数据信号由控制端发出,输入时芯片无需做任何调校,只需直接传到数据输入寄存器中,然后再由写入驱动器进行对存储电容的充电操作,因此数据可以与CAS同时发送,也就是说写入延迟为0。不过,数据并不是即时地写入存储电容,因为选通三极管 (就如读取时一样)与电容的充电必须要有一段时间,所以数据的真正写入需要一定的周期。为了保证数据的可靠写入,都会留出足够的 写入/校正时间(tWR,Write Recovery Time),这个操作也被称作写回(Write Back)。tWR至少占用一个时钟周期或再多一点(时钟频率越高,tWR占用周期越多),有关它的影响将在下文进一步讲述

突发长度

突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Lengths,简称BL)

非突发连续读取模式:依次单独寻址,此时可等效于BL=1。虽然可以让数据是连续的传输,但每次都要发送列地 址与命令信息,控制资源占用极大

突发连续读取模式:只要指定起始列地址与突发长度,寻址操作与数据的读取操作自动进行,只要控制好两段突发读取命令的间隔周期(与BL 相同)即可做到连续的突发传输

突发读/突发写,表示读与写操作 都是突发传输的,每次读/写操作持续BL所设定的长度,这也是常规的设定

突发读/单一写,表示读操作是突发传输,写操作则只是 一个个单独进行。突发传输模式代表着突发周期内所涉及到的存储单元的传输顺序


MRSR = 0x30

MRSR[6:4] = 0:1:1, 设置 发送读取命令到第一个数据输出的时间 为 3 个时钟周期 

数据输出(读出)

在CAS 发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为CL(CAS Latency,CAS潜伏期)。由于CL只在读取时出现,所以CL又被称为读取潜伏期(RL,Read Latency)。CL的单位与tRCD一样,为时钟周期数,具体耗时由时钟频率决定

图6    CL=2与tAC示意图


JZ2440的裸机SDRAM代码执行流程:




© 著作权归作者所有

季风_落地窗
粉丝 4
博文 16
码字总数 16829
作品 0
杨浦
程序员
私信 提问
ARM开发步步深入之SDRAM编程示例

实验目的:改变“点灯大法”的执行地点,从NandFlash的Steppingstone转到SDRAM中执行,借此掌握存储控制器的使用。   实验环境及说明:恒颐S3C2410开发板H2410。H2410核心板扩展有64MB的S...

慎思
2012/08/08
272
0
内存类型

指内存所采用的内存类型,不同类型的内存传输类型各有差异,在传输率、工作频率、工作方式、工作电压等方面都有不同。目前市场中主要有的内存类型有 SDRAM、DDR SDRAM和RDRAM三种,其中DDR S...

晨曦之光
2012/03/09
59
0
内存核心频率、工作频率,等效频率、预读取技术详解

转自:https://blog.csdn.net/hitshaoqi/article/details/78121556 ■何为内存频率  对于内存条,相信大家并不陌生。因为内存已经成为每台电脑的必备配件,从EDO、SDRAM、DDR、DDR2再到现如...

WXXGoodJob
2018/08/20
0
0
小插曲:我和Nios II的故事

想必学习Altera家FPGA的小码农们都会有一个共同的困扰吧,那就是Nios II该不该学的问题。这个问题说白了,就是学Nios II到底有没有用。观点1、无用论,常常会听FPGA群里的某位前辈说道,目前...

qq_39210023
2017/07/16
0
0
OPENERP服务器的选择?

请问以下的二手服务器运行LAMP,100人同时在线的公司内部网络是否足够? CPU:INTEL XEON 3.6G (2M/800) 64位处理器 2颗 内存:DDR2 400 ECC REG 4GB(4*1024M)(IBM原装服务器内存) 硬盘:U...

WOON KAN YIP
2011/09/18
1K
6

没有更多内容

加载失败,请刷新页面

加载更多

MongoDB系列-解决面试中可能遇到的MongoDB复制集(replica set)问题

关注我,可以获取最新知识、经典面试题以及微服务技术分享   MongoDB复制集(replica set):MongoDB复制集维护相同数据集的一组mongod进程,复制集是生产部署的基础,具有数据冗余以及高可用...

ccww_
22分钟前
2
0
SpringBoot系列:Spring Boot集成Spring Cache,使用RedisCache

前面的章节,讲解了Spring Boot集成Spring Cache,Spring Cache已经完成了多种Cache的实现,包括EhCache、RedisCache、ConcurrentMapCache等。 这一节我们来看看Spring Cache使用RedisCache。...

杨小格子
31分钟前
2
0
OpenJDK之CountDownLatch

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CountDownLatch是Doug Lea在JDK1.5中引入的,作用就不详细描述了, await()方法,如果还有线程在执行,那么当前线程...

克虏伯
37分钟前
2
0
简单编程

1.编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。 #include<stdio.h>int main(){char name[3];char family[3];printf("Please input your name and family:\n...

电子工程197沈志初
42分钟前
4
0
详解Mysql分布式事务XA(跨数据库事务)

在开发中,为了降低单点压力,通常会根据业务情况进行分表分库,将表分布在不同的库中(库可能分布在不同的机器上)。在这种场景下,事务的提交会变得相对复杂,因为多个节点(库)的存在,可...

slagga
46分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部