
🌈 say-fall:个人主页 🚀 专栏:《手把手教你学会C++》 | 《系统深入Linux操作系统》 | 《数据结构与算法》 | 《小游戏与项目》 💪 格言:做好你自己,才能吸引更多的人,与他们共赢,这才是最好的成长方式。
📝 前言
提到计算机的"记忆",你可能会想到硬盘、U盘、内存条......但你知道它们之间有什么本质区别吗?为什么电脑一断电,正在写的东西就没了?为什么打开一个程序要等几秒,但切换到刚才看过的网页却几乎是瞬间?
这些问题的答案都指向同一个核心------半导体存储器。它是连接CPU和软件的桥梁,理解它的工作原理对于理解整个计算机系统至关重要。
本文将从零开始,系统讲解半导体存储器的分类与特性、RAM和ROM的芯片设计与接口、存储器扩展技术、高速缓存Cache等核心知识。无论你是在备考微机原理,还是想深入理解计算机底层架构,这篇文章都能帮你建立一个完整的知识框架。
通过本文,你将掌握:
| 技能 | 应用场景 |
|---|---|
| 半导体存储器的分类与特点 | 区分SRAM/DRAM/EPROM/EEPROM/Flash |
| RAM芯片与系统的连接方法 | 设计存储器接口电路 |
| 地址译码电路设计(全译码/部分译码) | 将存储器芯片映射到指定地址范围 |
| 存储器扩展技术(位扩展/字扩展/字位扩展) | 用多片芯片构成所需容量的存储器 |
| Cache的基本原理与读写策略 | 理解CPU高速缓存的工作机制 |
📌 前置知识: 了解二进制/十六进制的基本概念,知道8086系统的地址总线(A19~A0,20根,可寻址1MB)和数据总线结构。
文章目录
-
- [📝 前言](#📝 前言)
- [一、🔧 半导体存储器分类及基本概念](#一、🔧 半导体存储器分类及基本概念)
-
- [1️⃣ 什么是半导体存储器](#1️⃣ 什么是半导体存储器)
- [2️⃣ 半导体存储器的分类](#2️⃣ 半导体存储器的分类)
- [3️⃣ CPU与存储器连接的总线信号](#3️⃣ CPU与存储器连接的总线信号)
- [二、📦 RAM存储器设计](#二、📦 RAM存储器设计)
-
- [1️⃣ 静态RAM(SRAM)------ 典型芯片6264](#1️⃣ 静态RAM(SRAM)—— 典型芯片6264)
-
- (1)芯片引脚与容量
- (2)存储器与系统连接的核心问题
- (3)地址译码方式
-
- [① 全地址译码](#① 全地址译码)
- [② 部分地址译码](#② 部分地址译码)
- (4)专用译码器:74LS138
- [2️⃣ 动态RAM(DRAM)------ 典型芯片2164A](#2️⃣ 动态RAM(DRAM)—— 典型芯片2164A)
- [三、💿 ROM存储器设计](#三、💿 ROM存储器设计)
-
- [1️⃣ EPROM(可擦除可编程ROM)------ 典型芯片2764](#1️⃣ EPROM(可擦除可编程ROM)—— 典型芯片2764)
- [2️⃣ EEPROM(电可擦除可编程ROM)------ 典型芯片98C64A](#2️⃣ EEPROM(电可擦除可编程ROM)—— 典型芯片98C64A)
- [3️⃣ Flash存储器](#3️⃣ Flash存储器)
- [四、🔌 半导体存储器扩展技术](#四、🔌 半导体存储器扩展技术)
-
- [1️⃣ 位扩展(扩展字长)](#1️⃣ 位扩展(扩展字长))
- [2️⃣ 字扩展(扩展单元数)](#2️⃣ 字扩展(扩展单元数))
- [3️⃣ 字位扩展(同时扩展字长和单元数)](#3️⃣ 字位扩展(同时扩展字长和单元数))
- [五、⚡ 高速缓冲存储器(Cache)](#五、⚡ 高速缓冲存储器(Cache))
- [六、🤔 几个思考题](#六、🤔 几个思考题)
-
- [1️⃣ SRAM和DRAM的核心区别是什么?各自适用于什么场景?](#1️⃣ SRAM和DRAM的核心区别是什么?各自适用于什么场景?)
- [2️⃣ 全地址译码和部分地址译码各有什么优缺点?](#2️⃣ 全地址译码和部分地址译码各有什么优缺点?)
- [3️⃣ 为什么2164A需要每8片构成一个存储体?](#3️⃣ 为什么2164A需要每8片构成一个存储体?)
- [4️⃣ 位扩展和字扩展在连线方式上有什么不同?](#4️⃣ 位扩展和字扩展在连线方式上有什么不同?)
- [5️⃣ Cache的写穿式和回写式各有什么优缺点?](#5️⃣ Cache的写穿式和回写式各有什么优缺点?)
- [📚 学习总结与建议](#📚 学习总结与建议)
一、🔧 半导体存储器分类及基本概念
1️⃣ 什么是半导体存储器
半导体存储器是由能够表示二进制数"0"和"1"的、具有记忆功能的半导体器件组成的存储设备。
要理解存储器,需要先搞清楚几个基本概念:
| 概念 | 说明 |
|---|---|
| 存储元 | 能存放一位 二进制数的半导体器件,是存储器的最小单位 |
| 存储单元 | 由若干存储元组成,通常存放一个字节(8位)或一个字(16位) |
| 存储容量 | 存储器能存放的二进制信息总量,常用KB、MB、GB等表示 |
2️⃣ 半导体存储器的分类
半导体存储器主要分为两大类:随机存取存储器(RAM)和只读存储器(ROM) ,核心区别在于断电后数据是否丢失。
半导体存储器
├── RAM(随机存取存储器)------ 断电丢失,易失性
│ ├── SRAM(静态RAM)------ 双稳态触发器,速度快,用于Cache
│ ├── DRAM(动态RAM)------ 电容存储,需刷新,用于主存
│ └── SDRAM(同步DRAM)------ 与CPU时钟同步,速度更快
└── ROM(只读存储器)------ 断电保留,非易失性
├── 掩模ROM ------ 出厂写入,不可修改
├── OTP-ROM ------ 可编程一次
├── EPROM ------ 紫外线擦除,可多次编程
├── EEPROM ------ 电擦除,在线读写
└── Flash ------ 块擦除,集成度高,应用最广
(1)随机存取存储器(RAM)
RAM可以随时对任意一个存储单元进行读或写,断电后数据丢失,属于易失性存储器。
静态RAM(SRAM)
- 存储元由双稳态触发器构成,只要不断电数据就不会丢失
- 优点:速度快、不需要刷新、控制简单
- 缺点:集成度低、功耗大、价格高
- 应用:高速缓存(Cache)
动态RAM(DRAM)
- 存储元由电容构成,依靠电容存储电荷来保存数据
- 优点:集成度高、功耗小、价格低
- 缺点:速度较慢、需要定时刷新(通常2~4ms)、控制复杂
- 应用:计算机主内存
同步动态RAM(SDRAM)
- 在DRAM基础上增加了同步时钟接口,与CPU时钟同步工作
- 速度比普通DRAM快很多,是现代计算机内存的主流技术
(2)只读存储器(ROM)
ROM中的数据预先写入,正常工作时只能读不能写,断电后数据不丢失,属于非易失性存储器。
| 类型 | 擦除方式 | 特点 |
|---|---|---|
| 掩模ROM | 不可擦除 | 厂家写入,成本低,适合大批量 |
| OTP-ROM | 不可擦除 | 用户可编程一次 |
| EPROM | 紫外线照射(15~20分钟) | 需专用编程器,透明窗口芯片 |
| EEPROM | 电信号擦除 | 可在线擦除和写入 |
| Flash | 电信号块擦除 | 擦除速度快,集成度高,应用最广 |
(3)RAM与ROM核心对比
| 特性 | RAM | ROM |
|---|---|---|
| 断电后数据 | 丢失 | 保留 |
| 读写特性 | 可随机读写 | 正常工作时只能读 |
| 速度 | 较快 | 较慢 |
| 用途 | 主存、Cache | BIOS、固件、程序存储 |
3️⃣ CPU与存储器连接的总线信号
8088 CPU通过系统总线与存储器连接,主要有三类信号:
| 总线类型 | 方向 | 8088规格 | 功能 |
|---|---|---|---|
| 地址总线(AB) | 单向(CPU→存储器) | A19~A0(20根) | 指定访问的存储单元地址 |
| 数据总线(DB) | 双向 | D7~D0(8根) | 传输数据 |
| 控制总线(CB) | 单向/双向 | --- | 传输控制信号 |
8088控制信号与IO/#M信号的关系:
IO/#M |
#RD |
#WR |
有效信号 | 含义 |
|---|---|---|---|---|
| 0 | 0 | 0 | #MEMR=0, #MEMW=0 |
访问存储器 |
| 1 | 0 | 0 | #IOR=0, #IOW=0 |
访问I/O端口 |
#MEMR:存储器读信号,低电平有效,CPU从存储器读数据#MEMW:存储器写信号,低电平有效,CPU向存储器写数据
💡 IO/#M信号是8088区分"访问存储器"和"访问I/O端口"的关键------当IO/#M=0时操作存储器,IO/#M=1时操作I/O端口
二、📦 RAM存储器设计
1️⃣ 静态RAM(SRAM)------ 典型芯片6264
(1)芯片引脚与容量
SRAM 6264 是最常用的8K×8位SRAM芯片,容量为8KB。
| 引脚类型 | 引脚 | 说明 |
|---|---|---|
| 地址线 | A12~A0(13根) | 寻址片内8K个存储单元 |
| 数据线 | D7~D0(8根) | 传输8位数据 |
| 输出允许 | #OE |
低电平有效,允许数据输出 |
| 写允许 | #WE |
低电平有效,允许写入数据 |
| 片选信号 | #CS1(低有效)、CS2(高有效) |
两个片选必须同时有效 |
容量计算公式:
容量 = 2^地址线条数 × 数据线条数
6264容量 = 2^13 × 8 = 8192 × 8位 = 8KB
⚠️ 从芯片引脚图就能看出容量------看地址线和数据线的数量,是识别芯片容量的最直接方法
(2)存储器与系统连接的核心问题
存储器芯片与系统的连接需要解决两个层次的寻址问题:
| 寻址层次 | 功能 | 实现方式 |
|---|---|---|
| 片内寻址 | 找到芯片内部的存储单元 | CPU低位地址线→芯片地址线 |
| 片选寻址 | 确定要访问哪片芯片 | CPU高位地址线→译码电路→片选信号 |
面向程序员:内存地址 = 段基地址 + 偏移地址
面向物理芯片:内存地址 = 片选地址(高位) + 片内地址(低位)
地址范围的确定方法:
- 片首地址:高位地址确定 + 片内地址全0
- 片尾地址:高位地址确定 + 片内地址全1
- 地址范围:片首地址~片尾地址
例如某6264芯片的高位地址为1111000B,则:
- 片首地址:
1111 000 000 0000 0000 0000B= F0000H - 片尾地址:
1111 000 111 1111 1111 1111B= F1FFFH
(3)地址译码方式
地址译码电路将CPU的高位地址信号转换为片选信号,主要有两种方式:
① 全地址译码
- 定义 :使用全部高位地址信号作为译码输入
- 特点 :每个单元占据唯一的内存地址,无地址重叠
- 适用场景:存储器容量较大,需充分利用地址空间
设计步骤:
- 写出地址范围的二进制表示
- 划分高位地址(片选地址)和低位地址(片内地址)
- 根据高位地址状态设计译码电路
全地址译码例: 设计6264芯片,地址范围为F0000H~F1FFFH
片首地址 F0000H:1111 0000 0000 0000 0000B
片尾地址 F1FFFH:1111 0001 1111 1111 1111B
高位地址(A19~A13):1111000B ------ 全部参与译码
低位地址(A12~A0): 000~111 ------ 片内地址
⚠️ 读/写控制信号(#MEMR、#MEMW)必须作为译码电路的输入信号------只有当CPU真正访问存储器时,译码电路才能工作
② 部分地址译码
- 定义 :只使用部分高位地址信号作为译码输入
- 特点 :存在地址重叠,同一芯片占据多组不同的地址范围
- 优点:译码电路简单
- 缺点:浪费地址空间
- 适用场景:存储器容量较小,地址空间有富余
部分地址译码例: 只使用A19、A17~A13参与译码,不使用A18
高位地址:1 × 1 1 0 0 0B
A18=0时:1011000B → B0000H~B1FFFH
A18=1时:1111000B → F0000H~F1FFFH
同一芯片占两组地址范围!
(4)专用译码器:74LS138
当系统中有多片存储器芯片时,用基本逻辑门设计译码电路非常复杂,通常使用专用译码器74LS138(3输入8输出译码器)。
引脚功能:
| 引脚 | 类型 | 说明 |
|---|---|---|
| G1 | 使能端 | 高电平有效 |
#G2A、#G2B |
使能端 | 低电平有效 |
| C、B、A | 输入端 | 3位二进制编码输入 |
#Y0~#Y7 |
输出端 | 8个低电平有效输出 |
三个使能端必须同时有效,译码器才能工作。
真值表:
| C | B | A | 有效输出 |
|---|---|---|---|
| 0 | 0 | 0 | #Y0 |
| 0 | 0 | 1 | #Y1 |
| 0 | 1 | 0 | #Y2 |
| 0 | 1 | 1 | #Y3 |
| 1 | 0 | 0 | #Y4 |
| 1 | 0 | 1 | #Y5 |
| 1 | 1 | 0 | #Y6 |
| 1 | 1 | 1 | #Y7 |
应用例: 用4片6264构成32KB存储器,地址范围20000H~27FFFH
分析:
- 每片6264容量8KB,4片共32KB
- 高位地址(A19~A13):首地址0010000B,尾地址0010011B
- A19~A17=001固定,作为使能条件
- A14~A13=00~11变化,作为74LS138的C、B输入
- A15~A13分别连接74LS138的C、B、A输入
2️⃣ 动态RAM(DRAM)------ 典型芯片2164A
(1)DRAM的核心特点
- 存储元由电容 构成,电容会漏电,需要定时刷新
- 采用行列地址分时复用技术,地址线数量仅为同等容量SRAM的一半
(2)2164A芯片(64K×1位)
主要特点:
- 只有8根地址线,行地址和列地址分时输入
- 先送8位行地址,由
#RAS(行地址选通)信号锁存 - 再送8位列地址,由
#CAS(列地址选通)信号锁存 - 只有1位数据线,输入和输出分开
(3)2164A与系统的连接
由于每片2164A只有1位数据线,因此每8片构成一个存储体:
-
8片芯片的地址线、
#RAS、#CAS、#WE信号全部并联 -
每片的数据线分别连接到D0~D7
-
系统每次访存同时访问8片芯片,分别读出或写入一个字节的8位
系统数据总线 D7 D6 D5 D4 D3 D2 D1 D0
│ │ │ │ │ │ │ │
┌──┘ │ │ │ │ │ │ └──┐
│ ┌──┘ │ │ │ │ │ └──┐ │
│ │ ┌──┘ │ │ │ │ └──┐│ │
│ │ │ ┌──┘ │ │ │ ┌──┘│ │
2164A×8片(地址、控制信号全部并联)
⚠️ 单独一片2164A没有实际意义------每8片构成一个存储体才能存储完整的字节数据
三、💿 ROM存储器设计
ROM用于存放固定的程序和数据,正常工作时只能读出。
1️⃣ EPROM(可擦除可编程ROM)------ 典型芯片2764
2764是8K×8位 的EPROM芯片,引脚与SRAM 6264完全兼容。
| 引脚 | 说明 |
|---|---|
| A12~A0 | 13根地址线 |
| D7~D0 | 8根数据线 |
#OE |
输出允许,低电平有效 |
#CE |
片选信号,低电平有效 |
#PGM |
编程脉冲输入,低电平有效 |
三种工作方式:
| 方式 | 说明 |
|---|---|
| 数据读出 | #CE和#OE为低,#PGM为高,正常读出数据 |
| 编程写入 | 需专用编程器,加编程电压(通常12.5V),不可在线操作 |
| 擦除 | 紫外线照射透明窗口15~20分钟,所有数据变为FFH |
💡 EPROM稳定性高,常用作程序存储器 ;RAM便利性好,常用作数据存储器
2️⃣ EEPROM(电可擦除可编程ROM)------ 典型芯片98C64A
98C64A是8K×8位 的EEPROM芯片,最大的特点是可以在线进行电擦除和写入。
主要引脚:
| 引脚 | 说明 |
|---|---|
| A12~A0 | 13根地址线 |
| D7~D0 | 8根数据线 |
#OE |
输出允许 |
#WE |
写允许 |
#CE |
片选信号 |
READY/#BUSY |
状态输出端(高=空闲可写,低=正在写入) |
工作方式:
| 方式 | 说明 |
|---|---|
| 数据读出 | 与EPROM相同 |
| 字节写入 | 每次写入1字节,约1ms |
| 字节擦除 | 擦除1个字节为FFH |
| 片擦除 | 一次擦除整个芯片 |
写入控制方法:
- 定时方式:根据手册参数,每次写入后等待固定时间
- 查询方式 :检查READY/
#BUSY端,为高电平时才进行下一次写入
3️⃣ Flash存储器
Flash属于EEPROM的一种,是目前应用最广泛的非易失性存储器。
核心特点:
- 采用块擦除方式,擦除速度比普通EEPROM快得多
- 集成度高,容量大,价格低
- 通过向内部控制寄存器写入命令字来控制工作方式
- 很多新型Flash芯片内部集成了编程电压发生器,只需单一3.3V电源
工作方式:
| 操作 | 说明 |
|---|---|
| 数据读出 | 与普通SRAM相同 |
| 编程写入 | 按字节或页写入 |
| 擦除 | 支持字节擦除、块擦除和片擦除 |
| 读状态寄存器 | 判断是否可继续写入 |
| 读厂家/器件标记 | 识别芯片型号 |
应用: U盘、固态硬盘(SSD)、手机存储、嵌入式系统固件等。
四、🔌 半导体存储器扩展技术
当单片芯片的容量不能满足系统需求时,需要用多片芯片进行扩展。
1️⃣ 位扩展(扩展字长)
- 适用场景:芯片字长小于内存单元字长
- 连线方式 :所有芯片的地址线、控制线并联 ,数据线分别引出
- 效果:单元数不变,位数增加
示例: 用8片2164A(64K×1位)构成64KB存储器
- 8片地址线、
#RAS、#CAS、#WE全部并联 - 每片数据线分别连接D0~D7
- 所有芯片同时被选中 ,具有相同的地址范围
2️⃣ 字扩展(扩展单元数)
- 适用场景:芯片字长满足,但单元数不足
- 连线方式 :所有芯片的地址线、数据线、控制线并联 ,片选端分别引出
- 效果:位数不变,单元数增加
示例: 用4片6264(8K×8位)构成32KB存储器
- 低位地址A12A0、数据线D7D0、
#OE、#WE全部并联 - 高位地址通过译码电路产生4个不同的片选信号
- 4片芯片地址范围分别为:20000H21FFFH、22000H23FFFH、24000H25FFFH、26000H27FFFH
3️⃣ 字位扩展(同时扩展字长和单元数)
- 适用场景:字长和单元数都不满足
- 设计步骤 :
- 先位扩展:将若干片芯片组成满足字长要求的存储体
- 再字扩展:将若干个存储体组成满足容量的存储器
示例: 用32Kb(4K×8位)芯片构成256KB内存
- 位扩展:不需要(芯片字长已是8位)
- 字扩展:需要256KB÷32KB=8个存储体
- 用3位高位地址通过74LS138产生8个片选信号
五、⚡ 高速缓冲存储器(Cache)
1️⃣ 为什么需要Cache
CPU的运算速度越来越快,而主存的读写速度相对较慢。如果CPU每次都直接访问主存,大量的时间会浪费在等待上。
解决方案:在CPU和主存之间增加一个高速、小容量的存储器------Cache。
2️⃣ 程序局部性原理
Cache能有效工作的理论基础是程序的局部性原理:
| 类型 | 含义 | 示例 |
|---|---|---|
| 时间局部性 | 最近访问的单元可能很快被再次访问 | 循环体中的变量 |
| 空间局部性 | 被访问单元附近的单元也可能被访问 | 数组的连续遍历 |
3️⃣ Cache的工作原理
- 将Cache和主存都划分为大小相同的存储块
- CPU访问存储器时,先查Cache
- 命中(在Cache中):直接从Cache读取,速度快
- 不命中(不在Cache中):从主存读取整个块调入Cache,再读取
- Cache满时,按替换算法(如LRU)替换旧块
Cache存储系统对程序员完全透明,由硬件自动管理。
4️⃣ Cache的读写操作
读操作
| 方式 | 原理 |
|---|---|
| 贯穿读出式 | CPU请求先送Cache,命中则返回;不命中再传给主存,同时将数据送入Cache |
| 旁路读出式 | CPU同时向Cache和主存发请求,命中则中断主存访问;不命中则直接读主存 |
写操作
| 方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 写穿式 | 写操作同时写入Cache和主存 | 控制简单,数据一致性好 | 写速度慢 |
| 回写式 | 只写Cache,替换时才写回主存 | 写速度快 | 控制复杂,有数据不一致风险 |
5️⃣ 多级Cache结构
现代计算机采用多级Cache结构,兼顾速度和容量:
| 层级 | 位置 | 速度 | 容量 | 作用 |
|---|---|---|---|---|
| L1 Cache | CPU内部 | 最快 | 最小(几十KB) | 提高存取速度 |
| L2 Cache | CPU内部 | 较快 | 较大(几百KB~几MB) | 平衡速度与容量 |
| L3 Cache | CPU芯片上多核共享 | 较慢 | 最大(几MB~几十MB) | 提供存储容量 |
💡 多级Cache的核心思想:让整个存储系统的速度接近最快的L1 ,容量接近最大的主存
六、🤔 几个思考题
学完本文,来试试回答这些问题:
1️⃣ SRAM和DRAM的核心区别是什么?各自适用于什么场景?
答: SRAM的存储元由双稳态触发器构成,不需要刷新,速度快但集成度低、价格高,适用于Cache 。DRAM的存储元由电容构成,需要定时刷新,集成度高、价格低但速度较慢,适用于主内存。
2️⃣ 全地址译码和部分地址译码各有什么优缺点?
答: 全地址译码使用全部高位地址参与译码,每个存储单元有唯一地址,无地址重叠,但译码电路较复杂。部分地址译码只使用部分高位地址,译码电路简单,但存在地址重叠,浪费地址空间。系统设计时应根据实际需求选择。
3️⃣ 为什么2164A需要每8片构成一个存储体?
答: 因为2164A是64K×1位的芯片,每片只有1根数据线,只能存1位数据。一个字节有8位,需要8片芯片各自提供1位数据,通过数据总线D0~D7组合成完整的字节。这8片芯片必须具有完全相同的地址,同时被选中。
4️⃣ 位扩展和字扩展在连线方式上有什么不同?
答: 位扩展时,所有芯片的地址线和控制线并联,数据线分别引出,确保所有芯片具有相同的地址范围 ,同时被选中。字扩展时,所有芯片的地址线、数据线、控制线并联,片选端分别引出,通过译码电路使每个芯片有不同的地址范围。
5️⃣ Cache的写穿式和回写式各有什么优缺点?
答: 写穿式每次写操作同时更新Cache和主存,数据一致性好、控制简单,但写操作速度慢。回写式只写Cache,替换时才写回主存,写速度快,但控制复杂,存在Cache与主存数据不一致的风险。
📚 学习总结与建议
重点掌握内容
- 半导体存储器分类:SRAM与DRAM的区别、各种ROM的特点及应用
- 地址译码设计:全地址译码和部分地址译码的原理、74LS138的使用
- 存储器扩展:位扩展、字扩展、字位扩展的原理及连线方法
- Cache基本概念:局部性原理、命中/不命中、读写策略
学习建议
- 结合硬件实验:用面包板搭建简单的存储器系统,观察地址译码和数据读写过程
- 多做设计练习:存储器扩展和译码电路设计是考试和实际应用的重点
- 理解地址映射:内存地址如何映射到具体芯片和存储单元,是理解存储器系统的关键
- 联系实际应用:了解DDR内存、SSD、CPU缓存等现代存储技术,将理论与实际结合
✅ 本节完
📝 作者:say-fall | 编辑:say-fall | 🌟 原创不易,如果对你有帮助,记得 👍 点赞 + ⭐ 收藏 哦!