半导体存储器核心知识:ROM/RAM与SRAM/DRAM读写原理 简介这份半导体存储器专题课件面向学习数字电路、计算机组成原理及硬件基础课程的学生与教师围绕第七章内容系统梳理存储器的工作原理与使用方法。压缩包内仅含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×416 位而不是 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 与快闪能擦能写代价在擦除方式上可擦除的可编程 ROMEPROM是这条谱系里的一次跃迁。它采用浮栅技术数据不但可以由用户根据自己的需要写入而且还能擦除重写所以具有较大的使用灵活性。它的数据写入需要通用或专用的编程器擦除方式为照射擦除而且是一次全部擦除——也就是说想改一个字节得把整片内容清空再重新写一遍。电擦除的 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 个地址码译成 W0W3 四根线上的高电平信号这四根线叫字线。每一根字线对应一个地址也对应一个“字”。存储矩阵里字线和位线交叉的地方如果接了二极管就相当于存 1没接就相当于存 0。当某根字线给出高电平时接在它上面的二极管导通把对应的位线拉出电平D0D3 这四根位线也叫数据线上就出现了这一行存的四位二进制代码。交叉点的数目就是存储单元数所以这个例子的存储量是 4×416 位。画图时还有一种简化画法凡是有二极管的位置都用交叉点“·”表示并且省略电阻、输出缓冲器和电源等符号看起来就是一张干干净净的点阵图。这张图不是抽象符号它就是数据的物理形态——想改数据得改这些点。用 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×416 位不是 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 开始没对齐。从那以后我每次画存储矩阵前都强制先把真值表和最小项编号列一遍再核对地址线位数确认无误才动笔。希望帮到你。本文还有配套的精品资源点击获取