SRAM和DRAM的区别和联系:
(电脑中的内存属于DRAM,CPU中的二级缓存属于SRAM)
存储原理
RAM(Random Access Memory )随机存取存储器,主要的作用就是存储代码和数据供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 总线将不会显示出来任何的优势,工作的效率将会降低很多。
从“线”到“矩阵”
如果RAM 对于CPU 来说仅仅是一条“线”的话,还不能体现实际的运行情况。因为如果实际情况真的是这样的话,在实际制造芯片的时候,会有很多实际的困难,特别是在需要设计大容量的RAM 的时候。
所以,一种更好的能够降低成本的方法是让存储信息的“空格”排列 为很多行,每个“空格”对应一个bit 存储的位置。这样,如果要存储1024bits 的数据,那么你只要使用32x32 的矩阵就能够达到这个目的了。很明显,一个32x32 的矩阵比一个1024bit 的行设备更紧凑,实现起来也更加容易。
请看下图。
知道了RAM 的基本结构是什么样子的,我们就下面谈谈当存储字节的过程是怎样的。
上面的示意图 显示的也仅仅是最简单状态下的情况,也就是当内存条上仅仅只有一个RAM 芯片的情况。
对于X86 处理器,它通过地址总线发出一个具有22 位二进制数字的地址编码,其中11 位是行地址,另外11 位是列地址,这是通过RAM 地址接口进行分离的。
行地址解码器(row decoder)将会首先确定行地址,然后列地址解码器(column decoder)将会确定列地址,这样就能确定唯一的存储数据的位置,然后该数据就会通过RAM 数据接口将数据传到数据总线。
另外,需要注意的是,RAM 内部存储信息的矩阵并不是一个正方形的,也就是行和列的数目不是相同的,行的数目比列的数目少。
上面的示意图 粗略的概括了一个基本的SRAM 芯片是如何工作的。
SRAM 是“static RAM(静态随机存储器)”的简称,之所以这样命名是因为当数据被存入其中后不会消失。
DRAM 动态随机存储器不同,DRAM 必须在一定的时间内不停的刷新才能保持其中存储的数据。
一个SRAM 单元通常由4-6 只晶体管组成,当这个SRAM 单元被赋予0 或者1 的状态之后,它会保持这个状态直到下次被赋予新的状态或者断电之后才会更改或者消失。
SRAM 的速度相对比较快,而且比较省电,但是存储1bit 的信息需要4-6 只晶体管制造成本太高了。
DRAM 只要1 只晶体管就可以实现。
SRAM 芯片
早期的SRAM 芯片采用了20 线双列直插(DIP:Dual Inline Package)封装技术,它们之所以具有这么多的针脚,是因为它们必须:
1) 每个地址信号都需要一根信号线;
2) 一根数据输入线和一根数据输出线;
3) 部分控制线(Write Enable, Chip Select);
4) 地线和电源线。
上图显示的是SRAM 芯片,但是并不是下面示意图中的SRAM 芯片。
下面的是一个16K x 1-bit SRAM 芯片的针脚功能示意图。
1) A0-A13 是地址输入信号引脚;
2) /CS 是芯片选择引脚,在一个实际的系统中,一定具有很多片SRAM 芯片,所以需要选择究竟从那一片SRAM 芯片中写入或者读取数据;
3) /WE 是写入启用引脚,当SRAM 得到一个地址之后,它需要知道进行什么操作,究竟是写入还是读取,/WE 就是告诉SRAM 要写入数据;
4) Vcc 是供电引脚;
5) Din 是数据输入引脚;
6) Dout 是数据输出引脚;
7) GND 是接地引脚;
8) Output Enable(OE),有的SRAM 芯片中也有这个引脚,但是上面的图中并没有,这个引脚同/WE 引脚的功能是相对的,它是让SRAM 知道要进行读取操作而不是写入操作。
从Dout 引脚读取1bit 数据需要以下的步骤:
1) 通过地址总线把要读取的bit 的地址传送到相应的读取地址引脚,这个时候/WE 引脚应该没有激活,所以SRAM 知道它不应该执行写入操作;
2) 激活/CS,选择该SRAM 芯片;
3) 激活/OE 引脚,让SRAM 知道是读取操作;
第三步之后,要读取的数据就会从DOut 引脚传输到数据总线。
写入1bit 数据的过程如下:
1) 通过地址总线确定要写入信息的位置,确定/OE 引脚没有被激活;
2) 通过数据总线将要写入的数据传输到Din 引脚;
3) 激活/CS 引脚,选择SRAM 芯片;
4) 激活/WE 引脚,通知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 接口把地址一分为二,然后利用两个连续的时钟周期传输地址数据,这样就达到了使用一半的针脚实现同SRAM 同样的功能的目的,这种技术被称为多路技术(multiplexing)。
那么为什么好减少地址引脚呢?这样做有什么好处呢?
前面我们曾经介绍过,存储1bit 的数据SRAM 需要4~6 个晶体管,但是DRAM 仅仅需要1 个晶体管,那么这样同样容量的SRAM 的体积比DRAM 大至少4 倍。这样就意味着你没有足够空间安放同样数量的引脚(因为针脚并没有因此减少4 倍)。
当然为了安装同样数量的针脚,也可以把芯片的体积加大,但是这样就提高芯片的生产成本和功耗。
所以减少针脚数目也是必要的,对于现在的大容量DRAM 芯片,多路寻址技术已经是必不可少的了。
当然多路寻址技术也使得读写的过程更加复杂了,这样在设计的时候不仅仅DRAM 芯片更加复杂了,DRAM 接口也要更加复杂。
DRAM 芯片内部结构示意图如下:
在上面的示意图中,你可以看到在DRAM 结构中相对于SRAM 多了两个部分:
1) 由/RAS (Row Address Strobe :行地址脉冲选通器)引脚控制的行地址门闩线路(Row Address Latch);
2) 由/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 内仅仅能保持其内存储的电荷非常短暂的时间,所以它需要在其内的电荷消失之前就进行刷新直到下次写入数据或者计算机断电才停止。
每次读写操作都能刷新DRAM 内的电荷,所以DRAM 就被设计为有规律的读取DRAM 内的内容。这样做有下面几个好处。
1) 仅仅使用/RAS 激活每一行就可以达到全部刷新的目的;
2) 用 DRAM 控制器来控制刷新,这样可以防止刷新操作干扰有规律的读写操作。
在文章的开始,曾经说过一般行的数目比列的数据少,原因就是:行越少用户刷新的时间就会越少。
ROM、RAM的区别:
ROM(只读存储器或者固化存储器)
RAM(随机存取存储器)
ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。
RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓 冲。另一种称为动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很 多,计算机内存就是DRAM的。
DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等,这里介绍其中的一种DDR RAM。DDR RAM(Date-Rate RAM)也称作DDR SDRAM,这种改进型的RAM和SDRAM是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用 得最多的内存,而且它有着成本优势,事实上击败了Intel的另外一种内存标准-Rambus DRAM。在很多高端的显卡上,也配备了高速DDR RAM来提高带宽,这可以大幅度提高3D加速卡的像素渲染能力。
ROM也有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后,就无法修 改了,这种是早期的产品,现在已经不可能使用了,而EPROM是通过紫外光的照射擦出原先的程序,是一种通用的存储器。另外一种EEPROM是通过电子擦 出,价格很高,写入时间很长,写入很慢。
举个例子,手机软件一般放在EEPROM中,我们打电话,有些最后拨打的号码,暂时是存在SRAM中的,不是马上写入通过记录(通话记录保存在EEPROM中),因为当时有很重要工作(通话)要做,如果写入,漫长的等待是让用户忍无可忍的。
FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦出可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据 (NVRAM的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来 Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)。
目前Flash主要有两种NOR Flash和NADN Flash。NOR Flash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一快的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户 不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。
一般小容量的用NOR Flash,因为其读取速度快,多用来存储操作系统等重要信息,而大容量的用NAND FLASH,最常见的NAND FLASH应用是嵌入式系统采用的DOC(Disk On Chip)和我们通常用的“闪盘”,可以在线擦除。目前市面上的FLASH 主要来自Intel,AMD,Fujitsu和Toshiba,而生产NAND Flash的主要厂家有Samsung和Toshiba。
ROM和硬盘的区别(电脑硬盘不是ROM,BIOS存在ROM当中):
只读内存(Read-Only Memory)就是ROM,它是一块单独的内部存储器,和随机内存RAM(即平时说的内存)相似,但是只能读取,用来存储和保存永久数据的。ROM数据不能随意更新,但是在任何时候都可以读取。即使是断电,ROM也能够保留数据。
往ROM中注入数据需要另外的编译器,PC上面是没有这个功能的。一般在ROM出厂前注入信息,没有特殊情况一般不会更改内容,也就是说通常是一辈子都是同样的内容。
在PC中容易误解的一点就是经常有人把ROM和HardDisk(硬盘)搞混淆,HardDisk是属于外部存储器,而ROM是内部存储器。样貌 也有很大差别,硬盘是一个立方体状的东西,而ROM更像一个扁平固定长条状的东西。硬盘可以轻易地改写内容,但是ROM不可以。而且硬盘的容量比ROM大 得多。
在PC中ROM内的内容有BIOS程序和机器码和出厂信息之类的东西。
而计算机的外部存储器中采用了类似磁带的装置的东东就叫磁盘。软盘、硬盘、U盘等都是磁盘的一种。