☰
半导体存储器核心知识:ROM/RAM与SRAM/DRAM读写原理
2026/11/3 19:51:53 网站建设 项目流程

简介:这份半导体存储器专题课件面向学习数字电路、计算机组成原理及硬件基础课程的学生与教师,围绕第七章内容系统梳理存储器的工作原理与使用方法。压缩包内仅含1个PPT文件,大小约5.15MB,页面结构适合课堂讲授或课后自学,重点覆盖只读存储器与随机存储器两大门类。内容从性能指标和分类入手,依次讲解掩模ROM、PROM、EPROM及快闪存储器的特点,对比SRAM与DRAM在数据保持、集成度和速度上的差异,并延伸到存储器容量扩展的连接方法以及用存储器实现组合逻辑函数的设计思路。已有143人学习,适合需要理清章节脉络、对照课件复习或备课的读者使用。

1. 半导体存储器到底是什么:一块能记住 0 和 1 的电子仓库

给计算机装一个“记性”,听起来很玄,落到电路上其实很朴素。半导体存储器就是能存储大量二值信息(也就是一串串 0 和 1)的半导体器件,属于大规模集成电路。打个比方,它像一面带编号的储物墙:每个格子里只放“1”或“0”,墙上贴着地址,管理员报出编号,就能打开对应格子把内容取走,或者塞进新内容。计算机和各类数字系统要处理的数据量太大,没有这面墙,运算结果没处放,程序也没处存,所以它属于“缺了就转不起来”的部件。搞懂它的分类和读写的物理机制,等于拿到理解数字系统怎么记事的第一把钥匙。

2. 为什么存储器要分成 ROM 和 RAM:断电之后谁还记得你

把存储器分成只读存储器(ROM)和随机存储器(RAM)两大类,原因和分类习惯无关,关键在于“断电”这件事。同样一块硅片,有的场合需要数据断电后原样留着,比如开机就要跑的固定程序;有的场合需要数据随时改、随时扔,比如运算过程中的中间结果。这两种诉求对电路结构的要求几乎相反,硬用同一种器件去兼顾,成本和速度都会吃亏,于是就有了两条技术路线并行发展。

2.1 石碑和白板:一条叫“易失”的分界线

ROM 的特点很明确:在正常工作状态下只能从中读取数据,不能快速随时修改或重新写入。它的电路结构简单,断电后数据也不会丢失,缺点是只能用于存储固定数据的场合。通俗地说,它像刻好的石碑——字一旦刻上去就长期有效,想改得换一块石头。RAM 则像会议室里的白板,正常工作状态下随时可以写入、随时可以擦掉重写,用起来灵活,代价是数据的易失性:一旦失电,所存数据立即丢失。

这两种性格恰好对应数字系统里两类不同性质的数据。固定不变的那一类,比如开机自检程序、字符点阵字库、数学常数表、控制流程的微代码,写一次要用很久,用 ROM 存最省心,还省掉了开机重新加载的麻烦。随时变化的那一类,比如运算中间结果、数据缓冲区、程序运行时的变量,必须能高速反复改写,只能靠 RAM。所以存储器分类的依据来自数据的使用方式,背后是“这块数据要不要留到下次开机”这个很实际的判断。

这也解释了一件容易被忽略的事:一套系统里 ROM 和 RAM 从来不是二选一,而是分工。开机时 CPU 从 ROM 里取第一条指令,跑起来以后把要变的数据放进 RAM,两拨人马各干各的活。新手看到“存储器”三个字,容易默认它是一种东西,实际上一台设备里往往同时存在好几种,只是各自负责的段落不同。

2.2 容量与存取速度:两个互相拉扯的硬指标

衡量一颗存储器好不好,主要看两个指标:存储量(容量)和存取速度。这两个词听着普通,含金量很高。原文给了一组参考数字:动态存储器的容量已达 10⁹ 位/片,也就是一颗芯片上能塞进十亿个 0 或 1;一些高速存储器的存取时间仅 10ns 左右。10 纳秒是多快?光在真空里跑 10 纳秒大约走 3 米,也就是说,从发出地址到数据出来,信号在这段时间里只够在电路板上走几个来回。

为什么偏偏是这两个指标?因为计算机处理的数据量很大,运算速度越来越快,存储器要是容量小,装不下要算的东西;要是速度慢,CPU 就得干等着。更麻烦的是这两个指标常常互相制约:存储单元做得越小,同样面积上能塞的位数越多,容量上去了,可每个单元存的那点电荷或电流就越微弱,读出来更费劲,速度就受影响。存储器技术的发展史,很大一部分就是在“再密一点”和“再快一点”之间找平衡点。

