同步动态随机存取内存(synchronous dynamic random-access memory,简称SDRAM)是有一个
同步接口的
动态随机存取内存(
DRAM)。通常DRAM是有一个异步接口的,这样它可以随时响应控制输入的变化。而SDRAM有一个同步接口,在响应控制
输入前会等待一个
时钟信号,这样就能和计算机的
系统总线同步。时钟被用来驱动一个
有限状态机,对进入的指令进行
管线(Pipeline)操作。这使得SDRAM与没有同步接口的异步DRAM(asynchronous DRAM)相比,可以有一个更复杂的操作模式。
演变
SDRAM的发展已经经历了五代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM,第五代,DDR4 SDRAM。
第一代SDRAM采用单端(Single-Ended)
时钟信号,第二代、第三代与第四代由于
工作频率比较快,所以采用可降低干扰的差分时钟信号作为同步时钟。
SDR SDRAM的
时钟频率就是数据存储的频率,第一代内存用时钟频率命名,如pc100,
pc133则表明时钟信号为100或133MHz,数据读写速率也为100或133MHz。
之后的第二,三,四代DDR(Double Data Rate)内存则采用数据读写速率作为命名标准,并且在前面加上表示其DDR代数的符号,PC-即DDR,PC2=DDR2,PC3=DDR3。如PC2700是DDR333,其
工作频率是333/2=166MHz,2700表示
带宽为2.7G。
DDR的读写频率从DDR200到DDR400,DDR2从DDR2-400到DDR2-800,DDR3从DDR3-800到DDR3-1600。
很多人将SDRAM错误的理解为第一代也就是 SDR SDRAM,并且作为名词解释,皆属误导。
SDR不等于SDRAM。
Pin:模组或芯片与外部电路连接用的金属引脚,而模组的pin就是常说的“金手指”。
SIMM:Single In-line Memory Module,单列内存模组。内存模组就是我们常说的
内存条,所谓单列是指模组电路板与主板插槽的接口只有一列
引脚(虽然两侧都有金手指)。
DIMM:Double In-line Memory Module,双列内存模组。是我们常见的模组类型,所谓双列是指模组电路板与主板插槽的接口有两列引脚,模组电路板两侧的金手指对应一列引脚。
RIMM:registered DIMM,带寄存器的双线内存模块,这种内存槽只能插DDR或Rambus内存。
工作电压:
SDR:3.3V
DDR:2.5V
DDR2:1.8V
DDR3:1.5V
DDR4:1.2V
SDR
SDRAM内存条的金手指通常是168线,而DDR SDRAM
内存条的金手指通常是184线的。
几代产品金手指的缺口数及缺口位置也不同有效防止反插与错插,SDR SDRAM有两个缺口,DDR只有一个缺口。
关系
结构、时序与性能的关系
一、影响性能的主要时序参数
所谓的影响性能是并不是指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,以达到提高内存工作效率的目的。
二、增加PHR的方法
显然,这与预充电管理策略有着直接的关系,有两种方法来尽量提高PHR。自动预充电技术就是其中之一,它自动的在每次行操作之后进行预充电,从而减少了日后对同一L-Bank不同行寻址时发生冲突的可能性。但是,如果要在当前行工作完成后马上打开同一L-Bank的另一行工作时,仍然存在tRP的延迟。怎么办? 此时就需要L-Bank交错预充电了。
VIA的4路交错式内存控制就是在一个L-Bank工作时,对下一个要工作的L-Bank进行预充电。这样,预充电与数据的传输交错执行,当访问下一个L-Bank时,tRP已过,就可以直接进入行有效状态了。VIA声称可以跨P-Bank进行16路
内存交错,并以LRU算法进行预充电管理。
有关L-Bank交错预充电(存取)的具体执行在本刊2001年第2期已有详细介绍,这里就不再重复了。
L-Bank交错自动预充电/读取
时序图(可点击放大):L-Bank 0与L-Bank 3实现了无间隔交错读取,避免了tRP对性能的影响。
三、增加PFHR的方法
无论是自动预充电还是交错工作的方法都无法消除tRCD所带来的延迟。要解决这个问题,就要尽量让一个工作行在进行预充电前尽可能多的接收多个工作命令,以达到背靠背的效果,此时就只剩下CL所造成的读取延迟了(写入时没有延迟)。
如何做到这一点呢?这就是
北桥芯片的责任了。在上文的
时序图有一个参数tRAS(Active to Precharge Command,行有效至预充电命令间隔周期)。它有一个范围,对于PC133标准,一般是预充电命令至少要在行有效命令5个
时钟周期之后发出,最长间隔视芯片而异(基本在120000ns左右),否则工作行的数据将有丢失的危险。那么这也就意味着一个工作行从有效(选通)开始,可以有120000ns的持续工作时间而不用进行预充电。显然,只要北桥芯片不发出预充电(包括允许自动预充电)的命令,行打开的状态就会一直保持。在此期间的对该行的任何读写操作也就不会有tRCD的延迟。可见,如果北桥芯片在能同时打开的行(页)越多,那么PFHR也就越大。需要强调的是,这里的同时打开不是指对多行同时寻址(那是不可能的),而是指多行同时处于选通状态。我们可以看到一些SDRAM
芯片组的资料中会指出可以同时打开多少个页的指标,这可以说是决定其内存性能的一个重要因素。
Intel 845芯片组MCH的资料:其中表明它可以支持24个页面同时处于打开状态
但是,可同时打开的页数也是有限制的。从SDRAM的寻址原理讲,同一L-Bank中不可能有两个打开的行(S-AMP只能为一行服务),这就限制了可同时打开的页面总数。以SDRAM有4个L-Bank,北桥最多支持8个P-Bank为例,理论上最多只能有32个页面能同时处于打开的状态。而如果只有一个P-Bank,那么就只剩下4个页面,因为有几个L-Bank才能有同时打开几个行而互不干扰。Intel 845的MHC虽然可以支持24个打开的页面,那也是指6个P-Bank的情况下(845MCH只支持6个P-Bank)。可见845已经将同时打开页数发挥到了极致。
不过,同时打开页数多了,也对存取策略提出了一定的要求。理论上,要尽量多地使用已打开的页来保证最短的延迟周期,只有在数据不存在(读取时)或
页存满了(写入时)再考虑打开新的指定页,这也就是变向的连续读/写。而打开新页时就必须要关闭一个打开的页,如果此时打开的页面已是北桥所支持的最大值但还不到理论极限的话,就需要一个替换策略,一般都是用LRU算法来进行,这与VIA的交错控制大同小异。
规格
芯片和模块
记忆芯片
DDR-200:DDR-SDRAM 记忆芯片在 100MHz 下运行
DDR-266:DDR-SDRAM 记忆芯片在 133MHz 下运行
DDR-333:DDR-SDRAM 记忆芯片在 166MHz 下运行
DDR-400:DDR-SDRAM 记忆芯片在 200MHz 下运行(JEDEC制定的DDR最高规格)
DDR-500:DDR-SDRAM 记忆芯片在 250MHz 下运行(非JEDEC制定的DDR规格)
DDR-600:DDR-SDRAM 记忆芯片在 300MHz 下运行(非JEDEC制定的DDR规格)
DDR-700:DDR-SDRAM 记忆芯片在 350MHz 下运行(非JEDEC制定的DDR规格)
芯片模块
PC-1600内存模块指工作在 100MHz 下的DDR-200
内存芯片,其拥有 1.600GB/s 的
带宽PC-2100内存模块指工作在 133MHz 下的DDR-266内存芯片,其拥有 2.133GB/s 的带宽
PC-2700内存模块指工作在 166MHz 下的DDR-333内存芯片,其拥有 2.667GB/s 的带宽
PC-3200内存模块指工作在 200MHz 下的DDR-400内存芯片,其拥有 3.200GB/s 的带宽
公式
利用下列公式,就可以计算出DDR SDRAM时脉。
DDR I/II内存运作时脉:实际时脉*2。(由于两边数据同时传输,200MHz内存的时脉会以400MHz运作。)
标准公式:内存除频系数=时脉/200→*速算法:
外频*(除频频率/同步频率) (使用此公式将会导致4%的误差)
取址
(1)bank块地址---定位逻辑块
容量定义
引脚介绍
SDRAM在读写数据时重点注意以下信号:
(1)CLK:
时钟信号,为输入信号。SDRAM所有输入信号的逻辑状态都需要通过CLK的上升沿采样确定。
(2)CKE:时钟使能信号,为输入信号,高电平有效。CKE信号的用途有两个:一、关闭时钟以进入省电模式;二、进入自刷新状态。CKE无效时,SDRAM内部所有与输入相关的功能模块停止工作。
(3)CS#:
片选信号,为输入信号,
低电平有效。只有当片选信号有效后,SDRAM才能识别控制器发送来的命令。设计时注意上拉。
(4)RAS#:
行地址选通信号,为输入信号,低电平有效。
(5)CAS#:列地址选通信号,为输入信号,低电平有效。
(6)WE#:写使能信号,为输入信号,低电平有效。
当然还包括bank[…]地址信号,这个需要根据不同的型号来确定,同样为输入信号;地址信号A[…],为输入信号;数据信号DQ[…],为输入/输出双向信号;数据掩码信号DQM,为输入输出双向信号,方向与数据流方向一致,高电平有效。当其有效时,
数据总线上出现的对应数据字节被接收端屏蔽。
当今主流
DDR3内存。它属于SDRAM家族的内存产品,提供了相较于DDR2 SDRAM更高的运行效能与更低的电压,是DDR2 SDRAM(四倍资料率同步
动态随机存取内存)的后继者(增加至八倍),也是现时流行的内存产品。
DDR3 SDRAM为了更省电、
传输效率更快,使用了SSTL 15的I/O接口,运作I/O电压是1.5V,采用CSP、
FBGA封装方式包装,除了延续DDR2 SDRAM的ODT、OCD、Posted CAS、AL控制方式外,另外新增了更为精进进的CWD、Reset、ZQ、SRT、PASR功能。
CWD是作为写入延迟之用,Reset提供了超省电功能的命令,可以让DDR3 SDRAM
内存颗粒电路停止运作、进入超省电待命模式,ZQ则是一个新增的终端电阻校准功能,新增这个线路脚位提供了ODCE(On Die Calibration Engline)用来校准ODT(On Die Termination)
内部中断电阻,新增了SRT(Self-Reflash Temperature)可编程化温度控制内存时脉功能,SRT的加入让内存颗粒在温度、时脉和电源管理上进行优化,可以说在内存内,就做了电源管理的功能,同时让内存颗粒的稳定度也大为提升,确保内存颗粒不致于工作时脉过高导致烧毁的状况,同时DDR3 SDRAM还加入PASR(Partial Array Self-Refresh)局部Bank刷新的功能,可以说针对整个内存Bank做更有效的资料读写以达到省电功效。
工作原理
SDRAM之所以成为DRAM就是因为它要不断进行刷新(Refresh)才能保留住数据,因为刷新(Refresh)是DRAM最重要的操作。那么要隔多长时间重复一次刷新,公认的标准是,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000秒),也就是说每一行刷新的循环周期是64ms。这样刷新速度就是:64ms/行数量。我们在看内存规格时,经常会看到4096 Refresh Cycles/64ms或8192 Refresh Cycles/64ms的标识,这里的4096与8192就代表这个芯片中每个Bank的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15.625μs(微秒,1/1000毫秒),8192行时就为7.8125μs。HY57V561620为8192 refresh cycles / 64ms。
SDRAM是多Bank结构,例如在一个具有两个Bank的SDRAM的模组中,其中一个Bank在进行预充电期间,另一个Bank却马上可以被读取,这样当进行一次读取后,又马上去读取已经预充电Bank的数据时,就无需等待而是可以直接读取了,这也就大大提高了
存储器的访问速度。
为了实现这个功能,SDRAM需要增加对多个Bank的管理,实现控制其中的Bank进行预充电。在一个具有2个以上Bank的SDRAM中,一般会多一根叫做BAn的
引脚,用来实现在多个Bank之间的选择。
SDRAM具有多种工作模式,内部操作是一个复杂的
状态机。SDRAM器件的引脚分为以下几类。
(1)
控制信号:包括
片选、时钟、时钟使能、行列地址选择、读写有效及数据有效。
(2)地址信号:时分复用引脚,根据行列地址选择引脚,控制输入的地址为
行地址或列地址。。
(3)数据信号:双向引脚,受数据有效控制。
SDRAM的所有操作都同步于时钟。根据时钟上升沿控制管脚和地址输入的状态,可以产生多种输入命令。
激活命令。
预充命令。
读命令。
写命令。
带预充的读命令。
带预充的写命令。
自动刷新命令。
自我刷新命令。
突发停命令。
空操作命令。
根据输入命令,SDRAM状态在内部状态间转移。内部状态包括模式
寄存器设置状态、激活状态、预充状态、写状态、读状态、预充读状态、预充写状态、自动刷新状态及自我刷新状态。
SDRAM支持的操作命令有初始化配置、预充电、行激活、读操作、写操作、自动刷新、自刷新等。所有的操作命令通过控制线CS#、RAS#、CAS#、WE#和
地址线、体选地址BA输入。
1、行激活
行激活命令选择处于空闲状态存储体的任意一个行,使之进入准备读/写状态。从体激活到允许输入读/写命令的间隔时钟节拍数取决于内部特征延时和
时钟频率。HY57V561620内部有4个体,为了减少器件门数,4个体之间的部分电路是公用的,因此它们不能同时被激活,而且从一个体的激活过渡到另一个体的激活也必须保证有一定的时间间隔。
2、预充电
预充电命令用于对已激活的行进行预充电即结束活动状态。预充电命令可以作用于单个体,也可以同时作用于所有体(通过所有体预充电命令)。对于突发写操作必须保证在写入预充电命令前写操作已经完成,并使用DQM禁止继续写入数据。预充电结束后回到空闲状态,也可以再次被激活,此时也可以输入进入低功耗、自动刷新、自刷新和模式设置等操作命令。
预充电中重写的操作与刷新操作一样,只不过预充电不是定期的,而只是在读操作以后执行的。因为读取操作会破坏内存中的电荷。因此,内存不但要每64ms刷新一次,而且每次读操作之后还要刷新一次。
3、自动预充电
如果在突发读或突发写命令中,A10/AP位置为“1”,在读写操作完成后自动附加一个预充电动作。操作行结束活动状态,但在内部
状态机回到空闲态之前不能给器件发送新的操作命令。
4、突发读
突发读命令允许某个体中的一行被激活后,连续读出若干个数据。第一个数据在经过指定的CAS延时节拍后呈现在数据线上,以后每个时钟节拍都会读出一个新的数据。突发读操作可以被同体或不同体的新的突发读/写命令或同一体的预充电命令及突发停止命令中止。
5、突发写
突发写命令与突发读命令类似,允许某个体中的一行被激活后,连续写入若干个数据。第一个写数据与突发写命令同时在数据线上给出,以后每个时钟节拍给出一个新的数据,输入缓冲在突发数据量满足要求后停止接受数据。突发写操作可以被突发读/写命令或DQM数据输入屏蔽命令和预充电命令或突发停止命令中止。
6、自动刷新
由于
动态存储器存储单元存在漏电现象,为了保持每个存储单元数据的正确性,HY57V561620必须保证在64ms内对所有的存储单元刷新一遍。一个自动刷新周期只能刷新存储单元的一个行,每次刷新操作后内部刷新地址计数器自动加“1”。只有在所有体都空闲(因为4个体的对应行同时刷新)并且未处于低功耗模式时才能启动自动刷新操作,刷新操作执行期间只能输入空操作,刷新操作执行完毕后所有体都进入空闲状态。该器件可以每间隔7.8μs执行一次自动刷新命令,也可以在64ms内的某个时间段对所有单元集中刷新一遍。
7、自刷新
自刷新是
动态存储器的另一种刷新方式,通常用于在低功耗模式下保持SDRAM的数据。在自刷新方式下,SDRAM禁止所有的内部时钟和输入缓冲(CKE除外)。为了降低功耗,刷新地址和刷新时间全部由器件内部产生。一旦进入自刷新方式只有通过CKE变低才能激活,其他的任何输入都将不起作用。给出退出自刷新方式命令后必须保持一定节拍的空操作输入,以保证器件完成从自刷新方式的退出。如果在正常工作期间采用集中式自动刷新方式,则在退出自刷新模式后必须进行一遍(对于HY57V561620来说,8192个)集中的自动刷新操作。
8、时钟和时钟屏蔽
时钟信号是所有操作的同步信号,上升沿有效。时钟屏蔽信号CKE决定是否把时钟输入施加到内部电路。在读写操作期间,CKE变低后的下一个节拍冻结输出状态和突发地址,直到CKE变高为止。在所有的体都处于空闲状态时,CKE变低后的下一个节拍SDRAM进入低功耗模式并一直保持到CKE变高为止。
9、DQM操作
DQM用于屏蔽输入输出操作,对于输出相当于开门信号,对于输入禁止把总线上的数据写入
存储单元。对读操作DQM延迟2个
时钟周期开始起作用,对写操作则是当拍有效。