首页 内存详解

内存详解

举报
开通vip

内存详解 深入了解内存 清水反应 Ars technica、Aceshardware、simpletech等 独家编译 原文链接:Ace's Guide to Memory Technology 原文作者:Johan De Gelas(johan@aceshardware.com) collected by stonefeng DRAM和 SRAM基础知识 RAM模块基础 DRAM读取过程 快页模式内存 SDRAM读取过程分析 SDRAM写入过程 Aceshardware所写的...

内存详解
深入了解内存 清水反应 Ars technica、Aceshardware、simpletech等 独家编译 原文链接:Ace's Guide to Memory Technology 原文作者:Johan De Gelas(johan@aceshardware.com) collected by stonefeng DRAM和 SRAM基础知识 RAM模块基础 DRAM读取过程 快页模式内存 SDRAM读取过程分析 SDRAM写入过程 Aceshardware所写的关于 SDRAM基本工作原理的文章 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控制器来控制 刷新,这样可以防止刷新操作干扰有规律的读写操作。在文章的开始,我曾经说过一般行的 数目比列的数据少。现在我可以告诉为什么会这样了,因为行越少用户刷新的时间就会越少。 RAM模块基础 在前面的一节文章中我们对于 DRAM和 SRAM的基本工作原理做了一些简单的介绍, 在我们所列举的例子中都是介绍了最基本的存储单元的工作模式,所以应该不难理解,看到 很多朋友对于这个方面的东西很感兴趣,今天我就继续介绍关于 RAM(Random Access Memory)的部分知识。理解这个部分知识,是更好的了解以后我们介绍各种 RAM 的实际 工作情况的基础。 在 SRAM或者 DRAM的每一个基本存储单位(也就是上一节中介绍用来存储 1bit信息 的存储单位)都只能存储 0或者 1这样的数据,而且在上一节中 IDT6167和 Intel 2188芯片 都仅仅只有 Din(数据输入)和 Dout(数据输出接口),而 CPU存取数据的时候是按照字节 (也就是 8bit)来存储的,那么 RAM究竟如何满足 CPU的这样的要求呢? 首先为了能存储 1字节(8 bit)的信息,就需要 8个 1bit RAM基本存储单元堆叠在一起, 这也意味着这 8颗芯片被赋予了同样的地址。下面的示意图可以帮助你比较形象的了解这一 点(下图所示的图例中仅仅画了 4个存储单元,大家当成 8个来看就可以了)。 通常这 8颗 1bit芯片是通过地址总线和数据总线在 PCB(印刷电路板)上连接而成的, 对于 CPU来说它就是一颗 8bit的 RAM芯片,而不再是独立的 8个 1 bit芯片。在上图所示 的地址总线位宽是 22bit,这样这个地址总线所能控制的存储模块的容量应该是 222=4194304bit,也就是 4MB的容量;数据总线的位宽是 8bit,就是通过刚才提到的 8个 1bit 的基本存储单元的 Dout并联在一起实现的--这样也能够满足 CPU的要求了。(对于这种 存储颗粒我们称之为 4194304 x 8 模块或者 4Mx8,注意这里的“M”不是“MByte”而是 “Mbit”)。 为了举例说明,我们用一条 TI(德仪公司)出品的 TM4100GAD8 SIMM内存为例来说 明,因为这种内存的构造相对比较简单,便于大家理解。TM4100GAD8基于 4M x 8模块制 造,容量 4MB,采用 30线 SIMM封装。如果前面我说的东西你看明白了,就应该知道这条 内存采用了 4Mx1 DRAM颗粒。下面的数据是我在 TI官方网站上找到的(目前很少有公司 的网站还提供自己以前产品的数据): • 构造:4194304 × 8 • 工作电压:5-V • 30线 SIMM(Single In-Line Memory Module:SIMM) • 采用 8片 4Mbit DRAM内存颗粒,塑料 SOJs封装 • 长刷新期 16 ms(1024周期) • 在上面的示意图中,A0–A10是地址输入引脚 • /CAS:行地址脉冲选通器引脚 • DQ1–DQ8:数据输入/数据输出引脚 • NC:空信号引脚 • /RAS:列地址脉冲选通器引脚 • VSS:接地引脚 • /W:写入启用引脚 • VCC 5V供电引脚 上面的电路示意图应该能够让我们更加清楚的理解这个问题,TM4100GAD8 由 8 片 4096x1bit芯片组成,VCC和 VSS为所有的芯片提供 5v的电压。每个芯片都具有/RAS、/CAS、 /W引脚同内存相应的引脚连通。每个芯片都具有不同的数据输出/输出接口。这样我们应该 就能够知道 RAM是如何满足 CPU存取数据的需要的了。 关于 Bank的问题 前面我们讲述的都是 8bit 的内存,现在这种东西我们基本上都接触不到了,更常用的 是 32bit、64bit或者 128bit。由于前面我们已经讲到了 4Mx1bit模块实现 bit输入输出的方法, 所以我们很容易想到我们把足够多的芯片放在一个模块中就可以了。不过在实际应用中,仅 仅这样做还是不行的,这里就需要引入 bank的概念,bank是由多个模块组成的。请看下面 的示意图: 上面的示意图显示的是由 4组 8bit模块组成的一个 bank,如果构成模块的是 4194304 x 1 芯片,那么每个模块的架构应该是 4194304x8(4MB),这样 4 个模块就能组成一个位宽为 32bit 的 bank,容量为 16MB。当存储数据的时候,第一模块存储字节 1,第二个模块存储字 节 2,第三个模块存储字节 3,第四个模块存储字节 4,第五个模块存储字节 5⋯⋯如此循环 知道达到内存所能达到的最高容量。 文章读到这里,我们应该能知道,当我们的系统使用这种类型的内存时,可以通过两种 方式来增加这种类型内存的容量。第一种就是通过增加每一个独立模块的容量来增加 bank 的容量,另外一个方法就是增加 bank 的数目。这样如果让这种类型的内存的容量提升到 32MB,可以把每个模块的容量从 4MB提升到 8MB或者增加 bank的数目。 前面我们用来举例的这种 30 线的 SIMM 一般是用在 486 级别的电脑上的,而现在的 Pentium级别的电脑所使用的内存同这个是不同的。而截止到现在,我的这篇文章还没有涉 及到我们目前所使用的内存,不过不要着急,相信充分的理解我现在所谈论的东西将有助于 你理解以后的内容。不过这里可以先告诉大家的是 Pentium级别的内存和 486系统的内存之 间的主要差异在于它们的 RAM芯片。 SIMM和 DIMM 前面我们既然提到了 30线的 DIMM,那么我们就来介绍一下 SIMM以及与之相对应的 DIMM。其实 SIMM 和 DIMM 都是内存条的封装形式的一种(这里说的不是芯片的封装形 式),因为每片内存颗粒无法直接同计算机进行连接并且通讯的,并且它们单颗颗粒的容量 有限而且涉及到前面提及的数据传输位宽等方面的原因,所以内存厂商需要通过一定的形式 把它们组织到一起,这样就产生了不同的内存封装形式。 首先我们来介绍一下 SIMM,如下图(上面一条是 30 线 DIMM 内存,下面一条是 72 线 DIMM内存): 在 DIMM内存中的颗粒采用了 DIP(Dual Inline Package:双列直插封装)封装,如上 图中黑色的芯片。早期的内存颗粒是直接焊接在主板上面的,这样如果一片内存出现故障, 那么整个主板都要报废了。后来在主板上出现了内存颗粒插槽,这样就可以更换内存颗粒了, 但是热膨胀的缘故,每使用一段时间你就需要打开机箱把内存颗粒按回插槽。 除了这些原因,更重要的是我们前面提到的数据总线位宽等方面的原因使得工程师着手 设计了 SIMM(Single Inline Memory Module)封装和 DIMM(Double Inline Memory Module) 的内存,它们通过主板上的内存插槽同主板进行通讯。这样的设计解决了原来所有的问题。 SIMM内存根据引脚分为 30线和 72线,目前我们都很少用到了。 SIMM Diagram SIMM根据内存颗粒分布可以分为单面内存和双面内存,一般的容量为 1、4、16MB的 SIMM 内存都是单面的,更大的容量的 SIMM 内存是双面的。在我们本文中所列举的 TM4100GAD8就是一款 30线的内存,它每次仅能传输 8bit的数据--从前面的示意图中我 们也知道这 30线引脚中有 11线是地址引线,8线是数据引线,还有其它的控制引线,对于 当时的封装工艺这已经是比较不错了。比较细心的读者会问为什么还有三条空信号引脚?因 为这种内存的数据输出总线位宽只有 8bit,所以即使将空信号引脚转换为地址总线提高寻址 范围,但是并没有足够多的引脚用于数据的输出。72线的 SIMM内存的容量不但可以更大, 而且数据总线的位宽也得到了极大的提高。一条 72线 SIMM内存的数据总线位宽是 32bit, 它的数据输出能力大大提高了。 DIMM是目前我们使用的内存的主要封装形式,比如 SDRAM、DDR SDRAM、RDRAM, 其中 SDRAM具有 168线引脚并且提供了 64bit数据寻址能力。DIMM的工作电压一般是 3.3v 或者 5v,并且分为 unbuffered和 buffered两种。上图上面的内存就是 168线的 SDRAM,而 下面的内存是 72线的 SIMM。需要指出的是在 SIMM和 DIMM内存之间不仅仅是引脚数目 的不同,另外在电气特性、封装特点上都有明显的差别,特别是它们的芯片之间的差别相当 的大。因为按照原来内存制造方法,制造这种内存的时候是不需要把 64个芯片组装在一起 构成一个 64bit 的模块的,得益于今年来生产工艺的提高和改进,现在的高密度 DRAM 芯 片可以具有不止一个 Din和 Dout信号引脚,并且可以根据不同的需要在 DRAM芯片上制造 4、8、16、32或者 64条数据引脚。 如果一个 DRAM 芯片具有 8个数据引脚,那么这个基本储存单元一次就可以输出 8bit 的数据,而不像是在原来的 TM4100GAD8 SIMM芯片中每次仅仅能输出 1bit数据了。这样 的话,如果我们需要制造一个同 TM4100GAD8一样容量的内存,那么我们可以不使用前面 所使用的 4M x 1bit芯片,而是采用 1M x 8bit芯片,这样仅仅需要 4片芯片就可以得到一个 容量为 4MB,位宽为 32bit的模组。芯片数目减少最直接的好处当然是可以减少功耗了,当 然也简化了生产过程。 下面的图只是为了说明这个问题而制作的,它展示的是一种 72线的 4MB SIMM内存, 采用了 4片 1Mx8bit DRAM芯片。但是至于是不是真的有这样的一款产品我也不能确定, 因为目前为之我找不到实际的产品相关资料,所以这个只是为了帮助大家理解这个问题,不 要对于是否有这样的产品而斤斤计较。 这样一来,只要 4 片采用具有 8bit 位宽的内存颗粒就可以达到同样的容量,当然这样 的内存条工作原理在理解的过程中比原来略微复杂一点。我们看到在上面的 4Mbit×8bit芯 片中,依然还是有 10条地址总线引脚,但是/CAS和/RAS引脚却从原来的 1条增加到 4条。 当然数据输入输出引脚线数目是 32条。其实 TI公司的 TM124BBJ32F和 TM248CBJ32F前 面的我所列举的例子是比较相似的: 这两款内存的容量均为 4MB,位宽为 32bit,当然也属于 DRAM了。TM124BBJ32F内存 为单面而 TM248CBJ32F双面的两种模式,不过其中单面 TM124BBJ32F有些奇怪,在它的 内存条上只有两颗内存芯片,这样每颗内存芯片应该是 2MBx16bit。另外,双面的 TM248CBJ32F由 4片 1Mx8bit DRAM芯片组成。 上面的示意图和表格是 TM124BBJ32F和 TM248CBJ32F的示意图和表格,我们可以很 容易的理解它们的工作模式。 对于 TM124BBJ32F来说:因为是 2MBx16bit的颗粒,所以当 RAS0引脚为低电平时, DQ0-DQ15输出/输入引脚有效,所以它可以同时传送一个 16bit数据;让 RAS1引脚为低电 平时,DQ16-DQ31输出/输入引脚有效,也可以一次传送一个 16bit数据。 对于 TM248CBJ32F 来说:因为是 1MBx8bit 的颗粒,所以情况同前面是不同的,当 RAS0 引脚为低电平时,DQ0-DQ7 输出/输入引脚有效,所以它可以同时传送一个 8bit 数据;让 RAS1引脚为低电平时,DQ6-DQ15输出/输入引脚有效,也可以一次传送一个 8bit数据;让 RAS2引脚为低电平时,DQ16-DQ23输出/输入引脚有效,也可以一次传送一个 8bit数据; 让 RAS3引脚为低电平时,DQ24-DQ31输出/输入引脚有效,也可以一次传送一个 8bit数据 (注意这里虽然都是控制输出 8bit或者 16bit地址,但是它们之间分别代表的含义是不同的)。 当然在确定地址的时候,还是需要 CAS控制电路配合的。 今天我们对于 32bit的内存做了进一步的了解。这些东西虽然对于现在的用户似乎有些 不太实际,但是对于进一步了解现在的内存还是有相当的帮助的。(未完待续⋯⋯) DRAM读取过程 这个系列的文章已经写了两篇了,但是我们几乎还没有谈到我们都关心的一些问题,比 如 CAS-2 和 CAS-3 之间的区别什么的。现在我们对于 DRAM 的基础知识已经有了一个基 本的了解,下面的文章就是给大家介绍一些现代的内存技术。 DRAM读取过程 其实我们在以前的文章中已经讨论过 DRAM的读写过程了,不过对于内存比较了解的 朋友都会发现在前面的介绍中仅仅是对于内存的大致读取过程进行了简述,很多重要的细节 都没有详细的讨论。所以我们在文章的这一节的内容中对于这个过程进行详细的讨论。下面 就是异步内存的读取过程的步骤,因为异步 DRAM的运行并不需要同处理器同频,它的时 序信号控制、寻址等操作基本上说是独立控制的,也就是由内存芯片本身所控制,所以在讨 论起来比较简单,我们仅仅需要考虑 DRAM本身的情况就可以了(这个系列的文章也是本 着循序渐进的原则让大家更好的理解内存的工作原理的):[BLOCKQUOTE] 1) 行地址通过地址总线传输到地址引脚 2) /RAS引脚被激活,列地址就会被放入行地址选通电路( Row Address Latch:在文章的 前面部分我们把它翻译为列地址门闩电路) 3) 行地址解码器( Row Address Decoder)选择正确的行然后送到传感放大器( sense amps) 4) /WE引脚此时不被激活,所以 DRAM知道它们不是进行写操作 5) 列地址通过地址总线传输到地址引脚 6) /CAS引脚被激活,列地址就可以被送到列地址选通器( Column Address Latch) 7) /CAS引脚也被当作输出启动信号( Output Enable),因为一旦 /CAS信号被放到传 感放大器,就因为这时需要的数据已经找到,所以 Dout针脚开始有效,数据可以从内存中 传输到系统了 8) /RAS和 /CAS引脚停止激活,等待下一个读取命令[/BLOCKQUOTE] 在内存的读取过程中,需要我们考虑的有两个主要类型的延迟。第一类的是连续的 DRAM 读操作之间的延迟。内存不可能在进行完一个读取操作之后就立刻进行第两个读取 操作,因为 DRAM的读取操作包括电容器的充电和放电另外还包括把信号传送出去的时间, 所以在两个读取操作中间至少留出足够的时间让让内存进行这些方面的操作。 在连续的两次读取操作之间,第一种类型的延迟包括 /RAS和 /CAS预充电延迟时间。 在 /RAS被激活并且失活之后,你必须给它足够的时间为下次激活做好准备。下图可以帮助 你更好了解这个过程。 CAS预充电的过程是一样的,你只要把上图种的“RAS”换成“CAS”就可以了。 从前面我们介绍的 DRAM读取过程的 8个步骤中,我们可以了解到 /RAS和 /CAS预 充电过程是依次进行的,所以我们在一定的时间里只能进行有限次数的读取操作。特别是在 第 8个步骤中,当一次读取操作周期结束之后,我们必须让 /RAS和/CAS引脚都失活。实 际上,在你让它们失活之后,必须等待预充电过程结束之后才能开始下一个操作(或者还是 读取操作、或者是写入操作、或者是刷新操作)。 当然在两次读取操作之间的预充电时间不是限制 DRAM速度的唯一因素。第二种延迟 类型是叫做内部读取延迟( inside-the-read)。这种延迟同同两次读取操作之间的延迟非常的 相似,但是不是由停止 /RAS和/CAS激活而产生的,而是由于要激活 /RAS和/CAS而产生 的。比如,行存取时间(tRAC)--它就是在你激活 RAS 和数据最终出现在数据总线之间的 时间。同样的列存取时间 (tCAC)就是激活 /CAS 引脚和数据最终出现在数据总线上之间的 时间。下面的示意图可以帮助你更好的理解这两种类型的延迟: 上面的图仅仅是一个示意图,下面的时序图可以帮助你了解不同的延迟时间发生的顺 序: 现在让我们花一点时间结合前面介绍的读取过程来研究一下上面的这张示意图: 1) 首先看上图第一行,在预充电期间行地址通过地址总线传输到地址引脚,这个期间 RAS未被激活,在第三行 Address BUS中我们看到数据在这个期间正在行地址总线上,这 个期间 CAS也处于预充电状态; 2) 依然看上图第一行, /RAS引脚被激活(RAS Active,灰色的部分),列地址就会被 放入行地址选通电路(第三行 Address Bus中所示),这个期间 CAS依然处于预充电状态;在 /RAS被激活的同时,tRAC(行存取时间)开始--如上图最后一行 Data Bus所示。 3) 在/RAS被激活以后,行地址解码器( Row Address Decoder)选择正确的行然后送 到传感放大器( sense amps) 4) 在这个期间/WE 引脚一直处于不激活的状态,所以 DRAM 知道它们不是进行写操 作--这个状态将一直持续到开始执行写操作才结束 5) 列地址通过地址总线传输到地址引脚 6) /CAS 引脚被激活(如上图第三行),列地址就可以被送到列地址选通器( Column Address Latch) ,这个时候 tCAC(列地址访问时间)开始计时 7) 在/CAS 处于激活状态期间的末尾,/RAS 停止激活--也就大约在这个时间附近找 到的数据被传送到数据总线进行数据传送(如图 data Bus),在数据总线进行数据传输的过程 中,地址总线是处于空闲状态的,它并不接受新的数据--在数据开始创送的同时 tRAC和 tCAC都结束了。 8)就在数据在数据总线上传输期间,/CAS引脚也被停止激活--就是得到一个高电平, 从而开始进入到预充电期。RAS 和 CAS 会同时处于预充电期,直到下次/RAS 被激活进入 到下一个读取操作的周期。 相信经过这样的说明大家应该了解 DRAM的读取过程了。 在这个基础上我们就可以开 始认识 SIMM或者 DIMM的潜伏期( latency)问题了。首先我们来继续澄清一下几个概念。 DRAM潜伏期类型分为两种:访问时间( access time)和周期时间(cycle time)。其中 访问时间(access time)同前面我们谈论的第二种类型的延迟有关,也就是同读取周期中的 延迟时间;而周期时间(cycle time)同我们前面谈论的第一种类型的延迟有关,也就是受 到两个读取周期之间的延迟时间影响。当然潜伏期的时间很短,都是用纳秒来衡量的。 对于异步 DRAM芯片,访问时间就是从行地址到达行地址引脚的时间起截至到数据被 传输到数据引脚的时间段。这样,访问时间为 60 纳秒的 DIMM 意味着当我们下达读取数 据的命令后,地址数据被送到地址引脚之后要等待 60纳秒才能达到数据输出引脚。周期时 间,从字面上理解就是从两个连续读取操作之间的时间间隔。如何尽可能的减小 DRAM的 周期时间和访问时间是我们这篇文章后半部分将要详细的讨论的问题。 我们平时说到 DRAM内存是多少多少纳秒,这里指的一般是访问时间(我们也会对于为 什么采取这样的标称方法进行解释)。我们都知道访问时间越短,意味着内存工作频率会越 高。当然内存工作频率越高,意味着可以适应外频更高的处理器。如果处理器的时钟周期较 短,而DRAM的潜伏期较长,处理器在很多时间里都是等到DRAM传送数据。因此当DRAM 一定时,比如时潜伏期为 70纳秒,那么一颗 1GHz PIII等待数据的时间将会比一颗 400MHz PII 处理器长。当然出现这样的现象是每个用户都不愿意看到的,当的使用的内存速度越慢 或者说你的处理器相对越快,你的处理器就会由更多的性能都被这样的等待浪费了。(未完 待续⋯⋯) 快页模式内存 在《深入了解内存(三)——DRAM读取过程》一文中我们介绍了 DRAM的详细的读 取过程,在本文的这一节中我们将要开始了解 FPM DRAM( Fast Page Mode DRAM),也 就是我们常说的快页内存。之所以称之为快页内存,因为它以 4字节突发模式传送数据,这 4个字节来自同一列或者说同一页。 如何理解这种读取方式呢?FPM DRAM如果要突发 4个字节的数据,它依然需要依次 的读取每一个字节的数据,比如它要读取第一个字节的数据,这个时候的情况同前面介绍的 DRAM 读取方式是一样的(我们依然通过读取下面的 FPM 读取时序图来了解它的工作方 式): 1. 首先行地址被传送到行地址引脚,在/RAS引脚被激活之前,RAS处于预充电状态, CAS也处于预充电状态,当然/WE此时依然是高电平,FPM至少知道自己不会进行 写操作。 2. /RAS引脚被赋予低电平而被激活,行地址被送到行地址选通器,然后选择正确的行 送到传感放大器,就在/RAS引脚被激活的同时,tRAC开始计时 3. CAS一直处于预充电状态,直到列地址被传送到列地址引脚并且 /CAS引脚得到一 个低电平而被激活(tCRC 时间开始计时),然后下面的事情我们也应该很清楚了, 列地址被送到列地址选通器,然后需要读取的数据位置被锁定,这个时候 Dout引脚 被激活,第一组数据就被传送到数据总线上 4. 对于原来介绍的 DRAM,这个时候一个读取周期就结束了,不过对于 FPM则不同, 在传送第一组数据期间,CAS失活(RAS依然保持着激活状态)并且进入预充电状 态,等待第二组列地址被传送到列地址引脚,然后进行第二组数据的传输,如此周 而复始直至 4组数据全部找到并且传输完毕 5. 当第四组数据开始传送的时候,RAS和 CAS相继失活进入到预充电状态,这样 FPM 的一个完整的读取周期方告结束。FPM之所以能够实现这样的传输模式,就是因为 所需要读取的 4 个字节的行地址是相同的但是列地址不同,所以它们不必为了得到 一个相同的列地址而去做重复的工作。 6. 这样的工作模式显然相对于普通的 DRAM模式节省了很多的时间,特别是节省了 3 次 RAS预充电的时间和 3个 tRAC时间,从而进一步提高的效率。 我想你一定看到过诸如 6-3-3-3这样的内存标注方法,其中的 6表示从最初状态读 取第一组数据需要 6个时钟周期,而读取另外三个数据仅仅需要 3个时钟周期就能达到目的 了。 需要特别指出的是,在上面的时序图中,我们并没有标注出 FPM DRAM进行第二个、 第三个、第四个数据输出的前进行新的列地址选通的时间,但是从上面的示意图中我们可以 看到 Col.2同 Data1和 D2之间都没有重叠,所以这三个数据的输出是进行完毕一个再进行 的另一个,因此再上一次数据传输完毕到下一次列地址传输之间还有一点小小的延迟。请看 下图: EDO DRAM( Extended Data Out DRAM:扩展数据输出 DRAM)在介绍 FPM的读 取过程的最后我着重提到了 FPM DRAM 是在上一次的数据读取完毕才会进行下一个数据 的读取,但是对于 EDO DRAM却是完全不一样的。 EDO DRAM可以在输出数据的同时进 行下一个列地址选通,我们依然结合下面的 EDO读取时序图来了解 EDO DRAM读取数据的 过程: 1. RAS在结束上一次的读取操作之后,进入预充电状态,当接到读取数据的请求之后, 行地址首先通过地址总线传输到地址引脚,在这个期间 CAS依然处于预充电状态 2. /RAS引脚被激活,列地址开始经过行地址选通电路和行地址解码器进行行地址的选 择,就在这个同时 tRAC 周期开始,因为是读取操作/WE 引脚一直没有被激活,所 以内存知道自己进行的是读取操作而不是写操作 3. 在 CAS依然进行预充电的过程中,列地址被送到列地址选通电路选择出来合适的地 址,当/CAS被激活的同时 tCAC周期开始,当 tCAC结束的时候,需要读取的数据 将会通过数据引脚传输到数据总线。 4. 从开始输出第一组数据的时候,我们就可以体会到 EDO同 FPM之间的区别了:在 tCAC 周期结束之前,CAS 失活并且开始了预充电,第二组列地址传输和选通也随 即开始,第一数据还没有输出完毕之前,下一组数据的 tCAC 周期就开始了--显 然这样进一步的节省了时间。就在第二组数据输出前,CAS再次失活为第三组数据 传输列地址做起了准备⋯⋯ 5. 如此的设计使得 EDO内存的性能比起 FPM的性能提高了大约 20-40%. 6. 正是因为 EDO的速度比 FPM快,所以它可以运行在更高的总线频率上。所以很多 的 EDO RAM可以运行在 66MHz的频率上,并且一般标注为 5-2-2-2。 SDRAM 主要谈论我们大家都能接触到的 SDRAM 内存了,首先得承认 SDRAM 同我们之前介 绍的异步 DRAM是差别非常大的。它的基本原理同前面提到的 DRAM还是基本一样的(比 如基本存储单元都是按照阵列排列,都有 RAS和 CAS的概念),不过这些存储单元的组织 和控制同 DRAM就具有相当大的差别了。在前面我们讨论其它类型的内存都是采用了以具 体的产品为例来讲述的,所以这里我们依然采用这种形式,这次我们以 MICRON MT48LC4M4A1 16MB SDRAM为例。(如果你感兴趣可以去 www.micronsemi.com网站查找 相应的资料)。 如果你还记得我们在前面介绍的 DRAM相关内容,那么应该还记得 DRAM是以 bank 来组织存储单元的。因为每个内存 bank的位宽是同数据总线阿位宽一样的。所以对于 SIMM, 你必须把多个 SIMM放在一个 bank之中来满足 32bit或者 64bit数据总线的要求。DIMM具 有更多阿引脚,所以单个 DIMM 可以提供足够的同数据总线相适应的位宽--这样每个 bank 只要一个 DIMM 就可以了。而且 SDRAM 更进一步的是可以在单个的 DIMM 中存在 多个 bank,这样不但能够满足数据总线的需要还能进一步的提高总线的性能。 下面就让我来解释一下: 在我们前面讨论的 DRAM读取方式中,当一个读取周期结束后,/RAS和/CAS都必须 停止激活然后有一个短暂的预充电期才能进入到下一次的读取周期中。但是一个具有两个 bank 的 SDRAM 的模组中,其中一个 bank 在进行预充电的期间另一个 bank 却可以被调用 --这样当你需要读取已经预充电的 bank 的数据时,就无需等待而是可以直接调用了。为 了实现这个功能,SDRAM 就需要增加对于多个 bank 的管理,这样就可以实现控制其中的 bank进行预充电,并且在需要使用的时候随时调用了。这样一个具有两个 bank的 SDRAM 一般会多一根叫做 BA0 的引脚,实现在两个 bank 之间的选择--一般的 BA0 是低电平表 示 Bank0被选择,而 BA0是高电平 Bank1就会被选中。 可见,虽然 SDRAM 在基本的原理上比如基本存储的结构都是基本一样的,但是在整 个内存架构的组织上是不同的,而且在存储单元的控制上也是有着相当大的区别的。因为异 步 DRAM同处理器和芯片的时钟并没有什么关系,所以芯片组只能按照 DRAM内存的时序 要求“被动”的操作 DRAM控制引脚。SDRAM因为要同 CPU和芯片组共享时钟,所以芯 片组可以主动的在每个时钟的上升沿发给引脚控制命令。 上图显示的就是MT48LC4M4A1 16MB SDRAM内存颗粒的引脚示意图,它采用了 50 引脚的 TSOP 封装,符合 PC100 规范。这种内存颗粒将同系统时钟同步运行。这种内存颗 粒的架构 1Mx16-512Kx16x2,每 bank行地址数目是 11,列地址数目是 8。我们首先来介绍 一下这种内存颗粒的引脚定义: • A0-A10:地址输入引脚,当 ACTIVE 命令和 READ/WRITE 命令时,来决定使用 某个 bank内的某个基本存储单元。 • CLK:时钟信号输入引脚 • CKE:Clock Enable,高电平时有效。当这个引脚处于低电平期间,提供给所有 bank 预充电和刷新的操作 • /CS:芯片选择(Chip Select),SDRAM DIMM一般都是多存储芯片架构,这个引脚 就是用于选择进行存取操作的芯片 • /RAS:行地址选择(Row Address Select) • /CAS:列地址选择(Column Address Select) • /WE:写入信号(Write Enable) • DQ0-DQ15:数据输入输出接口 • BA:Bank地址输入信号引脚,BA信号决定了由激活哪一个 bank、进行读写或者预 充电操作;BA也用于定义Mode寄存器中的相关数据。 • NC:空引脚 • DQM: 这个引脚的主要用于屏蔽输入/输出,功能相当于/OE引脚( Output Enable)。 • VDDQ:DQ供电引脚,可以提高抗干扰强度 • VSSQ:DQ供电接地引脚 • VSS:内存芯片供电接地引脚 • VDD:内存芯片供电引脚,提供+3.3V ±0.3V (上面的列表项目和示意图中,前面标有“/”或者“#”标记的表示在低电平下有效) 下面的表格在不同的状态下(或者说不同命令下)的各个引脚的信号。“H”代表高电 平,“L”代表低电平,“X”代表可以是任何状态,也就是该引脚同该命令并没有直接的关 系。 功能 /CS /RAS /CAS /WE DQM ADDR. COMMAND INHIBIT (NOP) H X X X X X NO OPERATION (NOP) L H H H X X ACTIVE (选择 bank并且激活相应的行) L L H H X Bank/Row READ (选择 bank和列地址,并且开始突发读取) L H L H X Bank/Col WRITE (选择 bank和列地址,并且开始突发写入) L H L L X Bank/Col BURST TERMINATE(停止当前的突发状态) L H H L X X PRECHARGE (让相应的 bank 中的行失活或者让该 bank失活) L L H L X Code AUTO REFRESH(进入自动刷新模式) L L L H X X LOAD MODE REGISTER L L L L X Op-code 写入启用/输出启用 L 写入禁止/输出禁止 H 如果你对于我们前面介绍的内容有了真的有所了解了,看到上面的芯片引脚示意图和各 个针脚的功能示意图就基本对于 SDRAM 的工作工程有了一个基本的了解了,在下面的章 节里我们就对于这个过程进行详细的介绍,首先我们对于一些基本的概念做一些了解。 这条 SDRAM颗粒采用了双 bank(每 bank 512K x 16 DRAM)的工作电压是 3.3V,并 且采用同步接口方式(所有的信号都是时钟信号的上升沿触发)。每一个 512K x 16-bitbank 由 2,048行乘以 256列个基本存储单元构成,输出数据位宽是 16 bit。Read和 write操作都 是通过突发导向模式访问 SDRAM 的;这种访问模式以访问指定的区域开始的,然后按照 预先设定的方式定位其它的数据的所在。每次访问都是以 ACTIVE 命令启动的,然后仅仅 跟着一个 READ或者WRITE命令。不过在进行所有这些操作之前,SDRAM必须首先进行 初始化。 • 初始化 SDRAM在上电之后,必须首先按照预定的方式进行初始化才能正常的运行。一旦 VDD 和 VDDQ 被同时供电并且时钟稳定下来,SDRAM 就需要一个 100 微秒的延迟
本文档为【内存详解】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_114828
暂无简介~
格式:pdf
大小:736KB
软件:PDF阅读器
页数:49
分类:互联网
上传时间:2011-08-12
浏览量:17