SDRAM
SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存储器,同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。
所谓的影响性能是并不是指SDRAM的带宽,频率与位宽固定后,带宽也就不可更改了。但这是理想的情况,在内存的工作周期内,不可能总处于数据传输的状态,因为要有命令、寻址等必要的过程。但这些操作占用的时间越短,内存工作的效率越高,性能也就越好。
非数据传输时间的主要组成部分就是各种延迟与潜伏期。通过上文的讲述,大家应该很明显看出有三个参数对内存的性能影响至关重要,它们是tRCD、CL和tRP。每条正规的内存模组都会在标识上注明这三个参数值,可见它们对性能的敏感性。
以内存最主要的操作——读取为例。tRCD决定了行寻址(有效)至列寻址(读/写命令)之间的间隔,CL决定了列寻址到数据进行真正被读取所花费的时间,tRP则决定了相同L-Bank中不同工作行转换的速度。现在可以想象一下读取时可能遇到的几种情况(分析写入操作时不用考虑CL即可):
1.要寻址的行与L-Bank是空闲的。也就是说该L-Bank的所有行是关闭的,此时可直接发送行有效命令,数据读取前的总耗时为tRCD+CL,这种情况我们称之为页命中(PH,Page Hit)。
2.要寻址的行正好是前一个操作的工作行,也就是说要寻址的行已经处于选通有效状态,此时可直接发送列寻址命令,数据读取前的总耗时仅为CL,这就是所谓的背靠背(Back to Back)寻址,我们称之为页快速命中(PFH,Page Fast Hit)或页直接命中(PDH,Page Direct Hit)。
3.要寻址的行所在的L-Bank中已经有一个行处于活动状态(未关闭),这种现象就被称作寻址冲突,此时就必须要进行预充电来关闭工作行,再对新行发送行有效命令。结果,总耗时就是tRP+tRCD+CL,这种情况我们称之为页错失(PM,Page Miss)。
显然,PFH是最理想的寻址情况,PM则是最糟糕的寻址情况。上述三种情况发生的机率各自简称为PHR——PH Rate、PFHR——PFH Rate、PMR——PM Rate。因此,系统设计人员(包括内存与北桥芯片)都尽量想提高PHR与PFHR,同时减少PMR,以达到提高内存工作效率的目的。
SDRAM 基本知识
SDRAM只有一组地址线,一组数据线,其中地址线分为行地址和列地址,它通过RAS行地址锁存器和CAS列地址锁存器来实现行列。很多人可能会跟我一样,算一下它的容量不符合自己板子,下面就是计算容量的公式。这也是公司比较正规的表示方法:
2,097,152-WORDS X 4BANKS X 16-Bits
4,194,304-WORDS X 4BANKS X 8-Bits
8,388,608-WORDS X 4BANKS X 4-Bits
SDRAM即同步动态RAM :所有输入信号均在时钟上升沿被采样,需要动态刷新保持数据
1、重要的连接信号:
a、 RAS:行地址锁存
b、 CAS:列地址锁存
c、 WE:写使能
d、 DQ0-DQ15:数据总线
e、 DQML、DQMH:数据I/O屏蔽,读模式下屏蔽输出缓冲,写模式下屏蔽输入缓冲,DQML控制DQ0-DQ7,DQMH控制DQ8—DQ15
f、 A10连接自动放电
2、扩展方式:
使用双片级联,将16位数据线扩展为32位,从而与32位CPU匹配,优化SDRAM性能。扩展后一个地址对应32位,从而一个地址单元以4Byte进行数据访问时,内存会忽略A0和A1,故SDRAM的A0接CPU数据线的A2。如果需要访问地址偏移为01的单个字节,通过DQML和DQMH信号进行帮助。
3、SDRAM的burst mode:一种利用内部列地址发生器来工作的高速读写模式,只要设置最开始的列地址,后面的地址就可以通过内部的列地址发生器来自动生成。
4、SDRAM的初始化:
SDRAM上电后使用前必须要经过一段初始化操作才可以使用。这个操作过程是标准的过程。这个过程如下:
a、 放电(precharge):关闭存储单元,使存储单元无效。
b、 自动刷新(auto-refresh)
c、 加载模式寄存器(Load Mode Register)
d、 正常读写
在输入precharge命令后,因为必须是对所有BANK进行Precharge,所以A10这个管脚要设置成高,因此在Precharge后面要做一个读的操作,这个操作最主要的是在SDRAM的寻址空间里设置的地址必须是A10是高的。在输入Auto-refresh命令后,一般要跟几句空操作或者读什么之类的,反正要达到延迟的目的,以使得SDRAM有时间来完成refresh。之后就是要设置SDRAM的模式寄存器,这个寄存器里一般设置了burst长度,CAS,burst类型,操作模式,还有是设置SDRAM是工作在单个读写操作还是burst操作下。而这个寄存器的设置也是通过地址线来设置的,所以在发出Load Mode Register命令后要做一个操作可是使得在SDRAM的地址线上出线的值就是你要设置的值。这里很有必要提醒的一下的是,这个操作是8位的操作。设置完模式寄存器后就进入正常操作模式。
5、基本的读写操作:
SDRAM的基本读操作需要控制线和地址线相配合地发出一系列命令来完成。先发出BANK激活命令(ACTIVE),并锁存相应的BANK地址(BA0、BA1给出)和行地址(A0~A12给出)。BANK激活命令后必须等待大于tRCD(SDRAM的RAS到CAS的延迟指标)时间后,发出读命令字。CL(CAS延迟值)个工作时钟后,读出数据依次出现在数据总线上。
在读操作的最后,要向SDRAM发出预充电(PRECHARGE)命令,以关闭已经激活的页。等待tRP时间(PRECHARGE)命令,以关闭已经激活的页。等待tRP时间(PRECHAREG命令后,相隔tRP时间,才可再次访问该行)后,可以开始下一次的读、写操作。SDRAM的读操作只有突发模式(Burst Mode),突发长度为1、2、4、8可选。SDRAM的基本写操作也需要控制线和地址线相配合地发出一系列命令来完成。先发出BANK激活命令(ACTIVE),并锁存相应的BANK地址(BA0、BA1给出)和行地址(A0~A12给出)。
BANK激活命令后必须等待大于tRCD的时间后,发出写命令字。写命令可以立即写入,需写入数据依次送到DQ(数据线)上。在最后一个数据写入后延迟tWR时间。发出预充电命令,关闭已经激活的页。等待tRP时间后,可以展开下一次操作。写操作可以有突发写和非突发写两种。突发长度同读操作。
:
6、AT91sam9260 SDRAM
型号MT48LC16M16A2,为4MB*4*16bit=32MB,采用双片级联构成32位64MB的SDRAM。SDRAM采用地址信号线复用。行寻址使用A0-A12,寻址范围8K字节;列寻址使用A0-A8,寻址范围512字节;bank寻址使用BA0-BA1,寻址四个bank。使用额外的四根信号线连接两片SDRAM的BA[1:0]。
AT91SAM9260使用SDRAMC初始化SDRAM初始化顺序如下:
a、 设置配置寄存器SDRAMC_CR,填入寄存器中的值单位均为时钟周期:
NC: Number of Column Bits,9
NR: Number of Row Bits,13
NB: Number of banks,4
CAS: CAS Latency,2-3
DBW:数据位宽32位
tWR:Write Recover Time,14ns
tRC: Row Cycle Delay, 默认值7
tRP: Row Precharge Delay,默认值3
tRCD:Row To Column Delay,15-20ns
tRAS:Active To Precharge Delay,37-44ns
tXSR:Exit Self Refresh To Active Delay,67-75ns
b、 在存储设备寄存器(SDRAMC_MDR)中设置存储类型为SDRAM
c、 提供200us的延迟
d、 向SDRAM设备发出NOP命令:设置SDRAM 模式寄存器中设置模式为1,向SDRAM任意地址执行写操作。
e、 向SDRAM设备发出放电命令:设置SDRAM 模式寄存器中设置模式为2,向SDRAM任意地址执行写操作。
f、 提供8个自动刷新周期:设置SDRAM 模式寄存器中设置模式为4,向SDRAM任意地址执行写操作。
g、 发出模式寄存器设置周期,配置SDRAM模式寄存器参数,尤其是CAS Latency和burst length。程序必须设置模式寄存器为模式3,对SDRAM执行写访问,地址中BA[1:0]必须为0
h、 进入正常模式:设置SDRAM 模式寄存器中设置模式为0,向SDRAM任意地址执行写操作。
在SDRAMC Rfresh Timer寄存器的count字段中写入刷新率,刷新率为刷新周期间的延迟,自动刷新周期7.81us*100MHz=781
SDRAM(Synchronous DRAM),因为Synchronous,所以所有信号都是和时钟信号同步。可以把SDRAM看成是EXCEL电子表格,通过行地址和列地址就唯一的锁定了一个单元格的内容,一般的SDRAM都有2个或者两个以上的Bank,就像一个EXCEL文档有2个或者两个以上的sheet,每个sheet又由行号和列号锁定单元格内容。
在实际工作中,bank地址和行地址一起发出,这个命令叫做行激活(Row Active),此后列地址和操作指令(读或写)也一起发出,这两组信号之间有个延迟。根据行业标准,定义此时间为从行有效到读/写命令发出之间的间隔tRCD,即RAS to CAS Delay(RAS至CAS延迟,RAS就是行地址选通脉冲,CAS就是列地址选通脉冲)。这是SDRAM一个很重要时序参数,Uboot初始化时候要配置。在列地址被选中后,数据传输过程被触发,但在这之前有个数据准备时间,即CL(CAS Latency),它也是一个重要的SDRAM参数,但该时间只是针对读操作,写操作没有这一时延。
SDRAM的数据传输基本上都是连续的,所以SDRAM中有突发传输的概念,突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(Burst Lengths,简称BL),在初始化之前要通过寄存器定义。 在进行突发传输时,只要指定起始列地址与突发长度,SDRAM就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得。
在数据读取完之后,为了腾出读出放大器以供同一L-Bank内其他行的寻址并传输数据,SDRAM芯片将进行预充电(precharge)的操作来关闭当前工作行。从开始关闭现有的工作行,到可以打开新的工作行之间的间隔就是tRP(Row Precharge command Period,行预充电有效周期)。
大家可以计算一下,三个规格的容量都是128M,大家可以参照一下。(因为行列复用,所以地址线的数目一般是算双倍)
评论
查看更多