第12章 存储器及其接口
课程:1A003 计算机组织与系统结构(第二部分) 主讲:北京大学课程 教材:80x86/Pentium 体系结构 状态:OLE文档TextCharsAtom记录提取(文本型PPT,提取约2万字符有效文本,插图和表格需对照原图)
一、本章概述
本章是计算机组成原理的核心章节,系统讲解存储器的工作原理与接口技术,主要包含三大部分:
- 半导体存储器及其典型芯片 — RAM(SRAM/DRAM)和 ROM(MROM/PROM/EPROM/EEPROM/Flash)的工作原理与典型芯片
- 存储器接口技术 — 存储器与CPU的连接、片选控制、存储器扩展、16/32/64位存储器接口
- 高速缓存(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 存储器的性能指标
最重要的两个性能指标:
- 存储容量:存储器可容纳的二进制信息总量(位容量)
- 地址线 p 位,数据线 q 位 → 单元总数 = 2^p,位容量 = 2^p × q
- 存取速度:
- 存取时间(Access Time):从CPU发出有效地址到读写操作完成的时间
- 存储周期(Memory Cycle):连续启动两次独立操作所需的最小时间间隔
- 存储周期略大于存取时间(需恢复时间),CPU连续访问必须间隔≥存储周期
其他指标:可靠性、性能价格比、功耗等。
2.3 存储系统的层次结构
单一类型存储器无法同时满足”容量大、速度快、价格低”三方面要求。
四级存储层次(从快到慢、从小到大): CPU寄存器 → 高速缓存(Cache)→ 主存 → 外存
也可看成两个二级系统:
- 高速缓存—主存:目的是提高CPU访问存储器的速度
- 主存—外存:目的是弥补主存容量的不足(虚拟存储器的基础)
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 对比:
| 特性 | SRAM | DRAM |
|---|---|---|
| 基本单元 | 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的界限在闪存上已不明显
闪存主要特点:
- 可按字节、区块、页面或整片擦除和编程,页面访问速度几十~200ns
- 片内有命令寄存器和状态寄存器,具有内部编程控制逻辑
- 多种工作方式:整片擦除、按页擦除、分页编程、字节编程、读识别码等
- 可在线擦除与编程,无需取下芯片
- 部分产品可自行产生编程电压(VPP),单VCC供电即可编程
- 很高的信息存储密度
闪存单元结构:浮空栅保存电荷 → 源漏之间形成导电沟道 → 定义为”0”;无电荷 → 无沟道 → 定义为”1”。
典型芯片:28F系列(28F256等)。
四、存储器接口技术
4.1 存储器与CPU连接时应考虑的问题
- CPU总线的负载能力:CPU驱动能力有限,需加驱动器/接收器
- CPU时序与存储器存取速度的配合:速度不匹配时插入等待状态
- 存储器的地址分配和片选:地址空间划分与芯片选择
- 控制信号的连接:读/写、片选等控制信号的连接方式
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系统的基本组成
三个组成部分:
- Cache模块(SRAM):高速小容量
- 主存(DRAM):较大容量
- 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行之一)
命中条件:
- 标记与地址A31~A15相等
- 标记有效位 = 1
- 相应行有效位 = 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
- 全局性大清除,系统开销大
六、关键概念与易混点
- 存取时间 vs 存储周期:存取时间是一次操作的耗时,存储周期是两次操作的最小间隔(含恢复时间)
- SRAM vs DRAM:SRAM=触发器存储、快、贵、不需刷新;DRAM=电容存储、慢、便宜、需刷新
- EPROM vs EEPROM vs Flash:EPROM=紫外线擦除整片;EEPROM=电擦除按字节;Flash=电擦除按块,高密度
- 全译码 vs 部分译码 vs 线选:全译码唯一地址/电路复杂;线选最简单/地址重叠最严重
- 位扩展 vs 字扩展:位扩展增加数据线宽度(并地址、并片选、串数据);字扩展增加存储单元数(并地址、并数据、分接片选)
- 直接映像 vs 组相联:直接映像简单但冲突率高;组相联命中率高但控制器复杂
- 直写 vs 回写:直写简单但慢;回写效率高但复杂(需脏位)
- 小尾 vs 大尾:Intel x86用小尾(低地址存低字节),Motorola 68K用大尾(低地址存高字节)