查看文章 |
DRAM 和SRAM 基础知识 RAM(Random Access Memory )随机存取存储器对于系统性能的影响是每个PC 用户都非常清楚的,所以很多朋友趁着现在的内存价格很低纷纷扩容了内存,希望借此来得到更高的性能。不过现在市场是多种内存类型并存的,SDRAM、DDR SDRAM 、RDRAM 等等,如果你使用的还是非常古老的系统,可能还需要EDO DRAM 、FP DRAM (块页)等现在不是很常见的内存。 对于很多用户或者有一定经验的高级用户来说,他可能能说出Athlon XP 和Pentium 4 的主要不同点,能知道GeForce3 和Radeon 之间的区别,但是如果真的让他说出各种内存之间的实现机理的主要差别或者解释CAS 2 和CAS 3 之间的主要差别的话,就可能不是非常的清楚了。毕竟CPU 和显卡之类的东西更容易引起我们的兴趣。我个人在这方面的知识也是比较片面甚至是一知半解的,所以一直在收集这个方面的资料。在网上有很多很好的资源,其中Ars technica 、Aceshardware、simpletech 等网站的资料对于我系统的了解这个方面的知识 虽然RAM 的类型非常的多,但是这些内存在实现的机理方面还是具有很多相同的地方,所以本文的将会分为几个部分进行介绍,第一部分主要介绍SRAM 和异步DRAM (asynchronous DRAM),在以后的章节中会对于实现机理更加复杂的FP、EDO 和SDRAM 进行介绍,当然还会包括RDRAM 和SGRAM 等等。对于其中同你的观点相悖的地方,欢迎大家一起进行技术方面的探讨。 存储原理 为了便于不同层次的读者都能基本的理解本文,所以我先来介绍一下很多用户都知道的东西。RAM 主要的作用就是存储代码和数据供CPU 在需要的时候调用。但是这些数据并不是像用袋子盛米那么简单,更像是图书馆中用有格子的书架存放书籍一样,不但要放进去还要能够在需要的时候准确的调用出来,虽然都是书但是每本书是不同的。对于RAM 等存储器来说也是一样的,虽然存储的都是代表0 和1 的代码,但是不同的组合就是不同的数据。 让我们重新回到书和书架上来,如果有一个书架上有10 行和10 列格子(每行和每列都有0-9 的编号),有100 本书要存放在里面,那么我们使用一个行的编号+一个列的编号就能确定某一本书的位置。如果已知这本书的编号87,那么我们首先锁定第8 行,然后找到第7 列就能准确的找到这本书了。在RAM 存储器中也是利用了相似的原理。 现在让我们回到RAM 存储器上,对于RAM 存储器而言数据总线是用来传入数据或者传出数据的。因为存储器中的存储空间是如果前面提到的存放图书的书架一样通过一定的规则定义的,所以我们可以通过这个规则来把数据存放到存储器上相应的位置,而进行这种定位的工作就要依靠地址总线来实现了。对于CPU 来说,RAM 就象是一条长长的有很多空格的细线,每个空格都有一个唯一的地址与之相对应。如果CPU 想要从RAM 中调用数据,它首先需要给地址总线发送地址数据定位要存取的数据,然后等待若干个时钟周期之后,数据总
线就会把数据传输给CPU。下面的示意图可以帮助你很好的理解这个过程。 ![]() 上图中的小园点代表RAM 中的存储空间,每一个都有一个唯一的地址线同它相连。当地址解码器接收到地址总线送来的地址数据之后,它会根据这个数据定位CPU 想要调用的数据所在的位置,然后数据总线就会把其中的数据传送到CPU。
上面所列举的例子中CPU 在一行数据中每次知识存取一个字节的数据,但是在现实世界中是不同的,通常CPU 每次需要调用32bit 或者是64bit 的数据(这是根据不同计算机系统的数据总线的位宽所决定的)。如果数据总线是64bit 的话,CPU 就会在一个时间中存取8 个字节的数据,因为每次还是存取1 个字节的数据,64bit 总线将不会显示出来任何的优势,women 工作的效率将会降低很多。 从“线”到“矩阵” 如果RAM 对于CPU 来说仅仅是一条“线”的话,还不能体现实际的运行情况。因为如果实际情况真的是这样的话,在实际制造芯片的时候,会有很多实际的困难,特别是在需要设计大容量的RAM 的时候。所以,一种更好的能够降低成本的方法是让存储信息的“空格”排列为很多行--每个“空格”对应一个bit 存储的位置。这样,如果要存储1024bits 的数据,那么你只要使用32x32 的矩阵就能够达到这个目的了。很明显,一个32x32 的矩阵比一个1024bit 的行设备更紧凑,实现起来也更加容易。请看下图1: ![]() 图1
![]() 图2 知道了RAM 的基本结构是什么样子的,我们就下面谈谈当存储字节的过程是怎样的:上面的示意图1 显示的也仅仅是最简单状态下的情况,也就是当内存条上仅仅只有一个RAM 芯片的情况。对于X86 处理器,它通过地址总线发出一个具有22 位二进制数字的地址编码--其中11 位是行地址,另外11 位是列地址,这是通过RAM 地址接口进行分离的。行地址解码器(row decoder )将会首先确定行地址,然后列地址解码器(column decoder) 将会确定列地址,这样就能确定唯一的存储数据的位置,然后该数据就会通过RAM 数据接口将数据传到数据总线。另外,需要注意的是,RAM 内部存储信息的矩阵并不是一个正方形的,也就是行和列的数目不是相同的--行的数目比列的数目少。(后面我们在讨论DRAM 的过程中会讲到为什么会这样)
RAM 芯片 前面的介绍都相对比较简单、抽象。下面我们会结合实际的RAM 芯片进行介绍。在谈到这个问题的时候,我们会涉及到一个比较重要的技术:封装。你应该听说过诸如30 线SIMMS、72 线SIMMS 和168 线DIMMS 或者RIMMs 其中的一个或者几个术语吧。如果要解释这些术语之间的不同,就应该了解RAM 的封装技术。 SRAM 芯片 早期的SRAM 芯片采用了20 线双列直插(DIP:Dual Inline Package )封装技术,它们之所以具有这么多的针脚,是因为它们必须: . 每个地址信号都需要一根信号线
. 一根数据输入线和一根数据输出线
. 部分控制线(Write Enable, Chip Select)
. 地线和电源线
![]() 上图显示的是SRAM 芯片,但是并不是下面示意图中的SRAM 芯片
SRAM 读取操作 1)通过地址总线把要读取的bit 的地址传送到相应的读取地址引脚(这个时候/WE 引脚应 2)激活/CS 选择该SRAM 芯片 3)激活/OE 引脚让SRAM 知道是读取操作 第三步之后,要读取的数据就会从DOut 引脚传输到数据总线。怎么过程非常的简单吧?同样,写入1bit 数据的过程也是非常的简单的。 SRAM 写入操作 1)通过地址总线确定要写入信息的位置(确定/OE 引脚没有被激活) 2)通过数据总线将要写入的数据传输到Dout 引脚 3)激活/CS 引脚选择SRAM 芯片 4)激活/WE 引脚通知SRAM 知道要尽心写入操作 经过上面的四个步骤之后,需要写入的数据就已经放在了需要写入的地方。 DRAM 芯片 现在我们知道了在一个简单的SRAM 芯片中进行读写操作的步骤了了,然后我们来了解一下普通的DRAM 芯片的工作情况。DRAM 相对于SRAM 来说更加复杂,因为在DRAM 存储数据的过程中需要对于存储的信息不停的刷新,这也是它们之间最大的不同。下面让我们看看DRAM 芯片的针脚的作用。 最早、最简单也是最重要的一款DRAM 芯片是Intel 在1979 年发布的2188 ,这款芯片是16Kx1 DRAM 18 线DIP 封装。“16K x 1 ”的部分意思告诉我们这款芯片可以存储16384 个bit 数据,在同一个时期可以同时进行1bit 的读取或者写入操作。(很抱歉找不到这款芯片的实物图片,只好自己简单的画了一个示意图)
当然多路寻址技术也使得读写的过程更加复杂了,这样在设计的时候不仅仅DRAM 芯片更加复杂了,DRAM 接口也要更加复杂,在我们介绍DRAM 读写过程之前,请大家看一张DRAM 芯片内部结构示意图:
DRAM 读取过程 1)通过地址总线将行地址传输到地址引脚 2)/RAS 引脚被激活,这样行地址被传送到行地址门闩线路中 3)行地址解码器根据接收到的数据选择相应的行 ![]() 4)/WE 引脚被确定不被激活,所以DRAM 知道它不会进行写入操作
5)列地址通过地址总线传输到地址引脚
6)/CAS 引脚被激活,这样列地址被传送到行地址门闩线路中
7)/CAS 引脚同样还具有/OE 引脚的功能,所以这个时候Dout 引脚知道需要向外输出数据。
![]() 8) /RAS 和/CAS 都不被激活,这样就可以进行下一个周期的数据操作了。 其实DRAM 的写入的过程和读取过程是基本一样的,所以如果你真的理解了上面的过程就能知道写入过程了,所以这里我就不赘述了。(只要把第4 步改为/WE 引脚被激活就可以了)。 DRAM 刷新 我们已经提到过,DRAM 同SRAM 最大的不同就是不能比较长久的保持数据,这项特性使得这种存储介质对于我们几乎没有任何的作用。但是DRAM 设计师利用刷新的技术使得DRAM 称为了现在对于我们最有用处的存储介质。这里我仅仅简要的提及一下DRAM 的刷新技术,因为在后面介绍FP、EDO 等类型的内存的时候,你会发现它们具体的实现过程都是不同的。 DRAM 内仅仅能保持其内存储的电荷非常短暂的时间,所以它需要在其内的电荷消失之前就进行刷新直到下次写入数据或者计算机断电才停止。每次读写操作都能刷新DRAM 内的电荷,所以DRAM 就被设计为有规律的读取DRAM 内的内容。这样做有下面几个好处。
第一,仅仅使用/RAS 激活每一行就可以达到全部刷新的目的;
第二,DRAM 控制器来控制 刷新,这样可以防止刷新操作干扰有规律的读写操作。在文章的开始,我曾经说过一般行的数目比列的数据少。现在我可以告诉为什么会这样了,因为行越少用户刷新的时间就会越少。 |
本文引用通告地址:http://moran.spaces.eepw.com.cn/articles/trackback/item/32701








