概述
半导体存储器在任何一个包含处理器的系统中都是必不可少的一部分,一般将其分为RAM与ROM两大类;根据系统掉电后存储内容是否可以保持又可分为易失(Volatile)与非易失(Non-volatile)两大类。下面是常见的半导体存储器分类图
原理
基本所有的存储器都是做成阵列结构的,即所谓的Memory Array,其中每个最小存储单元称为一个Cell,一般是存储1 bit数据,不过目前也有新工艺(如MLC、TLC)可以在一个存储单元内存放超过1 bit的数据。Memory Cell的结构示意图如下
ROM
ROM全称Read Only Memory,在一般正常工作状态下,它是只读的。不过,也有一些ROM中的内容可对其进行编程修改,这就是所谓的可编程ROM;与此对应的就是不可编程ROM,即Mask ROM(掩膜 ROM)。
ROM的工作原理可参考以下视频:sec 16-04 Memory Concepts
MROM
MROM即Mask ROM,其Memory cell简化结构示意图如下
从中可以看到,MOSFET源极连接关系在芯片掩膜中就确定了,所以MROM是无法编程的,其中的内容也是不会发生改变的。在MCU中,MROM一般用于实现一些固化于芯片内部的功能,如引导程序,某些内置的库函数等。
PROM
PROM即User-Programable ROM,亦称OTP ROM(One-Time Programable ROM)。PROM基于熔丝技术,即Fusible-Link,其Memory cell简化结构示意图如下
在出厂时,所有熔丝均处于图(b)的状态,即存储器中存储的内容是0。用户可对其进行编程,用大电流使源极熔丝熔断即可将此位置为1。此编程过程是一次性不可逆的,也就是所谓的一次编程(OTP)。
上面的原理图中描述的是基于熔丝原理的PROM,事实上,目前更为广泛使用的是反熔丝技术。二者的区别在于,熔丝(Fuse)在初始状态是闭合的,可通过编程使其断开;反熔丝(Antifuse)在初始状态是断开的,可通过编程使其闭合。反熔丝技术的基本原理见下图
EPROM & EEPROM & Flash
EPROM、EEPROM及Flash的基本原理是相同的,都是基于浮栅技术(Floating-gate MOSFET)。浮栅MOS管的结构示意图如下
悬浮栅极位于两层二氧化硅绝缘层之间,因此存储于其中的电荷可以得到长久的保持。EPROM、EEPROM及Flash的Memory cell简化结构示意图如下
三者的区别主要在于其编程的方式不同。
EPROM通过紫外线(UV)照射进行数据擦除,浮栅中的电荷形成光电流泄漏走;EEPROM与Flash均是通过超薄氧化层的Fowler-Nordheim隧道电流使浮栅充放电。
EEPROM的Memory cell是由FLOTOX(Floating- gate tuneling oxide transister)及一个附加的晶体管(Transister)组成,由于FLOTOX的特性及两管结构,所以可以单元读/写。技术上,Flash是结合EPROM和EEPROM技术达到的,很多Flash使用雪崩热电子注入方式来编程,擦除和EEPROM一样用Fowler-Nordheim tuneling。但主要的不同是,Flash对芯片提供大块或整块的擦除,这就降低了设计的复杂性,它可以不要EEPROM单元里那个多余的Tansister,所以可以做到高集成度,大容量。另外Flash的浮栅工艺也有所不同,写入速度更快。
RAM
RAM全称Random Access Memory,顾名思义,RAM可根据存储单元的行地址和列地址进行快速读取或写入操作。随机访问的含义是RAM可以直接读取或写入任意一个存储单元,因此,从这个意义上来说,NOR Flash似乎也该算作RAM的一种,不过一般情况下还是把它归为ROM。而严格地说,DRAM不属于Random Access,因为在DRAM中数据读取是突发(Burst)传输的。
RAM可分为三大类,SRAM、DRAM及nvSRAM。
SRAM
SRAM即Static RAM,所谓的Static是指它没有刷新操作,在不掉电的情况下Memory Cell可无限长时间的保存数据。SRAM的工作原理可参考以下视频:sec 16 02 Static RAMs
其Memory cell简化结构示意图如下
这是典型的6晶体管结构的SRAM(6T Cell),该结构的SRAM每个存储单元由六个MOS管组成,Q1、Q2、Q5、Q6构成双稳态触发器,Q3、Q4的开关状态由同一个选择信号CE控制。A1与A2是输入输出Buffer。
DRAM
DRAM即Dynamic RAM,所谓的Dynamic是指每个一段时间就要对每个Memory Cell进行一次刷新操作,否则数据就会丢失。DRAM的工作原理可参考以下视频:sec 16 03 Dynamic RAMs
其Memory cell简化结构示意图如下
DRAM每个存储单元由一个MOS管及其寄生电容构成,由于数据信号的状态由电容的电荷量决定,因此每隔一段时间需对电容做一次充放电的刷新操作。
nvSRAM
nvSRAM即Non-volatile SRAM,某些地方将NOR Flash也算作nvSRAM的一种,不过一般认为的nvSRAM是指FRAM、MRAM一类的新型SRAM,这类器件读取速度与传统的SRAM不相上下,而且掉电后还可以保持之前的数据,是一类很有发展潜力的存储器。其中FRAM就是一种很有代表性的新型存储器。
FRAM目前主要由日本富士通公司(Fujitsu)生产,其核心在于使用PZT(锆钛酸铅,Pb{ZrTi}O3)晶粒作为电容存储数据。关于FRAM的详细技术说明,可参考Fujitsu的FRAM Guide Book。
除此之外,还有一种nvSRAM是将电池与SRAM封装在了一起,这个从严格意义上来说并不能算nvSRAM,仅仅只是SRAM+电池而已。
寄存器
一般并不把使用Flip-Flop的寄存器算作存储器的一种,不过实际上它起到的作用和存储器是一样的。在进行嵌入式系统编程时经常涉及到寄存器,其实质就是若干个并联的触发器(Flip-Flop)。以4位寄存器为例,其原理图如下
应用
选取几种比较有代表性的器件介绍下其应用。
PROM
PROM一般用于OTP芯片中,这类芯片仅可进行一次编程,其价格与使用Flash的同类产品相比有很大优势。部分MCU内部也会有一小块OTP区域供用户使用。
除此之外,部分FPGA和CPLD也使用PROM工艺,这还成为了其一大特色,一般用于航天和军工等可靠性要求极高的场合。这类器件使用的是反熔丝工艺,具有以下一些优点:
- 编程不可逆,抗高低温,稳定性极高
- 抗辐射强
- 寿命长
EEPROM
EEPROM一般用于保存一些系统参数,最常用的分立EEPROM芯片为24Cxx系列,包括容量不同的24C02、24C04、24C08、24C16,分别能存储2k、4k、8k、16k bit数据。
24Cxx系列的引脚定义如下
24Cxx系列通过标准I2C接口与MCU进行通信。A0
-A2
引脚是器件地址输入,可以将多片24Cxx(24C16除外)同时接到I2C总线上以达到扩大容量的目的,不过这个功能一般不使用。WP
引脚是写保护,一般也不使用,直接接地即可。
两个典型操作的时序图如下:
Flash
Flash一般作为系统的主要存储设备用来保存程序和数据,可分为两种,NOR Flash与NAND Flash。Nor Flash数据线和地址线分开,可以实现RAM一样的随机寻址功能,可以读取任何一个字节。但是擦除仍要按块(Block)来擦。NAND Flash同样是按块擦除,但是数据线和地址线复用,不能利用地址线随机寻址,读取只能按页(Page)来读取。二者的结构对比见下图
由于NAND Flash引脚上复用,因此读取速度比NOR Flash慢一点,但是擦除和写入速度比NOR Flash快很多。NAND Flash内部电路更简单,因此数据密度大,体积小,成本也低。因此大容量的Flash都是NAND型的。小容量的1MB~16MB的Flash多是NOR型的。二者的尺寸及密度对比见下图
二者的综合性能比较见下图
从使用上来说,NOR Flash也要比NAND Flash简单。另外,因为NAND Flash无法直接寻址,故程序无法在NAND Flash中运行,需要将其拷贝到RAM中才能运行。
关于NAND Flash与NOR Flash的详细比较,可参考M-System公司的技术白皮书:
对于NOR Flash而言,因为它有独立的地址线和数据线,其使用方法较为简单,只要将其接到CPU的地址总线和数据总线上即可,可参考下面这张工作模式图:
至于具体的读取和擦除操作的命令及时序图,参考所使用的芯片的数据手册即可。
对于NAND Flash而言,它没有专用的地址线,而是通过控制接口与CPU 相连,数据总线为8-bit或16-bit。以K9F1G08U0B为例,其内部存储单元的组织形式如图所示:
一般NAND Flash有以下这些信号线:
大部分CPU中均集成了NAND Flash控制器,此时只需要将对应引脚连接起来,然后根据CPU数据手册进行配置即可。如果需要自己实现NAND Flash控制器,那就需要根据NAND Flash的命令集及时序图进行编程了,这个对大部分NAND Flash应该都是基本通用的。具体可进一步参考相关文章,如
从单个存储单元能存储的比特数来看,Flash芯片又可分为三种,SLC,MLC及TLC。这三者的区别简单来说就是SLC在每个存储单元中只存储1-bit数据,MLC为2-bit,而TLC为3-bit。关于这个问题,可进一步参考Micron公司的文章TLC MLC and SLC Devices和这篇博客文章。
eMMC
eMMC并不是一种存储介质,它是Embedded Multi Meida Card的缩写,而MMC就是指常见的SD卡、TF卡一类的存储卡。MMC相当于一种接口标准,可通过SPI或SDIO总线进行访问,而eMMC就是指符合这种接口标准的存储芯片。它是由NAND Flash加主控封装在一起做出来的,与种类繁多的NAND Flash相比,eMMC统一了接口形式,可以使用和操作SD卡一样的方式去控制NAND Flash。
eMMC与NAND Flash相比,其优点在于更为稳定可靠,内部集成的主控IC会自动完成坏块处理等工作。另外,如果直接使用NAND Flash的话,产品升级就需要重新修改不少软件,而使用eMMC则不需要,这有助于减小开发新产品的工作量。
Samsung、SanDisk、Kingston、Toshiba等公司均提供eMMC芯片,容量从2G~64G不等,基本所有的eMMC均使用BGA封装。
SRAM
SRAM的特点在于其的高速与小容量,它是目前读写速度最快的存储设备,但它也较为昂贵。CPU内部的Cache使用的就是SRAM,嵌入式SoC内部集成的内存也都是SRAM。SRAM可以直接对任意地址寻址,其读取是严格意义上的随机的(Random)。
SRAM基本上可以分为两大类:异步(Asynchronous)SRAM和同步(Synchronous)SRAM。异步SRAM的访问独立于时钟,数据输入和输出都由地址的变化控制。同步SRAM的所有访问都在时钟的上升/下降沿启动。地址、数据输入和其它控制信号均于时钟信号相关。
ISSI公司提供了很多型号的SRAM可供选择,从类型上来看主要有ZBT SRAM、DDR SRAM、QDR SRAM等。
ZBT SRAM即Zero Bus Turnaround,零翻转SRAM。对于普通SRAM而言,由于读操作和写操作驱动方不同,当出现类似写-读-写操作时,相邻操作之间需插入一个空闲周期以便切换驱动方法。在读写操作切换频繁的应用中,这种空闲周期将严重地影响存储性能。对于ZBT SRAM,在读写操作之间不存在空闲周期,即读写操作可无缝连接,从而提高了存储性能。
SRAM主要应用于高速缓存,是决定整个系统性能的关键部分。然而,ZBT SRAM的运行频率无法超过200MHz,随着系统的升级,ZBT SRAM已无法满足更高性能系统的要求,由此又诞生了QDR/DDR SRAM(升级后分别为QDR II/DDR II SRAM),其中DDR II SRAM又分为CIO(Common IO)和SIO(Separated IO)两大类。QDR是指四倍数据速率(Quad Data Rate),DDR的双倍数据速率是通过双边沿对数据采样实现的,QDR的数据采样同样基于双边沿,且进一步将数据的读端口和写端口分开,利用同一组地址和控制信号实现对这两个端口的访问,输入输出同时进行,从而实现四倍数据速率的同时,消除了读写操作之间的空闲周期,提高了存储效率。
DRAM
DRAM一般作为系统的主内存,常用的DRAM可进一步分为SDRAM(Synchronous)、DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM等。SDRAM即同步动态随机存储器,同步指存储器的工作需要参考时钟。对于同步存储器件,有三个与工作速率相关的重要指标:内核工作频率,时钟频率和数据传输速率。
不同类型的SDRAM的区别主要在于其读取速度不同,见下图和下表:
SDRAM需要定时进行刷新,这一般是由专用的控制器模块或驱动芯片完成的,绝大部分CPU和一些高端MCU中都集成了控制器模块,只需要将对应的引脚连接起来,再进行相应的配置后即可使用了。
PSRAM
PSRAM即Pseudo static random access memory,伪静态随机存储器。它的内部存储颗粒其实与SDRAM的结构类似,不过外部接口则与SRAM类似。可以视为是内部集成了控制器的SDRAM,这主要用于没有SDRAM控制器的MCU应用中。它的容量介于SRAM与SDRAM之间。
FRAM
FRAM在某些时候可用于替代SRAM或EEPROM及Flash。TI就在各大MCU厂商中率先使用了FRAM,MSP430FR系列MCU中就只有FRAM。详细信息可参考TI的文章What is FRAM。
下面这个Demo视频中演示了FRAM的读取速度:
FRAM Write Speed Demo (FRAM vs. SRAM vs. EEPROM)
比较
可参考FRAM Guide Book中的比较表格:
最后对各种存储器的应用范围做一总结:
**Msak ROM和PROM一般作为芯片的一部分存在;
EPROM已基本被淘汰;
EEPROM用于需要能够很方便的进行随机存储(单字节操作)的场合,且其容量一般不大;
Flash用于大量数据的存储,其中NOR Flash容量较小,不过能进行随机读操作,也可以运行程序;NAND Flash容量较大,不过只能按页操作,不可在其中运行程序;
SRAM容量较小,用在对速度要求高的地方,如果需要掉电后保存数据,可考虑使用FRAM;
DRAM容量较大,用于当做系统的主内存。
**
参考资料
[1] William Kleitz. Digital Electronics: A Practical Approach with VHDL (9th Edition). Pearson Prentice Hall, 2011.
[2] 存储器概述