第12章 存储器及其接口

课程:1A003 计算机组织与系统结构(第二部分) 主讲:北京大学课程 教材:80x86/Pentium 体系结构 状态:OLE文档TextCharsAtom记录提取(文本型PPT,提取约2万字符有效文本,插图和表格需对照原图)

一、本章概述

本章是计算机组成原理的核心章节,系统讲解存储器的工作原理与接口技术,主要包含三大部分:

  1. 半导体存储器及其典型芯片 — RAM(SRAM/DRAM)和 ROM(MROM/PROM/EPROM/EEPROM/Flash)的工作原理与典型芯片
  2. 存储器接口技术 — 存储器与CPU的连接、片选控制、存储器扩展、16/32/64位存储器接口
  3. 高速缓存(Cache)技术 — Cache基本原理、组织方式(直接映像/组相联)、82385 Cache控制器、数据一致性

二、存储器概述

2.1 存储器的分类

半导体存储器从工作特点及功能角度,可分为两大类:

  • 读写存储器 RAM(Random Access Memory):可读可写,断电丢失
    • 静态 RAM(SRAM):速度快、无需刷新、集成度低、价格高
    • 动态 RAM(DRAM):集成度高、价格低、需要刷新、速度较慢
  • 只读存储器 ROM(Read Only Memory):断电不丢失
    • 掩膜 ROM(MROM):工厂固化,不可改写
    • 可编程 ROM(PROM):用户一次性编程
    • 可擦除可编程 ROM(EPROM):紫外线擦除,可多次编程
    • 电可擦除可编程 ROM(EEPROM/E²PROM):电擦除,按字节修改
    • 闪存(Flash Memory):块擦除,高密度,兼有RAM和ROM特点

2.2 存储器的性能指标

最重要的两个性能指标:

  1. 存储容量:存储器可容纳的二进制信息总量(位容量)
    • 地址线 p 位,数据线 q 位 → 单元总数 = 2^p,位容量 = 2^p × q
  2. 存取速度:
    • 存取时间(Access Time):从CPU发出有效地址到读写操作完成的时间
    • 存储周期(Memory Cycle):连续启动两次独立操作所需的最小时间间隔
    • 存储周期略大于存取时间(需恢复时间),CPU连续访问必须间隔≥存储周期

其他指标:可靠性、性能价格比、功耗等。

2.3 存储系统的层次结构

单一类型存储器无法同时满足”容量大、速度快、价格低”三方面要求。

四级存储层次(从快到慢、从小到大): CPU寄存器 → 高速缓存(Cache)→ 主存 → 外存

也可看成两个二级系统:

  1. 高速缓存—主存:目的是提高CPU访问存储器的速度
  2. 主存—外存:目的是弥补主存容量的不足(虚拟存储器的基础)

2.4 内存储器的基本结构及数据组织

内存储器基本结构:通过地址总线、数据总线、控制总线与CPU连接。

存储字与字长:

  • 存储字(Storage Word):作为一个整体一次读出/写入的数据
  • 字长:8位机=1字节,16位机=16位,32位机=32位

多字节存储字的存放格式:

  • 小尾格式(Little Endian):Intel 80x86 采用
    • 多字节存储字的地址 = 最低端字节单元的地址
    • 最低地址单元存放最低字节(如11223344H:10000H=44H, 10001H=33H, 10002H=22H, 10003H=11H)
  • 大尾格式(Big Endian):Motorola 680x0 采用
    • 最低地址单元存放最高字节

三、半导体存储器及其典型芯片

3.1 静态 RAM(SRAM)

基本存储单元:由6个MOS管组成(六管静态RAM),依靠双稳态触发器存储信息。

  • 优点:不需要刷新,存取速度快
  • 缺点:MOS管多、集成度不高、功耗大、价格贵
  • 用途:高速缓存(Cache)

典型芯片举例:

  • 6116:2K×8位高速CMOS SRAM,16384个基本存储单元
  • 6264(8K×8)、62256(32K×8)、628128(128K×8)

存储矩阵与存储模块:

  • 用4K×1位的2141芯片可构造16K×8位存储矩阵(位扩展+字扩展)
  • 大容量存储器采用模块式结构:模块选择 → 组选择 → 片内地址
  • 例:64K×8位静态RAM模块,20位地址分为三段
    • 高4位(A19~A16):模块选择
    • 中2位(A15~A14):组选择
    • 低14位(A13~A0):片内地址

