1. 引言
关于存储器描述的博客有很多,本篇文章主要总结和归纳存储器的种类,对每个存储器进行描述,初步了解每一种存储器的用途和结构,以及不同存储器之间的区别。
2. 存储器的分类
3. 存储器的描述
3.1 RAM(随机存储器)
- SRAM(静态随机存储器)
- 不需要刷新,面积大,速度快,价格贵,功耗较大,非破坏性读出,一般小容量SRAM用作高速CPU和慢速DRAM之间的缓冲存储器(cache)。
- 从晶体管类型上分,SRAM可以分为双极性结型(TTL)和CMOS两种。双极性结型晶体管构成的SRAM速度非常快,但是功耗也很大;CMOS晶体管构成的SRAM功耗较低,应用广泛。
- 从功能上分,SRAM可以分为异步SRAM和同步SRAM(SSRAM)。异步SRAM的读写访问受控于地址线和控制信号;同步SRAM的读写访问均在时钟的上/下沿时刻发生,且受控于地址线和控制信号。
- 从端口上可以分为单端口SRAM、两端口SRAM和双端口;
- SRAM的最基本单元是两个首尾相接的反相器,即第一个反相器的输出连接到第二个反相器的输入,第二个反相器的输出连接到第一个反相器的输入,这样就可以实现两个反相器的输出状态的锁定和保存,就可以存储1bit数据。为了描述SRAM的结构和工作原理,下面展示单端口SRAM、两端口SRAM和双端口的电路原理图。
- 单端口SRAM,由6个晶体管组成,其中M1、M2、M3和M4构成了存储1bit数据的最基本单元,M1和M3为下拉(NMOS)管,M2和M4为上拉(PMOS)管,M5和M6为存取管(传输管)。该SRAM具有三种状态:standby(空闲)、reading(读)和writing(写)。
- standby: WL(字线)为低电平,M5和M6断开,两个反相器保持状态不变。
- reading: 假设基本单元存储的数据是1,即Q = 1, Q' = 0;在开始读之前,会通过预充电电路,将BL(位线)和BL'电平充电至1;使WL为高电平,M5和M6导通;BL' 通过M5和M1(单元存1时,M1一直处于导通状态)迅速放电至 0,M3仍然截止;VDD通过M4和M6对BL充电,使BL保持在1,M1仍然导通;去掉WL上的高电平。reading就是读BL上的电平
- writing: 假设写1;当WL为低电平,置BL为“1”电平,BL’ 为“0”电平;置WL为高电平,M5、M6导通;Q' 通过M5向BL' 放电,达到“0”电平,M3截止;BL通过M6,VDD通过M4,对Q充电至“1”电平,M1导通;置WL为低电平,M5、M6关闭,此时Q处于“1”电平状态,Q' 处于“0”电平状态。writing就是拉高或者拉低BL,由于BL的驱动能力比存储单元强,会强制覆盖原来的状态。
图1 单端口SRAM
-
- 两端口SRAM,由8个晶体管组成,具有独立的读写字线(RWL, WWL)和读写位线(RBL, WBL和WBL'),因此具有分开的读端口和写端口,可以同时读写。
图2 两端口SRAM
-
- 双端口SRAM,在6晶体管单端口SRAM的基础上,复制了一套读写端口。与两端口SRAM相比,两端口SRAM的一个端口只能实现读或写,而双端口SRAM的每一个端口都可以实现读和写。
图3 双端口SRAM
- DRAM(动态随机存储器)
- 面积小,功耗低,破坏性读出,使用电容保存数据,每隔一段时间需要刷新一次,如果不刷新,数据会丢失。
- DRAM分为两种类型:1T1C和3T1C,他们的存储单元结构如下所示。现在多采用1T1C。
-
- DRAM为什么需要不断的刷新?
- 当对DRAM进行读操作的时候需要将电容与外界形成回路,通过检测电流变化判断存储元存储的是1还是0(是1就有电荷流出产生电流,是0则没有)。在进行读操作时,如果原来的数据是1,读完之后电荷顺着电流探测电路流走了,就变成0 了,下次再读的时候就不是原来的数据了。所以在读操作结束后需要刷新电路,重新将数据写回DRAM中。
- 多久刷新一次?每次刷新多少存储单元?如何刷新?
因为,电容上的电荷也只能保存2ms左右,一般每隔2ms也都会进行DRAM刷新。以行为单位,每次刷新一行存储单元。不需要CPU控制,有硬件支持,读出一行的信息后重新写入,占用1个读/写周期。
- DRAM为什么需要不断的刷新?
-
- DRAM也分同步和异步,一般DRAM是异步,SDRAM为同步DRAM;因为同步,所以读写速度被提高。而且,SDRAM是多bank结构,DRAM不分bank;因为分bank,所以SDRAM可以在对被选中的bank读写的同时去对没被选中的bank进行预充电。
- DDR SDRAM属于SDRAM的一类,LDDR是low power DDR
- SRAM与DRAM的区别:
SRAM的存取速度很快,但是地址线需要更多,这是因为SRAM和DRAM的寻址方式不同:SRAM同时发送行地址和列地址,把行地址和列地址拼接起来作为一次读写访问的地址,然后放到地址线上;
SRAM有可能并没有把行地址和列地址拆分成长度相等的两段,并且行地址线和列地址线都是单独存在;
DRAM是把行地址和列地址分为长度相等的两段,然后分两次发送;
DRAM可以地址线复用,也就使用同一跟地址线分别发送行地址和列地址,减少了地址线的使用
3.2 ROM(只读存储器)
3.2.1 MaskROM(掩膜只读存储器),存储内容在半导体制造厂中按照客户需求,在生产过程中直接写入,之后无法修改。
3.2.2 OTPROM(一次性可编程只读存储器),顾名思义,只能通过专门编写器对该ROM进行一次写入,之后无法修改。
3.2.3 EPROM(可擦除可编程只读存储器),修改次数有限,写入之间较长;一般分为UVEPROM(紫外线擦除)和EEPROM(电子擦除)。
3.2.4 Flash(闪存),基于EEPROM的一种技术,一般分为Nor Flash和Nand Flash
3.2.4.1 Nor Flash
Nor Flash 的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
nor flash常用于保存代码和关键数据。
Nor Flash数据线和地址线分开。
Nor Falsh 根据于 CPU 端接口的不同,可分为并行(CFI)和串行(SPI)两类。
并行 Nor Flash的读取和我们常见的 SDRAM 的读取是一样,可直接接入到主机的 SRAM/DRAM 控制器上,其存储空间也可直接映射到 CPU 地址空间,不需要拷贝到 RAM 才能被 CPU 访问,即支持片上运行(XIP),这样可以减少 SRAM 的容量从而节约了成本。
3.2.4.2 Nand Flash
Nand Flash没有采取内存的随机读取技术,读取一次读一块的形式进行,通常是一次读取512个字节。
Nand Flash 需要通过专门的 NFI (NAND Flash Iterface)与 Host 端通信;没有addr线 它是data线共用数据和地址。通过引脚NFRW NFWE等引脚告诉 什么时候是做data线 什么做addr线。使用I/O口来串行地存取数据。
NAND适合于数据存储。
3.2.5 固态和U盘,是基于Flash的一种技术。