1.SDRAM和SRAM的区别
SRAM不需要刷新电路即能保存它内部存储的数据。而SDRAM(Dynamic Random Access Memory)每隔一段时间,要刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,功耗较SDRAM大 [1],相同容量的SDRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积。同样面积的硅片可以做出更大容量的SDRAM,因此SRAM显得更贵。
异步SRAM,首先明确一下这里的异步的概念:将不依赖于外部时钟工作的设备称为异步设备,将不依赖于外部时钟工作的设备称为异步SRAM。
2.异步和同步的概念
异步—独立的时钟频率,读写受控于地址线与控制使能信号。
同步—所有工作是时钟脉冲边沿开始,地址线、数据线、控制线均与时钟脉冲配合。
同步就相当于是 当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。这样的话客户端需要一直等待。用户使用起来会有不友好。
异步就是,当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。
3.SDRAM芯片管脚图
以W9825GKH-6芯片为例
SDRAM信号线
4.SDRAM地址控制
SDRAM 包含有“A”以及“BS”两类地址线, A 类地址线是行 (Row) 与列 (Column) 共用的地址
总线, BS 地址线是独立的用于指定 SDRAM 内部存储阵列号 (Bank)。在命令模式下, A 类地址
线还用于某些命令输入参数。
5.SDRAM 的存储阵列
要了解 SDRAM 的储存单元寻址以及“A”、“BA”线的具体运用,需要先熟悉它内部存储阵列的结构,见图 SDRAM 存储阵列模型。
SDRAM 内部包含的存储阵列,可以把它理解成一张表格,数据就填在这张表格上。和表格查找一样,指定一个行地址和列地址,就可以精确地找到目标单元格,这是 SDRAM 芯片寻址的基本原理。这样的每个单元格被称为存储单元,而这样的表则被称为存储阵列 (Bank),目前设计的SDRAM 芯片基本上内部都包含有 4 个这样的 Bank,寻址时指定 Bank 号以及行地址,然后再指定列地址即可寻找到目标存储单元。
SDRAM 芯片向外部提供有独立的 BA 类地址线用于 Bank 寻址,而行与列则共用 A 类地址线。
6.SDRAM的寻址过程
通讯时当 RAS线为低电平,则“行地址选通器”被选通,地址线 A[12:0] 表示的地址会被输入到“行地址译码及锁存器”中,作为存储阵列中选定的行地址,同时地址线 BS[1:0] 表示的 Bank 也被锁存,选中了要操作的 Bank 号;接着控制 CAS 线为低电平,“列地址选通器”被选通,地址线 A[12:0] 表示的地址会被锁存到“列地址译码器”中作为列地址,完成寻址过程。
7.SDRAM的数据输入输出
若是写 SDRAM 内容,寻址完成后, DQ[15:0] 线表示的数据经过图一种 SDRAM 芯片的内部结构框图 标号中的输入数据寄存器,然后传输到存储器阵列中,数据被保存;数据输出过程相反。W9825GKH型号的 SDRAM 存储阵列的“数据宽度”是 16 位 (即数据线的数量),在与 SDRAM 进行数据通讯时, 16 位的数据是同步传输的,但实际应用中我们可能会以 8 位、 16 位的宽度存取数据,也就是说 16 位的数据线并不是所有时候都同时使用的,而且在传输低宽度数据的时候,我们不希望其它数据线表示的数据被录入。如传输 8 位数据的时候,我们只需要 DQ[7:0] 表示的数据,而 DQ[15:8] 数据线表示的数据必须忽略,否则会修改非目标存储空间的内容。所以数据输入输出时,还会使用 DQM[1:0] 线来配合,每根 DQM 线对应 8 位数据,如“DQM0(LDQM)”为低电平,“DQM1(HDQM)”为高电平时,数据线 DQ[7:0] 表示的数据有效,而 DQ[15:8] 表示的数据无效。
8.SDRAM的命令
控制 SDRAM 需要用到一系列的命令,见图SDRAM 命令表 。各种信号线状态组合产生不同的控制命令。
(1).命令禁止 (COMMAND INHBIT)
只要 CS 引脚为高电平,即表示“命令禁止” (COMMAND INHBIT),它用于禁止 SDRAM 执行新的命令,但它不能停止当前正在执行的命令。
(2).空操作(NO OPERATION)
“空操作” (NO OPERATION),“命令禁止”的反操作,用于选中 SDRAM,以便接下来发送命令。
(3).行有效(ACTIVE)
进行存储单元寻址时,需要先选中要访问的 Bank 和行,使它处于激活状态。该操作通过“行有效” (ACTIVE) 命令实现,见图行有效命令时序图 ,发送行有效命令时, RAS 线为低电平,同时通过 BA 线以及 A 线发送 Bank 地址和行地址。
(4).列读写(READ和WRITE)
行地址通过“行有效”命令确定后,就要对列地址进行寻址了。“读命令” (READ) 和“写命令”(WRITE) 的时序很相似,见图读取命令时序 ,通过共用的地址线 A 发送列地址,同时使用 WE引脚表示读/写方向, WE 为低电平时表示写,高电平时表示读。数据读写时,使用 DQM 线表示有效的 DQ 数据线。
(5).预充电(PRECHARGE)
SDRAM 的寻址具有独占性,所以在进行完读写操作后,如果要对同一个 Bank 的另一行进行寻址,就要将原来有效(ACTIVE)的行关闭,重新发送行/列地址。 Bank 关闭当前工作行,准备打开新行的操作就是预充电(Precharge)。预充电可以通过独立的命令控制,也可以在每次发送读写命令的同时使用“A10”线控制自动进行预充电。实际上,预充电是一种对工作行中所有存储阵列进行数据重写,并对行地址进行复位,以准备新行的工作。独立的预充电命令时序见图 PRECHARGE 命令时序 。该命令配合使用 A10 线控制,若 A10 为高电平时,所有 Bank 都预充电; A10 为低电平时,使用 BA 线选择要预充电的 Bank。
(6).自动刷新与自我刷新(AUTO REFRESH or SELF REFRESH)
SDRAM 要不断进行刷新 (Refresh) 才能保留住数据,因此它是 DRAM 最重要的操作。刷新操作与预充电中重写的操作本质是一样的。但因为预充电是对一个或所有 Bank 中的工作行操作,并且不定期,而刷新则是有固定的周期,依次对所有行进行操作,以保证那些久久没被访问的存储单元数据正确。刷新操作分为两种:“自动刷新”(Auto Refresh)与“自我刷新” (Self Refresh),发送命令后 CKE时钟为有效时 (低电平),使用自动刷新操作,否则使用自我刷新操作。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。对于“自动刷新”, SDRAM 内部有一个行地址生成器(也称刷新计数器)用来自动地依次生成行地址,每收到一次命令刷新一行。在刷新过程中,所有 Bank 都停止工作,而每次刷新所占用的时间为 N 个时钟周期 (视 SDRAM 型号而定,通常为 N=9),刷新结束之后才可进入正常的工作状态,也就是说在这 N 个时钟期间内,所有工作指令只能等待而无法执行。一次次地按行刷新,刷新完所有行后,将再次对第一行重新进行刷新操作,这个对同一行刷新操作的时间间隔,称为 SDRAM 的刷新周期,通常为 64ms。显然刷新会对 SDRAM 的性能造成影响,但这是它的DRAM 的特性决定的,也是 DRAM 相对于 SRAM 取得成本优势的同时所付出的代价。“自我刷新”则主要用于休眠模式低功耗状态下的数据保存,也就是说即使外部控制器不工作了,SDRAM 都能自己确保数据正常。在发出“自我刷新”命令后,将 CKE 置于无效状态 (低电平),就进入自我刷新模式,此时不再依靠外部时钟工作,而是根据 SDRAM 内部的时钟进行刷新操作。在自我刷新期间除了 CKE 之外的所有外部信号都是无效的,只有重新使 CKE 有效才能退出自我刷新模式并进入正常操作状态。
(7).加载模式寄存器(LOAD MODE REGISTER)
前面提到 SDRAM 的控制逻辑是根据它的模式寄存器来管理整个系统的,而这个寄存器的参数就是通过“加载模式寄存器”命令 (LOAD MODE REGISTER) 来配置的。发送该命令时,使用地址线表示要存入模式寄存器的参数“OP-Code”,各个地址线表示的参数见图模式寄存器解析图 。
模式寄存器的各个参数介绍如下:
Burst Length
Burst Length 译为突发长度,下面简称 BL。突发是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度。
上文讲到的读/写操作,都是一次对一个存储单元进行寻址,如果要连续读/写就还要对当前存储单元的下一个单元进行寻址,也就是要不断的发送列地址与读/写命令(行地址不变,所以不用再对行寻址)。虽然由于读/写延迟相同可以让数据的传输在 I/O 端是连续的,但它占用了大量的内存控制资源,在数据进行连续传输时无法输入新的命令,效率很低。
为此,人们开发了突发传输技术,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期外,其后每个数据只需一个周期的即可获得。其实我们在 EERPOM 及FLASH 读写章节讲解的按页写入就是突发写入,而它们的读取过程都是突发性质的。
非突发连续读取模式:不采用突发传输而是依次单独寻址,此时可等效于 BL=1。虽然也可以让数据连续地传输,但每次都要发送列地址与命令信息,控制资源占用极大。
突发连续读取模式:只要指定起始列地址与突发长度,寻址与数据的读取自动进行,而只要控制好两段突发读取命令的间隔周期 (与 BL 相同) 即可做到连续的突发传输。而 BL 的数值,也是不能随便设或在数据进行传输前临时决定。在初始化 SDRAM 调用 LOAD MODE REGISTER 命令时就被固定。 BL 可用的选项是 1、 2、 4、 8,常见的设定是 4 和 8。若传输时实际需要数据长度小于设定的 BL 值,则调用“突发停止” (BURSTTERMINATE) 命令结束传输。
BT
模式寄存器中的 BT 位用于设置突发模式,突发模式分为顺序 (Sequential) 与间隔 (Interleaved) 两种。在顺序方式中,操作按地址的顺序连续执行,如果是间隔模式,则操作地址是跳跃的。跳跃访问的方式比较乱,不太符合思维习惯,我们一般用顺序模式。顺序访问模式时按照“0-1-2-3-4-5-6-7”的地址序列访问。
CASLatency
模式寄存器中的 CASLatency 是指列地址选通延迟,简称 CL。在发出读命令 (命令同时包含列地址) 后,需要等待几个时钟周期数据线 DQ 才会输出有效数据,这之间的时钟周期就是指 CL, CL一般可以设置为 2 或 3 个时钟周期,见图说明图 。
CL 只是针对读命令时的数据延时,在写命令是不需要这个延时的,发出写命令时可同时发送要写入的数据。
Op Mode
OP Mode 指 Operating Mode, SDRAM 的工作模式。当它被配置为“00”的时候表示工作在正常
模式,其它值是测试模式或被保留的设定。实际使用时必须配置成正常模式。
WB
WB 用于配置写操作的突发特性,可选择使用 BL 设置的突发长度或非突发模式。
Reserved
模式寄存器的最后三位的被保留,没有设置参数。