例12.1:某内存系统由32K×1位SRAM芯片构成,总容量1M字节,模块结构,每个模块128K字节,每个模块分4组。 解:所需芯片数 = 1M×8 / 32K×1 = 256片 地址分配(20位A19~A0):模块选择(高3位)+ 组选择(2位)+ 片内地址(低15位)

3.2 动态 RAM(DRAM)

基本存储单元:单管动态RAM(1个MOS管 + 1个小电容),依靠电容存储电荷表示信息。

刷新(Refresh):

  • 电容漏电导致信息丢失,必须定期刷新
  • 刷新是逐行进行的,需增加刷新支持电路
  • 刷新期间CPU不能访问内存,损失部分有效访问时间

SRAM vs DRAM 对比:

特性SRAMDRAM
基本单元6管1管+电容
存取速度快(~25ns)慢(~100ns)
集成度低高
功耗大小
刷新不需要需要
价格贵便宜
用途Cache主存

DRAM芯片引脚特点:

  • 地址线分时复用(行地址/列地址),减少引脚数目
  • 控制信号:RAS(行地址选通)、CAS(列地址选通)、W(读/写控制)
  • 典型芯片:Motorola MCM 511000A(1M×1位,20引脚,10条复用地址线)

3.3 只读存储器 ROM

(1) 掩膜式 ROM(Masked ROM):生产时通过掩膜工艺固化,用户不可改写。

(2) 可编程 ROM(PROM):用户可一次性编程,写入后不可更改。

(3) EPROM(可擦除可编程ROM):

  • 基本存储单元:P沟浮栅MOS管
  • 擦除方式:紫外线照射(2537Å波长,照射20~30分钟),整片擦除
  • 擦除后全部单元为FFH
  • 缺点:必须从板上拔下,用紫外线光源擦除后重写

(4) EEPROM(电可擦除可编程ROM,E²PROM):

  • 结构:漏极增加隧道二极管,通过电场使电荷流向/流出浮栅
  • 擦除方式:电擦除,可按字节分别进行
  • 编程和擦除只需10ms,可在线进行
  • 用途:嵌入式系统中保存少量需偶尔修改的数据

(5) 闪存(Flash Memory):

  • 从基本原理看属于ROM型,从功能看又相当于RAM
  • ROM与RAM的界限在闪存上已不明显

闪存主要特点:

  1. 可按字节、区块、页面或整片擦除和编程,页面访问速度几十~200ns
  2. 片内有命令寄存器和状态寄存器,具有内部编程控制逻辑
  3. 多种工作方式:整片擦除、按页擦除、分页编程、字节编程、读识别码等
  4. 可在线擦除与编程,无需取下芯片
  5. 部分产品可自行产生编程电压(VPP),单VCC供电即可编程
  6. 很高的信息存储密度

闪存单元结构:浮空栅保存电荷 → 源漏之间形成导电沟道 → 定义为”0”;无电荷 → 无沟道 → 定义为”1”。

典型芯片:28F系列(28F256等)。


四、存储器接口技术

4.1 存储器与CPU连接时应考虑的问题

  1. CPU总线的负载能力:CPU驱动能力有限,需加驱动器/接收器
  2. CPU时序与存储器存取速度的配合:速度不匹配时插入等待状态
  3. 存储器的地址分配和片选:地址空间划分与芯片选择
  4. 控制信号的连接:读/写、片选等控制信号的连接方式

4.2 存储器接口中的片选控制

地址译码器:74LS138(3-8译码器)是常用译码器电路。

三种片选控制方式:

(1) 全译码方式

  • 方法:所有高位地址全部用于译码,译码输出作为片选信号
  • 优点:每个存储单元有唯一确定的地址,无地址重叠
  • 缺点:译码电路较复杂
  • 适用:需要完整地址空间或预留扩展空间的系统

(2) 部分译码方式

  • 方法:只选用部分高位地址进行译码
  • 优点:译码电路简单
  • 缺点:存在地址重叠(一个单元对应多个地址)
  • 适用:对地址空间要求不严格的小系统

(3) 线选方式

  • 方法:直接用某根高位地址线作为片选信号
  • 优点:最简单,不需要译码器
  • 缺点:地址空间不连续,地址重叠严重
  • 适用:非常简单的小系统

4.3 存储器扩展

(1) 位扩展法

  • 适用:芯片字长(数据位数)不足
  • 方法:多个芯片的地址线、片选线、读/写线分别并联,数据线各自独立
  • 例:用2片1K×4位芯片 → 1K×8位

(2) 字扩展法

  • 适用:存储单元数量(字数)不足
  • 方法:地址线、数据线、读/写线并联,片选线由译码器分别选通
  • 例:用2片1K×8位芯片 → 2K×8位