提示:看存储器参数时别只看一个数字。容量大不代表快,速度快不代表便宜,实际选型时三个维度要一起看,单看某一个很容易踩坑。

2.3 存储矩阵、地址译码器、输出缓冲器:一颗存储器里的三个工种

不管 ROM 还是 RAM,内部结构都可以拆成三块:存储矩阵、地址译码器和输出缓冲器。这三块的分工,理解清楚之后,后面看任何存储器电路图都不会迷路。

存储矩阵是真正的仓库。它由许多存储单元排列而成,每个单元能存放 1 位二值代码(0 或 1),而每一个或一组存储单元有一个相应的地址代码。单元可以用二极管、双极型三极管或者 MOS 管来做,用什么器件做,直接决定了速度、功耗和集成度。你可以把它想成一排排货架,每排货架有编号,货架上的每个格子放一位数据。

地址译码器是那个“翻译官”。它的工作是把输入的地址代码译成相应的控制信号,利用这个控制信号从存储矩阵中把指定的单元选出,并把其中的数据送到输出缓冲器。地址线给的是二进制编号,比如 A1A0 是 00,译码器就把 0 号那根字线拉成有效电平,其余字线保持无效。一个字线对应一整行格子,选中哪行,哪行的数据才有资格往外走。

输出缓冲器是最容易被忽略、却最不能省的一环。它的作用有两个:一是提高存储器的带负载能力,毕竟译码出来的信号很弱,直接驱动外部电路带不动;二是实现对输出状态的三态控制,以便与系统的总线相联。所谓三态,就是除了高电平、低电平之外还有第三种状态——高阻,相当于这根线“撒手不管了”。总线是许多器件共用的一组线,同一时刻只能有一个器件说话,没被选中的存储器必须把自己的输出挂成高阻,否则几个输出对着干,电平就乱了。这也解释了读数据的操作口径:输入指定的地址代码,同时令片选或输出使能有效,指定地址内各存储单元所存的数据便出现在数据输出端。

2.4 容量怎么算、怎么扩:字数乘位数

存储器的容量有一个固定算法:存储容量 = 字数 × 位数。字数就是有多少个“地址”,位数就是每个地址一次能吐出多少位数据。地址线有 n 根,字数通常就是 2 的 n 次方;数据线有 m 根,位数就是 m。比如一个 2 位地址输入、4 位数据输出的 ROM,容量就是 4×4=16 位,而不是 16 个字节,也不是 4 位——这里把“字数”和“位数”搞混,是初学者最常见的翻车点之一。

实际系统要的容量往往超过单片的容量,于是有了容量扩展。思路只有两条:位扩展和字扩展。位扩展是几片存储器共用同一组地址线和片选信号,各自负责数据总线的一段,好比把几排货架并排放,一次能取更宽的一批货;字扩展则用高位地址去译码,产生各片的片选信号,同一时刻只有一片被选中,好比开分店,门牌的高位决定进哪家店。真实系统里常常两种扩展一起用,先并排扩位,再选片扩字,画出来的连接图就是一张地址线共用、数据线分段的网。

注意:做字扩展时,参与译码的高位地址不能再直接接到存储器的地址输入端,否则同一个单元会被映射到多个地址上,读出来的数据看着“时对时错”,非常像玄学故障。

3. ROM 家族的五张面孔:从出厂写死到随时改写

只读存储器这个名字容易让人以为它就是一个器件,实际上它是一族人,成员之间的差别主要在于“数据什么时候写进去、还能不能改”。同样叫 ROM,有的从出厂那天起就一个字都动不了,有的可以擦掉重来上万次。搞清这条谱系,选型时才不会拿错。

3.1 掩模 ROM:数据在出厂前就被印死了

掩模 ROM 的做法是:在采用掩模工艺制作 ROM 时,其中存储的数据由制作过程中使用的掩模板决定,这块模板是厂家按照用户的要求专门设计的,因此出厂时数据已经“固化”在里面了。存储矩阵里哪个交叉点做上器件、哪个不做,直接对应存 1 还是存 0,这等于是把数据变成了版图的一部分。

