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)。
 
SDRAM 基础知识总结
 
 
显然,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、 正常读写
 
 
SDRAM 基础知识总结
在输入 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,大家可以参照一下。(因为行列复用,所以地址线的数目一般是算双倍)