DRAM内存原理1. 内存基础不管你信不信,RDRAM (Rambus、DDR SDRAM甚至是EDO RAM它们在本质上讲是一样的。
RDRAM、DDR RAM、SDRAM、EDO RAM都属于DRAM(Dynamic RAM,即动态内存。
所有的DRAM基本单位都是由一个晶体管和一个电容器组成。
请看下图:上图只是DRAM一个基本单位的结构示意图:电容器的状态决定了这个DRAM 单位的逻辑状态是1还是0,但是电容的被利用的这个特性也是它的缺点。
一个电容器可以存储一定量的电子或者是电荷。
一个充电的电容器在数字电子中被认为是逻辑上的1,而“空”的电容器则是0。
电容器不能持久的保持储存的电荷,所以内存需要不断定时刷新,才能保持暂存的数据。
电容器可以由电流来充电——当然这个电流是有一定限制的,否则会把电容击穿。
同时电容的充放电需要一定的时间,虽然对于内存基本单位中的电容这个时间很短,只有大约0.2-0.18微秒,但是这个期间内存是不能执行存取操作的。
DRAM制造商的一些资料中显示,内存至少要每64ms刷新一次,这也就意味着内存有1%的时间要用来刷新。
内存的自动刷新对于内存厂商来说不是一个难题,而关键在于当对内存单元进行读取操作时保持内存的内容不变——所以DRAM单元每次读取操作之后都要进行刷新:执行一次回写操作,因为读取操作也会破坏内存中的电荷,也就是说对于内存中存储的数据是具有破坏性的。
所以内存不但要每64ms 刷新一次,每次读操作之后也要刷新一次。
这样就增加了存取操作的周期,当然潜伏期也就越长。
SRAM,静态(StaticRAM不存在刷新的问题,一个SRAM基本单元包括4个晶体管和2个电阻。
它不是通过利用电容充放电的特性来存储数据,而是利用设置晶体管的状态来决定逻辑状态——同CPU中的逻辑状态一样。
读取操作对于SRAM不是破坏性的,所以SRAM不存在刷新的问题。
SRAM不但可以运行在比DRAM高的时钟频率上,而且潜伏期比DRAM短的多。
SRAM仅仅需要2到3个时钟周期就能从CPU缓存调入需要的数据,而DRAM 却需要3到9个时钟周期(这里我们忽略了信号在CPU、芯片组和内存控制电路之间传输的时间。
前面也提到了,SRAM需要的晶体管的数目是DRAM 的4倍,也就是说成本比DRAM高至少是4倍,在目前的售价SRAM每M价格大约是DRAM的8倍,是RAMBUS内存的2到3倍。
不过它的极短的潜伏期和高速的时钟频率却的确可以带来更高的带宽。
结构和功能(SDRAM内存最基本的单位是内存“细胞”——也就是我们前面展示给大家DRAM 基本单元示意图所示的部分,下面我们对这个部分通称为DRAM基本单元。
每个DRAM 基本单元代表一个“位”——Bit(也就是一个比特,并且有一个由列地址和行地址定义的唯一地址。
8个比特组成一个字节,它可代表256种组合(即2的八次幂,字节是内存中最小的可寻址单元。
DRAM基本单元不能被单独寻址——否则现在的内存将会更加复杂,而且也没有必要。
很多DRAM基本单元连接到同一个列线(Row line和同一个行线(Column line,组成了一个矩阵结构,这个矩阵结构就是一个Bank。
大部分的SDRAM芯片由4个Bank组成,而SDRAM DIMM (Dual Inline Memory Module 双列直插式可能由8或者16个芯片组成。
SDRAM DIMM有14条地址线和64 bit 数据线(如果一个DIMM内存使用8bit SDRAM芯片,那么你应该在内存条上看到8个芯片,当然有的DIMM 使用4 bit SDRAM芯片,那么你将会在内存条上看到16片。
以下是对插图的注释:Row Address Buffer:行地址缓冲Column Address Buffer:列地址缓冲Row DECODER:行解码器Column DECODER:列解码器Memory Array:内存阵SENSE AMP:传感放大器由上图可见一个Bank由内存阵列、sense amp、一个行解码器、一个列解码器组成。
如果要理解内存Bank内部工作状况,让我们看看当缓存没有命中后CPU从系统主内存中调用数据的情况。
CPU需要依次读取一个32字节的数据,首先向芯片组发出请求——这通常需要一个时钟周期芯片组将通过14条列地址线发送一个行地址,也就是这个行地址被发送到DIMM所有的芯片上。
拥有相同行地址的行被成为一个页面。
换句话说,当芯片组向DIMM发送行地址后,就在打开了DIMM上一个页面。
每一个内存bank都有一个传感放大器(sense ampplifier,用来放大从基本单元读出(或者写入内容时电荷。
传感放大器根据从芯片组发送来的行地址读出相应的数据,这个读出过程需要一定的时间这就是RAS到CAS的延迟,简称TRCD。
不同质量的SDRAM的TRCD需要2或者3个周期。
现在我们已经有了正确的行地址,不过还不知道确切的到那个基本单元去获得信息。
CAS延迟时间就是内存用于取得正确的列地址所需要的时间。
CAS 延迟时间一般时2或者3个时钟周期。
然后内存基本单元就把信号发送到DIMM的输出缓存,这样芯片组就可以读取它们了。
现在我们有了前8个字节的内容,以及在传感放大器中有了正确的行地址,等到下面的24个字节的过程就简单了。
这时就由内部计数器负责把下一个列地址的内存基本单元的内容发送到DIMM的输出缓存当中。
这样每个时钟周期都有8个字节传送到输出缓存中,这种模式就叫做“突发模式”。
可见,主内存的延迟时间(也就是所谓的潜伏期,从FSB到DRAM等于下列时间的综合:FSB同主板芯片组之间的延迟时间(+/- 1个时钟周期- 1个时钟周期芯片组同DRAM之间的延迟时间 (+/RAS到CAS延迟时间:RCD(2-3 个时钟周期,用于决定正确的行地址 CAS延迟时间 (2-3 时钟周期,用于决定正确的列地址另外还需要1个时钟周期来传送数据数据从DRAM输出缓存通过芯片组到CPU的延迟时间(+/- 2个时钟周期可以看出,一个真正的PC100的SDRAM CAS=2的内存取得最前八个字节的时间是9个时钟周期,而另外24个字节只是需要3个时钟周期,这样PC100的SDRAM取得32个字节的数据只是需要12个时钟周期。
对于同样的情况,也就是当二级缓存未命中的时候,CPU从内存取得数据所需要的延迟时间需要用如下方法计算:CPU倍频×内存延迟时间=CPU延迟时间。
如果500MHZ(5×100MHz的CPU需要5×9个延迟周期。
也就是说如果二级缓存没有命中,CPU需要45个时钟中期才能得到新的数据。
通过以上的介绍,我们已经理解的DRAM工作的基本原理,下面让我们了解一下决定RAM技术速度的因素。
还是延迟时间……究竟是什么决定DRAM速度?SDRAM是多bank结构,芯片组可以保持一部分曾经访问过的Bank的行地址,也就是说保持一部分已经被打开的“页面”。
如果需要访问的数据在同一列中,那么芯片组不需要等待传感器进行变换——这种情况就叫做页面命中。
这时RAS到CAS延迟时间就是0个时钟周期,只需要经过CAS延迟就能在内存缓冲调入正确数据。
所以,页面命中就意味着我们只需要等待列地址的确立,就能得到需要的数据了。
不过有的情况下,芯片组请求的内存页面不是处于打开的状态,这就叫做页面失效。
在这种情况下,RAS到CAS延迟时间将是2或者3时钟周期(根据内存的品质不同而不同。
这种情况就是前面我们讨论过的情形。
如果芯片组已经保持了某一个Bank的某一个行地址,也就是在某一个bank已经打开了一个页面,而请求的数据是位于同一个bank的不同行地址的数据,这种情况是最糟糕的。
这样就意味着传感放大器需要首先回写旧的行地址,然后再转换新的行地址。
回写旧的行地址所占用的时间叫做“预转换时间”(Precharge time,当遇到这种情况时,是最坏的情况。
带宽问题要理解延迟时间和带宽之间的联系,我们以PC100 SDRAM-222为例来说明。
第一个2代表CAS延迟时间是2个时钟周期,第二个2表示RAS到CAS 延迟时间,第三个2代表预转换时间。
我们假设不同类型的延迟。
在这个例子中我们假设发生了缓存页面失效,CPU等待调入新的需要的数据。
也就是,我们要研究从读取内存到填充缓存的这一个过程。
回写内存的过程很简单。
写入的数据可以首先调入缓存待用。
举例来说,KX-133芯片组具有4条从CPU到DRAM 写缓存的数据通道。
具有高速前端总线(FSB=200MHz和写缓存,CPU可以从芯片组的缓存中持续不断的得到信息,从而得以不间断的工作。
芯片组只要在内存总线未饱和的情况下,专心缓存同主内存之间的数据传输就可以了。
下面让我们看一看表一,这里列出了所有情况下的延迟时间。
第三列显示的是当第一列描述的情况发生时所需要的延迟时间。
比如,当出现“正常”页面失效时,需要两个时钟周期寻找行地址(简称RCD,再需要两个时钟周期找到相应的列地址(称为CAS延迟时间或者CL。
在第四列,你会发现我们把前一列的结果都加了5个时钟周期=2个时钟周期(地址从CPU传到芯片组再到DIMM需要2个时钟周期+1个时钟周期(数据传输到输出缓存需要1个时钟周期+2个时钟周期(数据返回到CPU 需要2个时钟周期。
最后一列显示的是延迟时间和带宽之间的关系。
比如,当页面命中的情况下,CAS=2的内存芯片可以在10个周期内提供32字节的数据,而内存时钟是100MHz(记住我们前面说过假设是PC100 SDRAM,很容易就能算出每秒可以传输320MB。
由此可见:延迟时间同带宽的关系非常密切,特别对于经常从缓存中调入数据的PC系统而言更是这样。
从上面的例子你会发现,即使是真正的PC100 SDRAM (222在最好的情况下(100%的页面命中率,它的带宽也不过达到最高理论带宽800 MB/s的40%。
对于PC133 SDRAM内存情况是怎么样的?表二列出的是PC133 CAS2、PC133 Cas3、PC100 CAS2情况下的带宽。
可以看出,PC133 CAS3完成任务比PC100 CAS2 还慢一个时钟周期,所以对于某些访问内存操作比较少的程序(也就是在没有超越PC 100 CAS2实际带宽上限的内存,配备PC100 CAS2同配备PC133 CAS2的系统表现是一样的。
对于具有512 KB二级缓存的Athlon来说,配备PC133和PC100所表现出来的差异不大。
而对于Duron,当访问内存的操作增多时,高带宽的PC133 CAS3将会显示出明显的优势。
我们曾经做过这方面的测试,对此进行过验证,因为本文是基本属于理论性的东西,所以就不进一步列举数据了。