它的长处和短处都从这一点长出来。好处是电路结构简单、集成度可以做得很高、可批量生产、价格便宜;坏处是数据一旦定型就再也改不了,哪怕只发现一个字节写错,整批版图也得推倒重来。所以它适合那种数据完全确定、量大、长期不变的场合,比如固定的字库、固定的编码表。用它之前必须把内容核对到万无一失,因为这里没有后悔药。

3.2 PROM:出厂全是同一个值,用户自己烧一次

可编程只读存储器(PROM)把“写数据”这一步从厂家转移到了用户手里。它在出厂时存储内容全为 1(或者全为 0),用户可根据自己的需要写入,借助通用或专用的编程器,把某些单元改写为 0(或为 1)。这就好比厂家发给你一块全部刻满同一个字的石碑,你可以按自己的图纸把不需要的部分凿掉,但凿掉之后没法补回来。

这类器件的价值在于小批量场景。掩模 ROM 要开一版掩模,起订量和周期都摆在那儿;PROM 买回来自己写,几十片也能做。代价是写入机会通常只有一次,写之前得把数据反复核对。很多老式设备里那种“出厂参数表”,用的就是这一类器件,写完之后几十年不动。

3.3 EPROM 与快闪:能擦能写,代价在擦除方式上

可擦除的可编程 ROM(EPROM)是这条谱系里的一次跃迁。它采用浮栅技术,数据不但可以由用户根据自己的需要写入,而且还能擦除重写,所以具有较大的使用灵活性。它的数据写入需要通用或专用的编程器,擦除方式为照射擦除,而且是一次全部擦除——也就是说,想改一个字节,得把整片内容清空再重新写一遍。

电擦除的 PROM 则把这条路走得更远,代表是 E²PROM 和快闪 ROM。擦除从“拿下来照紫外线”变成了“在电路上加电信号”,不用把器件拆下来,改写的门槛一下降低了。快闪存储器就属于这一类,它保留了大容量、非易失的优点,同时让擦写变得方便,今天大量设备里存放固件的那颗片子,基本都属于这个家族。

把这几种 ROM 放在一起,差别一目了然:

类型数据何时写入能否改写擦除方式典型定位
掩模 ROM制造时由掩模板固化不能无数据固定、大批量、成本低
PROM出厂全 1 或全 0,用户写一次一般只能写一次无小批量、参数表
EPROM用户用编程器写入可擦除重写照射擦除,整片擦开发调试、小批量可改
E²PROM用户写入可擦除重写电擦除需要按字节改的场合
快闪 ROM用户写入可擦除重写电擦除固件、大容量非易失存储

3.4 一颗二极管 ROM 是怎么把 0 和 1 读出来的

光看分类还是虚的,落到电路上才知道“存储”到底是怎么发生的。原文给了一个很经典的例子:一个具有 2 位地址输入码和 4 位数据输出的 ROM 电路,地址译码器由 4 个二极管与门构成,存储矩阵由二极管或门构成,输出由三态门组成。

具体走一遍。A1、A0 是地址线,译码器把这 4 个地址码译成 W0~W3 四根线上的高电平信号,这四根线叫字线。每一根字线对应一个地址,也对应一个“字”。存储矩阵里,字线和位线交叉的地方如果接了二极管,就相当于存 1;没接就相当于存 0。当某根字线给出高电平时,接在它上面的二极管导通,把对应的位线拉出电平,D0~D3 这四根位线(也叫数据线)上就出现了这一行存的四位二进制代码。

交叉点的数目就是存储单元数,所以这个例子的存储量是 4×4=16 位。画图时还有一种简化画法:凡是有二极管的位置,都用交叉点“·”表示,并且省略电阻、输出缓冲器和电源等符号,看起来就是一张干干净净的点阵图。这张图不是抽象符号,它就是数据的物理形态——想改数据,得改这些点。

用 MOS 工艺做也一样,只是极性反过来。字线和位线的交叉点接 MOS 管的相当于存 1,没有的相当于存 0;当某根字线为高电平时,接在其上的 MOS 管导通,其位线变为低电平,通过三态非门之后,输出数据就是 1。同一份数据表,换成 CMOS 实现,读出的逻辑完全一致,只是中间多绕了一次反相。

提示:读这类电路图时先找字线、再找位线,最后看交叉点。顺序反了很容易把“这一行存什么”看成“这一列存什么”。

4. SRAM 和 DRAM:同样断电就丢,凭什么分成两种

