第 213 篇
考研数电·零基础讲义 第22讲(上)|ROM 只读存储器
考研数电·零基础讲义 · 第 22 讲(上)|ROM 只读存储器 学完这一讲,你能说清存储器的"地址、字、容量"是什么意思,看懂二极管 ROM 的读数过程,分得清掩模 ROM、PROM、EPROM、E²PROM、闪存,并能用 ROM 实现一组组合逻辑函数。预计用时 90–110 分钟。
本讲地图
- 存储器概述:存储器 = 一大堆存储单元 + 地址。核心概念:地址、字、位、容量字数位数。
- ROM 的结构:地址译码器(与阵列)+ 存储矩阵(或阵列)+ 输出缓冲器。字线、位线交叉点"有器件 = 存 1,没器件 = 存 0"。
- ROM 的分类:掩模 ROM、PROM(一次性)、EPROM / E²PROM / 闪存(可擦写)。
- 用 ROM 实现组合逻辑函数:个输入、个输出,用一片的 ROM,把真值表直接"抄"进去。
- 华师怎么考:考纲写明"半导体存储器和可编程逻辑器件:SRAM、DRAM、ROM 等"。常见考法:概念题(ROM 与 RAM 区别、种类)、容量与地址线计算、用 ROM 实现函数并列数据表。教材对应第 5 章 5.5 节(5.5.3、5.5.5)。
前置知识
- 二进制、最小项与最小项之和(见第 03 讲)。
- 译码器:位输入译出根输出线,每次只有一根有效(见第 09 讲下)。
- 三态输出(见第 06 讲):三态缓冲器能让输出"断开",方便多个器件并联在总线上。
一、存储器的基本概念
大白话
寄存器(第 15 讲)是"一排小抽屉",每个抽屉的进出口都直接拉线出来,所以只能做很小几位。但电脑里要存几十亿位数据,不可能拉几十亿根线。
办法和住宿楼一样:给每个房间编号(地址),只有喊到哪个房号,那个房间才和门口的"公共窗口"接通。这样不管有多少房间,窗口永远只有那么几个引脚。
术语
| 术语 | 意思 | 例子 |
|---|---|---|
| 存储单元 | 存 1 位二进制数的最小单位 | 一个"抽屉" |
| 字(word) | 一个地址里存的一组数据 | 一个地址存 8 位,一个字就是 8 位 |
| 地址 | 给每个字的编号,用二进制数表示 | 10 根地址线能编个地址 |
| 字数 | 地址的个数(为地址线数) | 10 位地址 → 1024 字 |
| 位数 | 每个字的位数,等于数据线的根数 | 8 根数据线 → 8 位 |
| 存储容量 | 总共能存多少位 | 容量字数位数 |
写法:容量写成"字数 × 位数",例如,读作"1024 乘 8",总共位,也就是 1024 字节(1 字节 = 8 位)。
例 1 某存储器有 11 根地址线、8 根数据线,容量多大?
字数,位数,容量位字节。
例 2 要存的数据,需要几根地址线?总共多少位?
,所以 16 根地址线;总位数位位(1 Mbit)。
存储器的分类
按"能不能随时写"分成两大类:
- RAM(随机存储器):随时可读可写,但断电后数据消失。分 SRAM(静态)和 DRAM(动态),见第 22 讲(下)。
- ROM(只读存储器):正常工作时只能读,断电数据不丢。本讲重点。
⚠️ 易错:容量计算别漏乘位数。""不是 1024 位,而是 8192 位。
二、ROM 的结构:一个"字典"
大白话
ROM 像一本出厂就印好的字典:你给它一个页码(地址),它就把那一页的内容(数据)读给你,而且你改不了字典内容。
三个组成部分
教材图 5.5.6 把 ROM 分成三块:
- 地址译码器:把地址代码变成"字线"信号。2 位地址译成 4 根字线,每次只有被选中的那根为高电平。(译码器本质就是一组与门,所以叫"与阵列"。)
- 存储矩阵:字线和"位线"(数据线)纵横交叉,每个交叉点是一个存储单元。交叉点接了器件表示存 1,没接表示存 0。(每根位线相当于一个或门,所以叫"或阵列"。)
- 输出缓冲器:增强带负载能力,并用信号做三态控制,方便接总线。
二极管 ROM 逐步读数
看图 1:2 位地址、4 位数据的 ROM(教材图 5.5.7),二极管接在字线和位线的交叉点。
图 1:二极管 ROM 读出演示。每 2 秒切换一个地址,橙条是被选中的字线,绿灯亮表示该位输出 1(动画循环播放)
读出原理:某根字线为高电平时,凡是接在它上面的二极管都导通,把对应位线拉成高电平;没接二极管的位线保持低电平。所以:
- :,上有两个二极管,接和 → 输出;
- :,接 → ;
- :,只接 → ;
- :,接 → 。
整理成数据表:
| 0 | 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 | 1 | 0 |
这个 ROM 共个交叉点,其中有 9 个二极管(存 1 的个数),7 个空位(存 0)。
与阵列、或阵列:把 ROM 看成两层逻辑
由上表可以写出各位输出(把看作最小项):
而,,,。也就是说:
- 译码器 = 把输入变量的全部最小项产生出来(固定的"与阵列",不可改);
- 存储矩阵 = 每个输出是若干最小项相或(可编程的"或阵列")。
这就是为什么 ROM 能当"任意组合逻辑发生器"——后面第四节详述。
MOS 管 ROM
用 MOS 管做时,交叉点接 N 沟道增强型 MOS 管表示"存 1"(教材图 5.5.8)。字线高 → 该管导通 → 位线被拉低 → 输出缓冲器反相后输出 1。结论与二极管 ROM 一致:交叉点有管 = 存 1,没管 = 存 0。
⚠️ 易错:不同教材、不同图,"接器件"有时表示存 1,有时(如教材例 5.5.1 的掩模矩阵图)表示存 0。做题时先看题目或图下的说明。
三、ROM 的分类
按"数据怎么写进去"分,由简到繁:
| 类型 | 怎么写 | 能否改 | 特点 |
|---|---|---|---|
| 掩模 ROM | 出厂时由掩模板决定 | 不能改 | 制作周期长、版图成本高,适合大批量定型产品 |
| PROM | 用户用编程器一次性写入 | 只能写一次 | 出厂时全是 1(所有交叉点都有器件),需要写 0 的地方把熔丝烧断(或反熔丝击穿接通) |
| EPROM(紫外线擦除) | 编程器写入 | 可擦可重写 | 擦除用紫外线照射 |
| E²PROM | 电信号擦写 | 可擦可重写 | 可按字节擦写,不用紫外线 |
| 闪存(Flash) | 电信号擦写,整块/整区擦除 | 可擦可重写,次数有限(约次) | 集成度高、容量大、成本低,U 盘、手机存储里用的就是它 |
PROM(熔丝型)要点
- 原始状态:所有单元都存 1。
- 写 0:选中该单元,在位线加编程脉冲(约 20 V,十几微秒),大电流烧断熔丝。
- 熔丝烧断后无法恢复,所以 PROM 只能写一次。
闪存要点(浮栅 MOS 管)
- 存储单元是浮栅 MOS 管:控制栅之外多了一个被绝缘体包住的"浮置栅"。
- 浮置栅上充有负电荷 → 管子不容易导通(开启电压升高到 7 V 以上)→ 字线给正常高电平时管子仍截止 → 位线保持高 → 读出 1;浮置栅没电荷 → 管子导通 → 读出 0。
- 写入(充电):漏极加约 6 V,控制栅加约 12 V 脉冲,雪崩注入使电子进入浮栅。
- 擦除(放电):控制栅接 0,源极加约 12 V、约 100 ms 的正脉冲,利用隧道效应让电荷从浮栅放走。NOR 闪存所有源极连在一起,所以一擦就是一整个区。
- 读很快(几十到两百纳秒),写慢(十到五十微秒/字节),所以闪存虽可擦写,仍归入只读存储器。
⚠️ 易错:闪存"能擦写"却叫只读存储器,原因是写比读慢得多,而且擦写次数有限,不能当 RAM 用。
四、用 ROM 实现组合逻辑函数
大白话
ROM 是"地址 → 数据"的查表机。一个组合逻辑电路,也是"输入 → 输出"的查表:给定输入组合,输出是确定的。把真值表按地址一行一行抄进 ROM,ROM 就成了这个电路。
规则
- ROM 有位地址、位数据 → 最多实现个变量的函数。
- 变量接地址线,函数从数据线输出。
- 第个地址存放的数据 = 各函数在最小项处的取值(函数含就存 1,否则存 0)。
- 所需 ROM 容量。
例 3(教材例 5.5.2 的做法) 用 ROM 产生一组函数:
第 1 步:全部展开成最小项。变量排成(最高位)。
- :缺,展开成(0110=6)和(0111=7);展开成 0010=2 和 0011=3。所以。
- :=1010=10;缺,展开成 0110=6 和 1110=14;=0111=7。所以。
- :=1110=14;=0100=4。所以。
- :=0010=2;=1111=15。所以。
(以上最小项由 Python 逐个代入验证。)
第 2 步:选 ROM。4 个变量 → 4 位地址;4 个函数 → 4 位数据,选的 ROM。依次接地址线,依次接数据线。
第 3 步:列数据表(行是地址,列是):
| 地址(最小项) | 数据 | 地址(最小项) | 数据 |
|---|---|---|---|
| 0 | 0000 | 8 | 0000 |
| 1 | 0000 | 9 | 0000 |
| 2 | 1001 | 10 | 0100 |
| 3 | 1000 | 11 | 0000 |
| 4 | 0010 | 12 | 0000 |
| 5 | 0000 | 13 | 0000 |
| 6 | 1100 | 14 | 0110 |
| 7 | 1100 | 15 | 0001 |
图 2:例 3 的 ROM 点阵,每个红点表示存 1(交叉点接器件)
⚠️ 易错:函数不是最小项之和形式时,一定要先展开(缺的变量用补)再填表;变量顺序要和地址高低位对应。
例 4:全加器
全加器有 3 个输入,2 个输出(见第 11 讲)。用的 ROM:
| 000 | 0 | 0 |
| 001 | 1 | 0 |
| 010 | 1 | 0 |
| 011 | 0 | 1 |
| 100 | 1 | 0 |
| 101 | 0 | 1 |
| 110 | 0 | 1 |
| 111 | 1 | 1 |
即,,ROM 容量位。
ROM 与其他实现方式的对比
- 用 ROM:不用化简,直接抄真值表;变量一多,容量按暴涨。
- 变量数大于地址线数,或函数个数大于数据线数时:多片 ROM 扩展(见第 22 讲下),或者换别的电路。
- 地址线用不完时:多余地址线接固定电平(接地或接高),只用其中一部分地址;多余数据位悬空不用。
例 5:用 ROM 做显示译码器(教材例 5.5.1 的思路)
把 4 位 BCD/二进制码译成八段数码管(加小数点)的 8 位驱动信号,共 16 个输入组合,所以选的 ROM:接地址线,8 根数据线依次接。
怎么写数据?以字形 "0" 为例:六段亮,不亮,小数点(按教材表)接高电平,数据就是,把它存进地址 0000。其余 15 个地址同样"按字形抄"。
这类表格里 0 比 1 少得多(按教材表 5.5.4 的 16 行共 128 个数据位,其中有 40 个 0、88 个 1),而且做掩模 ROM 时"每个存 0 的位置才接二极管",所以接二极管表示存 0 能省下器件。这就是前面⚠️提到的"接器件有时表示 0"的原因:谁少,就用谁来接器件。
ROM 读数据的时序直觉
使用 ROM 时没有"写"这一步,只有"读":
- 在地址线上放好地址;
- 让输出使能(三态缓冲器打开);
- 等一小段时间(读出时间,即从地址稳定到数据稳定的延迟)后,数据线上就是该地址的内容;
- 时输出为高阻,ROM 就从总线上"断开",别的器件可以用总线。
ROM 和 RAM 的对照
| 项目 | ROM | RAM |
|---|---|---|
| 正常工作 | 只读 | 可读可写 |
| 断电 | 数据保留 | 数据丢失 |
| 单元 | 一个器件(或无) | 锁存器 / 电容 |
| 典型用途 | 固定程序、字库、函数表 | 临时数据、运算中间结果 |
| 控制端 | 片选/输出使能,没有 | 片选、读写控制 |
五、速记卡
| 项目 | 要点 |
|---|---|
| 容量 | 字数 × 位数,地址线根 |
| ROM 三部分 | 地址译码器(与阵列)、存储矩阵(或阵列)、输出缓冲器(三态) |
| 存 1 / 存 0 | 字线与位线交叉点:有器件 = 1,无 = 0(看题目说明) |
| 掩模 ROM | 出厂固定,批量大时用 |
| PROM | 熔丝烧断写 0,一次性 |
| EPROM | 紫外线擦除;E²PROM、闪存:电擦除 |
| 闪存 | 浮栅 MOS 管,负电荷 = 1;隧道效应擦除;擦写次数有限 |
| 实现函数 | 变量函数 → ROM,按真值表写数据 |
六、自测练习
1. 某 ROM 有 13 根地址线、8 根数据线,容量是多少位?合多少 KB?
答案与提示
字数,容量位,字节 KB(字节)。
2. 一片的存储器有几根地址线、几根数据线?总容量多少位?
答案与提示
字,所以 16 根地址线、16 根数据线;总容量位(1 Mbit)。
3. 简述 PROM 为什么只能写一次,闪存为什么能反复擦写。
答案与提示
PROM 靠烧断熔丝(或击穿反熔丝)写入,这是不可逆的物理变化;闪存靠浮栅上电荷的"充入/放出"改变管子的开启电压,电荷可以通过雪崩注入再充、隧道效应再放,所以可以重复擦写(次数有限)。
4. 图 1 中的二极管 ROM,时输出什么?对应哪些地址存 1?
答案与提示
时,输出。在地址 01 和 11 处存 1,即。
5. 用 ROM 实现 2 位二进制数到格雷码的转换需要几位地址、几位数据?若是 4 位二进制数转 4 位格雷码呢?写出后者地址 5(0101)、10(1010)存的数据。
答案与提示
2 位:,2 位地址、2 位数据。4 位: ROM,4 位地址、4 位数据。格雷码:地址 5 → ;地址 10 → 。(Python 验算全部 16 行。)
6. 用 ROM 实现"3 位二进制数的平方",需要多大容量的 ROM?写出和时的数据。
答案与提示
最大 7,,输出需要 6 位。所以用的 ROM(共 48 位)。:;:。
7. 用 ROM 实现 2 位 × 2 位二进制乘法器,ROM 的规格?地址 1001()和 1111 存什么?
答案与提示
4 个输入、乘积最大(1001),4 位输出,选 ROM。地址 1001: → 0010;地址 1111: → 1001。
8.(华师真题风格) 用 ROM 实现一位全加器,写出 ROM 的规格和数据表,并说明与用门电路实现相比有什么特点。
答案与提示
规格(见例 4),数据表见例 4。特点:不用化简、设计直观,改功能只需改数据;但容量随变量数按增长,输入多时不经济,且速度受 ROM 读出时间限制。
下一讲预告
第 22 讲(下)讲能读能写的 RAM:SRAM 靠锁存器存数,DRAM 靠电容存数还要刷新;之后学怎么用多片存储器通过"位扩展、字扩展"拼出更大容量,并算清地址分配。
👉 点击进入下一讲:第22讲(下)|SRAM、DRAM 与存储器容量扩展
评论
还没有评论。 来写第一条。