ROM(只读存储器)
概述
- 用途:ROM(只读存储器)是一种数字存储组件,包含在正常操作期间无法修改的预编程数据。它作为非易失性内存,即使断电也能保留其内容。
- 符号:ROM 以矩形方块表示,具有地址输入、控制输入(片选、输出使能)和数据输出。
- DigiSim.io 角色:为数字电路提供程序、查找表和参考数据的永久存储,对于实现需要固定数据或指令的系统至关重要。

功能描述
逻辑行为
ROM 提供对预存储数据的只读访问。当地址应用于地址输入时,ROM 输出存储在该位置的数据,前提是通过控制输入使能了芯片。
真值表:
| CS (引脚) | OE (引脚) | 地址 (A) | 数据输出 | 操作 |
|---|---|---|---|---|
| 0 (LOW) | 0 (LOW) | 任意值 | 地址处的数据 | 读取(使能) |
| 0 (LOW) | 1 (HIGH) | 任意值 | 高阻抗 (关闭) | 输出禁用 |
| 1 (HIGH) | X | 任意值 | 高阻抗 (关闭) | 芯片禁用 |
注:CS = 片选(低电平有效),OE = 输出使能(低电平有效),X = 无关,高阻抗 = 高阻状态。CS 和 OE 都必须为 LOW (0) 数据输出才有效。
输入和输出
输入:
- Address[7:0]:8 位地址输入,选择 256 个内存位置之一(A0-A7)。
- CS(片选):1 位控制输入,使能或禁用整个芯片(低电平有效)。
- OE(输出使能):1 位控制输入,使能或禁用数据输出(低电平有效)。
输出:
- Data[7:0]:8 位数据输出,表示所选地址存储的内容。
可配置参数
- 内存大小:总存储容量(例如 256 字节、1 KB 等),由地址宽度决定。
- 数据宽度:每个内存位置的位数(通常为 8,但也可以是 4、16、32 等)。
- 内容:存储在 ROM 中的预编程数据,在配置期间加载。
- 访问时间:从应用地址到输出有效数据之间的延迟。
DigiSim.io 中的视觉表示
ROM 显示为一个矩形方块,左侧标有输入(A0-A7 为地址,CS 为片选,OE 为输出使能),右侧有数据输出(D0-D7)。组件通过输出上显示的值和连接线上的颜色变化直观地指示其活动状态。用户可以通过专用对话框查看和编辑 ROM 内容。
教育价值
核心概念
- 非易失性存储:演示数字系统如何存储永久数据。
- 内存寻址:说明如何使用二进制地址访问特定数据。
- 内存层次结构:介绍计算系统中不同类型内存的概念。
- 控制信号:展示片选和输出使能信号如何管理设备操作。
- 内存组织:呈现字可寻址内存的基本组织。
学习目标
- 理解永久存储在数字系统中的作用。
- 学习寻址方案如何提供对特定内存位置的访问。
- 认识各种类型内存之间的区别(ROM 与 RAM)。
- 将 ROM 应用于需要常量数据的设计,如查找表或程序存储。
- 理解地址空间、数据宽度和内存容量之间的关系。
使用场景
- 程序存储:在计算系统中保存固件或引导加载程序代码。
- 字符生成:为显示系统存储字体数据。
- 查找表:通过预计算值实现数学函数。
- 状态机:在控制系统中编码复杂的状态转换。
- 微代码存储:在 CPU 中存储指令译码信息。
- 常量数据:为校准或配置提供参考值。
技术说明
- ROM 的实现包括掩膜 ROM(工厂编程)、PROM(一次性可编程)、EPROM(紫外线可擦除)、EEPROM 和闪存(电可擦除)。
- 访问时间是影响系统性能的关键参数,根据技术不同通常在 45-200ns 之间。
- 现代系统通常使用闪存实现 ROM 功能,或在初始化期间将数据从存储器加载到 RAM 中。
- 在 DigiSim.io 中,ROM 的访问时间经过仿真以提供真实的时序行为。
- ROM 在引导过程中特别重要,在从其他存储器加载之前,系统需要初始指令。
- 控制信号:CS(片选)和 OE(输出使能)都实现为低电平有效信号:
- CS(片选):当 CS = 0 (LOW) 时,芯片被选中并处于活动状态。当 CS = 1 (HIGH) 时,芯片被禁用,输出为高阻抗。
- OE(输出使能):当 OE = 0 (LOW) 时,输出缓冲器被使能。当 OE = 1 (HIGH) 时,输出为高阻抗(三态)。
- 组合逻辑:仅当 CS = 0 (LOW) 且 OE = 0 (LOW) 时才输出数据。如果任一信号为 HIGH,输出为高阻抗。
- 这遵循内存组件的标准数字逻辑约定,允许多个 ROM 设备共享公共数据总线。
特性
输入配置:
- 地址输入(ROM 大小从 256 字节到 1MB 通常需要 8 到 20 条线)
- 片选 (CS) 输入用于使能/禁用设备
- 输出使能 (OE) 输入用于控制输出缓冲器
- 所有输入与标准数字逻辑电平兼容
- 地址线决定读取哪个内存位置
- 控制输入管理设备操作时序
输出配置:
- 数据输出(通常为 8 位宽,但也可以是 4、16 或 32 位)
- 三态输出,可禁用为高阻抗状态
- 输出提供所选地址存储的数据
- 能够驱动标准数字负载
- 通常具有缓冲以提供更高的电流驱动能力
功能:
- 存储固定程序代码或常量数据
- 非易失性(断电时保留数据)
- 正常操作期间为只读
- 访问时间决定地址更改后数据可用的速度
- 译码地址以选择 2^n 个内存位置之一
- 提供所选位置的预编程值
- 正常操作期间无法写入
传播延迟:
- 地址访问时间:典型 45-200ns
- 片选访问时间:典型 45-200ns
- 输出使能访问时间:典型 20-100ns
- 取决于技术(掩膜 ROM、PROM、EPROM 等)
- 系统时序的关键参数
- 可能随温度和电压变化
扇出:
- 通常驱动 10-20 个标准负载
- 输出缓冲器专为总线接口设计
- 可能包含可配置的输出驱动强度
- 通常设计为驱动标准总线负载
功耗:
- 静态功耗从低到中等,取决于技术
- 活动功耗随访问频率增加
- 芯片未选中时的待机功耗
- 现代设备中的电源管理模式
- 功耗显著低于同等 RAM
- 可提供低功耗模式以节省电池
电路复杂度:
- 内部复杂度高(地址译码器、存储阵列、输出缓冲器)
- 外部接口简单(地址输入、控制输入、数据输出)
- 随容量和技术而变化
- 可编程变体(EPROM、EEPROM)具有额外复杂度
- 现代设备可能包含高级功能(纠错等)
实现方法
掩膜 ROM
- 在制造过程中通过掩膜层编程内容
- 大批量生产时密度最高、成本最低
- 制造后无法修改
- 自定义模式的交付周期长
- 最适合大批量生产
- 通常用于大批量固定应用
可编程 ROM (PROM)
- 使用熔丝或反熔丝技术一次性可编程
- 用户可以编程一次但无法擦除
- 比掩膜 ROM 周转更快
- 适合中等生产量
- 使用专用 PROM 编程器进行编程
- 常见于传统系统和生产环境
可擦除可编程 ROM (EPROM)
- 可用紫外线擦除并重新编程
- 通过封装上的石英窗口可识别
- 可多次编程
- 擦除时间长(通常 20-30 分钟)
- 适合开发和小批量生产
- 广泛用于嵌入式系统和微控制器应用
电可擦除 PROM (EEPROM)
- 可电擦除和重新编程
- 字节级擦除和编程
- 有限的编程次数(通常 100,000 次以上)
- 写入时间比 RAM 慢
- 具有电可重写性的非易失性存储
- 常用于配置存储和小数据集
闪存 ROM
- 高密度电可擦除 ROM
- 块级擦除(而非字节级)
- 容量高于传统 EEPROM
- 擦除和写入时间比 EEPROM 更快
- 有限的编程次数(100,000 到 1,000,000 次)
- 主导现代嵌入式和存储应用
FPGA/ASIC 实现
- 作为查找表或专用 ROM 块实现
- 可在设计时或初始化时配置
- 针对特定应用需求进行优化
- 在现代可编程逻辑中资源高效
- 可与处理逻辑结合
- 在可重编程逻辑中实现时允许现场更新
仿真 ROM
- 使用 RAM 和初始化逻辑实现 ROM 功能
- 在启动期间从外部存储加载内容
- 在保持类 ROM 接口的同时允许轻松更新
- 常见于基于微处理器的系统
- 结合了重编程的灵活性和 RAM 访问的速度
- 用于系统引导的影子 ROM 技术
应用
引导加载程序存储
- 计算机中的 BIOS/UEFI 存储
- 微控制器启动代码
- 初始程序加载器
- 系统初始化例程
- 自检程序
- 引导序列存储
固件存储
- 操作系统内核
- 设备驱动程序
- 控制程序存储
- 嵌入式系统软件
- 固定算法实现
- 系统控制例程
查找表
- 三角函数值
- 字符集和字体
- 调色板
- 转换表
- 算法系数
- 函数近似
微代码存储
- CPU 指令译码
- 复杂指令解释
- 信号处理算法
- 固定序列控制
- 指令扩展
- 状态机编码
字符发生器
- ASCII/Unicode 字符图案
- 显示字体
- 自定义符号集
- 图形元素存储
- 图标库
- 显示图案生成
常量数据存储
- 配置参数
- 校准常数
- 固定参考数据
- 安全密钥和标识符
- 序列号和 ID
- 许可信息
数字信号处理
- 滤波器系数
- 快速傅里叶变换常数
- 音频波形
- 信号模式识别
- 数字滤波器实现
- 算法常数
局限性
不灵活性
- 正常操作期间无法修改内容
- 更新需要更换或特殊编程程序
- 不适合可变数据存储
- 内容更改需要系统重新设计
- 对不断变化的需求不够灵活
- 多个 ROM 变体的版本控制困难
访问时间限制
- 在大多数技术中比 RAM 慢
- 访问时间限制系统性能
- 快速处理器可能需要等待状态
- 高性能系统通常需要缓存
- 高速系统的时序约束
- 设计中的速度-功率权衡
编程复杂性
- 编程需要特殊设备
- 可擦除变体的复杂程序
- EEPROM/闪存的有限编程次数
- 编程验证要求
- 写保护管理
- 专用编程协议
物理限制
- 与现代存储相比密度有限
- 尺寸和功率约束
- 温度敏感性
- 随时间推移的数据保留问题
- 封装限制
- 旧技术的淘汰
成本因素
- 每位成本高于大容量存储
- 掩膜 ROM 需要规模经济
- 自定义内容的开发成本
- 测试和验证费用
- 编程设备投资
- 预编程设备的库存管理
电路实现细节
基本 ROM 阵列结构
存储单元阵列组织:
graph TB
AddressInputs[Address Inputs<br/>A0, A1, ...] --> RowDecoder[Row Decoder]
RowDecoder --> MemoryArray[Memory Cell Array<br/>Programmed Cells]
MemoryArray --> ColumnDecoders[Column Decoders<br/>& Output Buffers]
ColumnDecoders --> DataOutputs[Data Outputs<br/>D0, D1, D2, D3, ...]
结构组件:
- 行译码器:根据地址输入选择一行存储单元
- 存储单元阵列:可编程单元的二维矩阵(● = 1,○ = 0)
- 列译码器:将选定行的数据路由到输出缓冲器
- 输出缓冲器:放大和驱动数据输出
操作:地址选择行 → 读取单元状态 → 数据出现在输出上
示例 28C16 EEPROM IC
引脚配置(2KB EEPROM):
| 引脚组 | 引脚 | 功能 |
|---|---|---|
| 地址 | A0-A10 | 11 位地址(2048 个位置) |
| 数据 | D0-D7 | 8 位数据总线(双向) |
| 控制 | /CE | 芯片使能(低电平有效) |
| 控制 | /OE | 输出使能(低电平有效) |
| 控制 | /WE | 写使能(低电平有效) |
| 电源 | VCC, GND | +5V 和地 |
特性:
- 容量:2K × 8 位(2048 字节)
- 访问时间:典型 150-250ns
- 写入次数:100,000 次以上擦写周期
- 数据保留:10 年以上
- 编程:逐字节电编程
相关组件
- RAM(随机存取存储器):允许以相当的速度进行读写操作
- PROM(可编程 ROM):一次性可编程 ROM
- EPROM(可擦除 PROM):可用紫外线擦除并重新编程的 ROM
- EEPROM(电可擦除 PROM):可电擦除并重新编程的 ROM
- 闪存:具有块擦除功能的高密度 EEPROM
- NVRAM(非易失性 RAM):断电时保留数据的 RAM
- FRAM(铁电 RAM):使用铁电存储的非易失性内存
- 掩膜 ROM:在制造期间编程的 ROM
- 内容可寻址存储器:将输入与存储内容进行比较的存储器
- 内存控制器:管理 ROM 和其他内存组件访问的控制器