随机存储器这一支里又分静态存储器(SRAM)和动态存储器(DRAM)。两者都是读写存储器,正常工作状态下随时可以写入或读出,断电都会丢数据,乍看差别不大。可实际系统里它们的位置几乎从不重叠:一个贴着 CPU 当高速缓存,一个做成大容量主存。分成两种,是被“每个存储单元怎么记住一位数据”这个底层选择逼出来的。

4.1 SRAM:每一位数据配一个触发器看着

SRAM 的特点是数据由触发器记忆,只要不断电,数据就能永久保存。触发器是个有记忆能力的电路,一旦被置成某个状态,只要供电不停,它就稳稳保持,不需要外界隔一会儿来提醒一次。读的时候直接看状态,写的时候直接翻转状态,整个过程干净利落。

代价也很实在:SRAM 存储单元所用的管子数量多,功耗大,集成度受到限制。一个触发器要做好几位管子,同样面积的硅片上能放的单位就少,单位成本高,静态时也在耗电。这决定了它没法做成几百兆字节的大仓库,但做成几兆字节的高速缓存恰到好处——容量不用太大,速度必须够快,而且离运算单元越近越好。

4.2 DRAM:靠电容攒电荷,所以要反复刷新

为了克服 SRAM 的这些缺点,就有了 DRAM。它的集成度要比 SRAM 高得多,同样一颗芯片能塞下多得多的位数,单位容量便宜,所以大容量主存基本都走这条路。代价写在名字里——“动态”,意味着它记住的数据不是稳稳锁住的,而是靠电容上攒的那点电荷表示,电荷会慢慢漏掉,于是必须周期性把数据读出来再写回去,这个动作就是刷新。刷新电路要占额外的时间和功耗,读写时序也更复杂。

速度上的差距同样明显,DRAM 的存取速度不如 SRAM。原因不难理解:电容上的信号微弱,读出要靠灵敏放大器去分辨,还要兼顾刷新,整个流程比触发器翻转慢一拍。所以一套系统里常见这样的分层:最靠近运算单元的位置用 SRAM 顶速度,容量大的那一层用 DRAM 顶容量,两者配合,谁也不越界。

对比项SRAMDRAM
数据怎么记触发器锁存电容存电荷
是否需刷新不需要需周期性刷新
集成度受单元面积限制,较低高得多
单元管子数多少
功耗较大相对低(含刷新开销)
速度快不如 SRAM
典型位置高速缓存大容量主存

4.3 双极型与 MOS 型:工艺路线决定谁能做大

除了按存取功能分类,存储器从制造工艺上还可以分成双极型和单极型(CMOS 型)。这两条路线的性格差异很大:双极型器件开关快,但单元结构复杂、功耗高,很难把容量做大;MOS 电路,特别是 CMOS 电路,具有功耗低、集成度高的优点,所以目前大容量的存储器都是采用 MOS 工艺制作的。

这个选择不是偏好问题,而是算账的结果。一颗芯片上要集成几亿个存储单元,每个单元哪怕多耗一点点电,整片的热量和供电都扛不住。CMOS 的特点是静态时几乎不耗电,只有翻转时才消耗,正好对上大容量存储的需求。所以今天看到的存储芯片,绝大多数是 MOS 工艺的天下,双极型更多留在需要极致速度的小场合。理解这条工艺分界,再看“为什么有些存储器又快又贵、有些又大又便宜”,逻辑就顺了。

5. 常见易混概念辨析:ROM、RAM、字线与位线一次分清

学到这里,概念大致齐了,但有几组词特别容易在脑子里串门。串门不可怕,可怕的是带着错的印象去读电路图。下面五条是踩坑率最高的,每条都按“容易混在哪、为什么会混、怎么区分”说清楚。

5.1 易混一:ROM 就是“完全不能写”的存储器

易混点在于把“只读”理解成“绝对写不进去”。为什么混?因为 ROM 这个名字本身就在暗示“只能读”,而掩模 ROM 又确实是写了就改不了,第一印象一旦形成就很难改。怎么区分:ROM 这一族里,掩模 ROM 确实出厂即固化,但 PROM 用户可以写一次,EPROM 和快闪更是能擦除重写。“只读”描述的是它在系统中的常规用法——正常工作时以读为主,不代表物理上没有写入能力。判断一颗片子能不能写,要看它属于哪一类、用什么方式擦写,而不是看它姓不姓 ROM。

5.2 易混二:把 RAM 当成“硬盘”,把 ROM 当成“存储空间”

