新闻  |   论坛  |   博客  |   在线研讨会
(一)DRAM 和SRAM 基础知识(ZT)
moran | 2008-08-06 15:02:34    阅读:9808   发布文章
 

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 等网站的资料对于我系统的了解这个方面的知识
有很大的帮助。本文主要以Ars technica 的文章为基础编写而成,为大家比较详细的介绍RAM 方面的知识。

虽然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 的过程中会讲到为什么会这样)


上面的示意图2 粗略的概括了一个基本的SRAM 芯片是如何工作的。SRAM 是“static RAM(静态随机存储器)”的简称,之所以这样命名是因为当数据被存入其中后不会消失(同DRAM 动态随机存储器是不同,DRAM 必须在一定的时间内不停的刷新才能保持其中存储的数据)。一个SRAM 单元通常由4-6 只晶体管组成,当这个SRAM 单元被赋予0 或者1 的状态之后,它会保持这个状态直到下次被赋予新的状态或者断电之后才会更改或者消失。SRAM 的速度相对比较快,而且比较省电,但是存储1bit 的信息需要4-6 只晶体管制造成本太高了(DRAM 只要1 只晶体管就可以实现)。

RAM 芯片

前面的介绍都相对比较简单、抽象。下面我们会结合实际的RAM 芯片进行介绍。在谈到这个问题的时候,我们会涉及到一个比较重要的技术:封装。你应该听说过诸如30 线SIMMS、72 线SIMMS 和168 线DIMMS 或者RIMMs 其中的一个或者几个术语吧。如果要解释这些术语之间的不同,就应该了解RAM 的封装技术。

SRAM 芯片

早期的SRAM 芯片采用了20 线双列直插(DIP:Dual Inline Package )封装技术,它们之所以具有这么多的针脚,是因为它们必须:

. 每个地址信号都需要一根信号线
. 一根数据输入线和一根数据输出线
. 部分控制线(Write Enable, Chip Select)
 . 地线和电源线

上图显示的是SRAM 芯片,但是并不是下面示意图中的SRAM 芯片


下面的是一个16K x 1-bit SRAM 芯片的针脚功能示意图: .


. A0-A13 是地址输入信号引脚
. CS 是芯片选择引脚在一个实际的系统中,一定具有很多片SRAM 芯片,所以需要选择究竟从那一片SRAM 芯片中写入或者读取数据
. WE 是写入启用引脚(如上表,在CS、WE 上面的线我没有写入,表示低电平有效或者是逻辑0 时有效):当SRAM 得到一个地址之后,它需要知道进行什么操作,究竟是写入还是读取,WE 就是告诉SRAM 要写入数据
. Vcc 是供电引脚
. Din 是数据输入引脚
. Dout 是数据输出引脚
. GND 是接地引脚
. Output Enable(OE):有的SRAM 芯片中也有这个引脚,但是上面的图中并没有。这个引脚同WE 引脚的功能是相对的,它是让SRAM 知道要进行读取操作而不是写入操作。

从Dout 引脚读取1bit 数据需要以下的步骤:

SRAM 读取操作

1)通过地址总线把要读取的bit 的地址传送到相应的读取地址引脚(这个时候/WE 引脚应
该没有激活,所以SRAM 知道它不应该执行写入操作)

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 和SRAM 之间有着明显的不同。首先你会看到地址引脚从14 根变为7 根,那么这颗16K DRAM 是如何完成同16K SRAM 一样的工作的呢?答案很简单,DRAM 通过DRAM 接口把地址一分为二,然后利用两个连续的时钟周期传输地址数据。这样就达到了使用一半的针脚实现同SGRAM 同样的功能的目的,这种技术被称为多路技术(multiplexing)。


那么为什么好减少地址引脚呢?这样做有什么好处呢?前面我们曾经介绍过,存储1bit 的数据SRAM 需要4-6 个晶体管但是DRAM 仅仅需要1 个晶体管,那么这样同样容量的SRAM 的体积比DRAM 大至少4 倍。这样就意味着你没有足够空间安放同样数量的引脚(因为针脚并没有因此减少4 倍)。当然为了安装同样数量的针脚,也可以把芯片的体积加大,但是这样就提高芯片的生产成本和功耗,所以减少针脚数目也是必要的,对于现在的大容量DRAM 芯片,多路寻址技术已经是必不可少的了。

当然多路寻址技术也使得读写的过程更加复杂了,这样在设计的时候不仅仅DRAM 芯片更加复杂了,DRAM 接口也要更加复杂,在我们介绍DRAM 读写过程之前,请大家看一张DRAM 芯片内部结构示意图:


在上面的示意图中,你可以看到在DRAM 结构中相对于SRAM 多了两个部分:由/RAS (Row Address Strobe :行地址脉冲选通器)引脚控制的行地址门闩线路(Row Address Latch) 和由/CAS(Column Address Strobe :列地址脉冲选通器)引脚控制的列地址门闩线路(Column Address Latch)。


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 控制器来控制
刷新,这样可以防止刷新操作干扰有规律的读写操作。在文章的开始,我曾经说过一般行的数目比列的数据少。现在我可以告诉为什么会这样了,因为行越少用户刷新的时间就会越少。
参与讨论
登录后参与讨论
推荐文章
最近访客