半导体存储器_从分类到Cache完全指南


🌈 say-fall:个人主页 🚀 专栏:《手把手教你学会C++》 | 《系统深入Linux操作系统》 | 《数据结构与算法》 | 《小游戏与项目》 💪 格言:做好你自己,才能吸引更多的人,与他们共赢,这才是最好的成长方式。


📝 前言

提到计算机的"记忆",你可能会想到硬盘、U盘、内存条......但你知道它们之间有什么本质区别吗?为什么电脑一断电,正在写的东西就没了?为什么打开一个程序要等几秒,但切换到刚才看过的网页却几乎是瞬间?

这些问题的答案都指向同一个核心------半导体存储器。它是连接CPU和软件的桥梁,理解它的工作原理对于理解整个计算机系统至关重要。

本文将从零开始,系统讲解半导体存储器的分类与特性、RAM和ROM的芯片设计与接口、存储器扩展技术、高速缓存Cache等核心知识。无论你是在备考微机原理,还是想深入理解计算机底层架构,这篇文章都能帮你建立一个完整的知识框架。

通过本文,你将掌握:

技能 应用场景
半导体存储器的分类与特点 区分SRAM/DRAM/EPROM/EEPROM/Flash
RAM芯片与系统的连接方法 设计存储器接口电路
地址译码电路设计(全译码/部分译码) 将存储器芯片映射到指定地址范围
存储器扩展技术(位扩展/字扩展/字位扩展) 用多片芯片构成所需容量的存储器
Cache的基本原理与读写策略 理解CPU高速缓存的工作机制

📌 前置知识: 了解二进制/十六进制的基本概念,知道8086系统的地址总线(A19~A0,20根,可寻址1MB)和数据总线结构。


文章目录

    • [📝 前言](#📝 前言)
    • [一、🔧 半导体存储器分类及基本概念](#一、🔧 半导体存储器分类及基本概念)
    • [二、📦 RAM存储器设计](#二、📦 RAM存储器设计)
    • [三、💿 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️⃣ 为什么需要Cache](#1️⃣ 为什么需要Cache)
      • [2️⃣ 程序局部性原理](#2️⃣ 程序局部性原理)
      • [3️⃣ Cache的工作原理](#3️⃣ Cache的工作原理)
      • [4️⃣ Cache的读写操作](#4️⃣ Cache的读写操作)
      • [5️⃣ 多级Cache结构](#5️⃣ 多级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的高位地址信号转换为片选信号,主要有两种方式:

① 全地址译码
  • 定义 :使用全部高位地址信号作为译码输入
  • 特点 :每个单元占据唯一的内存地址,无地址重叠
  • 适用场景:存储器容量较大,需充分利用地址空间

设计步骤:

  1. 写出地址范围的二进制表示
  2. 划分高位地址(片选地址)和低位地址(片内地址)
  3. 根据高位地址状态设计译码电路

全地址译码例: 设计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️⃣ 字位扩展(同时扩展字长和单元数)

  • 适用场景:字长和单元数都不满足
  • 设计步骤
    1. 位扩展:将若干片芯片组成满足字长要求的存储体
    2. 字扩展:将若干个存储体组成满足容量的存储器

示例: 用32Kb(4K×8位)芯片构成256KB内存

  1. 位扩展:不需要(芯片字长已是8位)
  2. 字扩展:需要256KB÷32KB=8个存储体
  3. 用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与主存数据不一致的风险。

📚 学习总结与建议

重点掌握内容

  1. 半导体存储器分类:SRAM与DRAM的区别、各种ROM的特点及应用
  2. 地址译码设计:全地址译码和部分地址译码的原理、74LS138的使用
  3. 存储器扩展:位扩展、字扩展、字位扩展的原理及连线方法
  4. Cache基本概念:局部性原理、命中/不命中、读写策略

学习建议

  • 结合硬件实验:用面包板搭建简单的存储器系统,观察地址译码和数据读写过程
  • 多做设计练习:存储器扩展和译码电路设计是考试和实际应用的重点
  • 理解地址映射:内存地址如何映射到具体芯片和存储单元,是理解存储器系统的关键
  • 联系实际应用:了解DDR内存、SSD、CPU缓存等现代存储技术,将理论与实际结合

✅ 本节完

📝 作者:say-fall | 编辑:say-fall | 🌟 原创不易,如果对你有帮助,记得 👍 点赞 + ⭐ 收藏 哦!

相关推荐
是星辰吖~1 天前
x86反汇编_深度学习_单链表
汇编
是星辰吖~1 天前
x86反汇编_深度学习_链表OJ题反汇编
汇编
乾复道2 天前
k8s使用说明
汇编·程序人生
技术不好的崎鸣同学2 天前
x64汇编之堆栈工作原理理论篇(继上篇内容讲解)
汇编
是星辰吖~2 天前
X86汇编:复杂逻辑判断_针对性扫盲
汇编
技术不好的崎鸣同学2 天前
x64汇编之用调试器进行程序分析:GDB
汇编
是星辰吖~2 天前
X86反汇编_深度学习:从 C 指针到汇编逻辑
汇编
iCxhust3 天前
C# 命令行指令 查看二进制文件
开发语言·单片机·嵌入式硬件·c#·proteus·微机原理·8088单板机
iCxhust3 天前
c#多串口重量采集上位机程序
开发语言·汇编·c#·微机原理·8088单板机