(3) 字位扩展法

  • 适用:字数和位数都不足
  • 方法:先位扩展组成”组”,再字扩展组成完整存储器
  • 例:用8片1K×4位芯片 → 2K×8位(2组,每组4片位扩展)

4.4 存储器接口分析与设计举例

例12.3:用EPROM 2732(4K×8)、SRAM 6116(2K×8)及74LS138设计

  • ROM:16KB,地址范围 F8000H~FBFFFH(4片2732)
  • RAM:8KB,地址范围 FC000H~FDFFFH(4片6116)
  • 系统:20位地址总线(A0~A19),8位数据总线

地址分配:

  • 2732(4K×8):片内地址 A0~A11(12位),片外地址 A12~A19(8位)
  • 6116(2K×8):片内地址 A0~A10(11位),片外地址 A11~A19(9位)
  • 用74LS138作片选译码器,依地址范围确定输入输出接法

4.5 16位/32位/64位存储器接口

16位存储器接口(如8086/80186/80286)

  • 存储器由两个8位存储体构成:偶地址存储体(偶体)+ 奇地址存储体(奇体)
  • 偶体数据线接D0~D7,奇体数据线接D8~D15
  • 支持8位(字节)和16位(字)操作
  • 1MB地址空间(2

32位存储器接口(如80386/80486)

  • 由4个8位存储体(BANK0~BANK3)构成
  • 选体信号 BE0~BE3(字节允许信号),由最低两位地址A0A1在CPU内部译码产生
  • 其余30位地址(A2~A31)作为公共地址
  • 支持8位/16位/32位操作

64位存储器接口(如Pentium)

  • 由8个8位存储体(BANK0~BANK7)构成
  • 选体信号 BE0~BE7,由最低三位地址A0A1A2译码产生
  • 其余29位地址(A3~A31)作为公共地址
  • 支持8位/16位/32位/64位操作

五、高速缓存(Cache)技术

5.1 程序访问的局部性(Locality of Reference)

在较短时间间隔内,程序产生的地址往往集中在存储器逻辑地址空间的很小范围内:

  • 指令地址分布连续,循环和子程序重复执行 → 时间上集中
  • 数组存储和访问、工作单元选择 → 数据地址相对集中

程序访问的局部性是Cache技术的基本依据。

5.2 为什么需要Cache

解决CPU与主存之间的速度匹配问题:

  • CPU速度发展快于主存:CPU机器周期几十ns,DRAM存取周期几百ns
  • SRAM速度快(~25ns)但价格贵,DRAM便宜但速度慢
  • Cache用SRAM和DRAM构成组合存储系统,兼有SRAM的速度和DRAM的价格

历史演变:

  • 80386系统:Cache在CPU片外
  • 80486及Pentium:采用CPU片内Cache技术

5.3 Cache系统的基本组成

三个组成部分:

  1. Cache模块(SRAM):高速小容量
  2. 主存(DRAM):较大容量
  3. Cache控制器:管理Cache与主存之间的映象和数据流动

命中(Hit):要访问的数据在Cache中,CPU快速完成访问 未命中(Miss):数据不在Cache中,CPU从主存提取,同时复制到Cache

命中率(Hit Rate):与Cache容量、控制算法、组织方式、程序特性都有关。

  • 组织良好的80386系统Cache命中率可达95%
  • IBM 360系统可达99%

5.4 Cache的组织方式

主存以**区块(行/Line)**为单位映像到Cache,32位微机通常区块长度为4字节(1个双字)。

(1) 直接映像(Direct Mapped)

  • Cache为单一存储体
  • 主存看成一系列页,每页大小等于Cache容量
  • 主存所有页的相同偏移量单元 → 映像到Cache的同一个单元
  • 优点:结构简单
  • 缺点:命中率较低(冲突概率高)

(2) 两路组相联(Two-way Set Associative)

  • Cache分为两路(BANK A + BANK B),每路容量为直接映像的一半
  • 主存每页特定偏移量单元 → 可映像到A路或B路的对应单元
  • 优点:命中率较高
  • 缺点:Cache控制器较复杂

5.5 82385 Cache控制器

为80386系统设计,132引脚,管理32KB外部Cache与4GB主存之间的映象。 通过片内Cache目录(SRAM构成)实现映象管理。 支持两种方式选择(通过引脚配置)。

(A) 直接映像方式下的82385

  • 主存:4GB ÷ 32KB/页 = 128K页(2
  • Cache:32KB,分为1024组(set),每组8行(8个双字)
  • 目录项(1024个,每个26位):
    • 17位标记(TAG)= 页号
    • 1位标记有效位
    • 8位行有效位(每行1位)

地址划分(80386的32位地址A31~A2):

  • 高17位(A31~A15):标记(页号)
  • 中10位(A14~A5):组地址(选择1024个目录项之一)
  • 低3位(A4~A2):行地址(选择组内8行之一)

命中条件:

  1. 标记与地址A31~A15相等
  2. 标记有效位 = 1
  3. 相应行有效位 = 1

未命中处理:

  • 行未命中(标记命中但行有效位为0):只需置行有效位为1
  • 标记未命中:写入新标记 → 置标记有效位 → 置对应行有效位 → 清其他7个行有效位

(B) 两路组相联方式下的82385

  • Cache:32KB,分A/B两路,每路16KB,每路512组
  • 主存:4GB ÷ 16KB/页 = 256K页,页号18位
  • 目录项:512×2个,每个27位(18位标记 + 1位标记有效位 + 8位行有效位)
  • LRU位:每对目录项配1位”最近最少使用”位,用于未命中时替换决策

地址划分:

  • 高18位(A31~A14):标记
  • 中9位(A13~A5):组地址
  • 低3位(A4~A2):行地址

工作过程:

  • 读操作:同时比较两路目录项,命中则从对应路读取数据,更新LRU位
  • 写操作:命中则同时更新Cache和主存(取决于写策略),更新LRU位
  • 未命中:根据LRU位选择替换哪一路

5.6 Cache的数据更新方法(一致性问题)

问题一:Cache更新但主存未更新(写入时数据丢失)

三种解决办法:

(1) 直写式(Write Through)

  • 每次写入Cache时,立即同时写入主存
  • 优点:简单,主存随时保持最新
  • 缺点:每次写入都有主存操作,总线活动频繁,速度慢

(2) 缓冲直写式(Buffered Write Through)

  • 在Cache和主存之间加写缓冲器
  • 写入Cache的同时,数据存入缓冲器,CPU继续下一个操作
  • 缓冲器在CPU执行下一个操作时写入主存
  • 缺点:缓冲器只能保持一次写入,连续两次写操作CPU仍需等待

(3) 回写式(Write Back)

  • 每个区块标记中设一个”更新位”(脏位)
  • 写入Cache时置更新位为1,不立即写主存
  • 当该区块被替换时(更新位为1),才先写回主存
  • 优点:真正写入主存的次数可能少于写入次数,效率高
  • 缺点:Cache控制器较复杂

问题二:主存被其他部件更新但Cache未更新(数据过时)

常见于DMA系统和多处理器系统(多个Cache共享主存)。

四种解决办法:

(1) 总线监视法(Bus Snooping)

  • Cache控制器随时监视地址总线
  • 其他部件写入主存时,若地址对应Cache中的区块,则将该Cache区块标为无效
  • 82385采用此方式

(2) 硬件监视法(Hardware Snooping / 广播式)

  • 每个部件有各自的Cache
  • 一个Cache写操作时,新数据既拷贝到主存,也广播到其他Cache
  • 所有Cache通过同一Cache访问主存也是一种实现方式

(3) 不可高速缓存存储区法

  • 主存中划出共享区,该区域内容永远不进入Cache
  • CPU对共享区的访问直接访问主存
  • 避免了一个区块映象到多个Cache的问题

(4) Cache清除法

  • 将Cache中所有更新数据写回主存,同时清除全部Cache
  • 全局性大清除,系统开销大

六、关键概念与易混点

  1. 存取时间 vs 存储周期:存取时间是一次操作的耗时,存储周期是两次操作的最小间隔(含恢复时间)
  2. SRAM vs DRAM:SRAM=触发器存储、快、贵、不需刷新;DRAM=电容存储、慢、便宜、需刷新
  3. EPROM vs EEPROM vs Flash:EPROM=紫外线擦除整片;EEPROM=电擦除按字节;Flash=电擦除按块,高密度
  4. 全译码 vs 部分译码 vs 线选:全译码唯一地址/电路复杂;线选最简单/地址重叠最严重
  5. 位扩展 vs 字扩展:位扩展增加数据线宽度(并地址、并片选、串数据);字扩展增加存储单元数(并地址、并数据、分接片选)
  6. 直接映像 vs 组相联:直接映像简单但冲突率高;组相联命中率高但控制器复杂
  7. 直写 vs 回写:直写简单但慢;回写效率高但复杂(需脏位)
  8. 小尾 vs 大尾:Intel x86用小尾(低地址存低字节),Motorola 68K用大尾(低地址存高字节)

七、相关链接