易混点在于日常口语和技术术语的错位。平时说“内存 8G”“存储 128G”,前一个通常对应 RAM,后一个多半是闪存,也就是 ROM 家族的一员。为什么混?因为两者都叫“存”,中文里又都翻译成“存储器”,商家宣传时也乐得模糊。怎么区分:抓住“断电”这条线。断电就没了、运行程序时反复读写的那部分,是 RAM;断电还在、用来长期放系统和文件的那部分,属于非易失存储,血缘上更接近 ROM 一族。术语和日常说法对不上号的时候,先问一句“断电之后它还在不在”,答案立刻就清楚了。

5.3 易混三:EPROM、E²PROM、快闪是三种互不相干的东西

易混点在于名字长得像,缩写又多一个 2、多一个 E,看着像各成一派。为什么混?因为这些名字都是“可擦除可编程只读存储器”的变体写法,前缀差别只体现在擦除手段上。怎么区分:它们同出一条技术线,都是浮栅结构的可编程器件,差别在擦除方式——EPROM 靠照射擦除,而且是一次全部擦除;E²PROM 和快闪属于电擦除的 PROM,擦除在电路上完成,不用把片子拿下来。记住“同一家族、擦法不同”这句话,就不会把它们当成互不相关的三类器件。

5.4 易混四:存储容量就是把位数加起来

易混点在于把“有多少个存储单元”和“能存多少位”混为一谈。为什么混?因为容量公式里同时出现字数和位数,而很多图只画了位线,看起来位数就是全部。怎么区分:存储容量 = 字数 × 位数。字线有多少根,字数就是多少(地址线 n 根时通常是 2 的 n 次方);位线有多少根,位数就是多少。前文那个 2 位地址、4 位输出的例子,容量是 4×4=16 位,不是 4 位,也不是 4 个字。看参数时先分清这两个乘数,再谈大小。

5.5 易混五:字线和位线,谁选行、谁出数据

易混点在于两根线都画在同一个矩阵里,方向一交叉就分不清谁是谁。为什么混?因为存储矩阵的图是网格状的,横竖都像“地址线”,不看清信号流向就会张冠李戴。怎么区分:字线是地址译码器的输出,负责“选中哪一行”,同一时刻通常只有一根有效;位线是数据的出口,负责“把这一行的 0 和 1 搬出去”,一次输出好几位。一句话记:字线报门牌,位线搬货物。地址线在译码器前面,字线在译码器后面,两者不是一回事;数据线在矩阵后面,和位线是同一批线的不同叫法。

6. 什么时候该用存储器做逻辑,什么时候别硬上

存储器还有个容易被低估的用法:它不只是仓库,还能当逻辑电路用。原因藏在结构里——每条字线对应输入变量的一个最小项,位线则是最小项的或,所以 ROM 天然就能实现逻辑函数的与-或标准式。换句话说,把真值表翻译成存储矩阵里的二极管点阵,逻辑功能就实现了,不用去化简表达式、也不用搭一堆门电路。设计流程很直白:先列出输出为 1 的最小项编号,再在对应的字线和位线交叉点上放器件。

# 把组合逻辑的真值表翻译成 ROM 存储内容 # 地址线 2 根,字线 W0~W3 分别对应最小项 m0~m3 minterms = [1, 2, 3] # 输出为 1 的最小项编号 word_count = 4 # 字数 = 2 的地址线根数次方 rom = [1 if i in minterms else 0 for i in range(word_count)] print(rom) # [0, 1, 1, 1],即 W1、W2、W3 处接器件

这段代码只做一件事:把“哪些最小项让输出为 1”翻译成“哪几根字线上要放器件”。参数里minterms来自真值表,word_count由地址线根数决定,输出的列表顺序对应字线编号。实际画图时,列表里为 1 的位置画交叉点,为 0 的位置留空,一颗实现该逻辑的 ROM 就成型了。

它的边界也很清楚。逻辑特别简单时别硬上,一个与门就能解决的事,动用整片存储器是浪费;需要极高速、极小面积、大批量复制时,专用门电路或可编程逻辑器件通常更合适;反过来,输入变量多、真值表规则复杂、批量又不大时,用存储器实现反而省事,改逻辑只要重写存储内容,不用重新布线。我早年做一个多输入译码逻辑,图省事直接上了存储器方案,结果地址线根数少数了一根,字线编号整体错位,输出看着“大部分对、个别错”,查了很久才发现是最小项编号从 0 开始还是从 1 开始没对齐。从那以后我每次画存储矩阵前都强制先把真值表和最小项编号列一遍,再核对地址线位数,确认无误才动笔。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询