Appearance
408
计算机组成原理
CO-03-05 多模块存储器(高位交叉/低位交叉)
一、定位信息
| 项目 | 内容 |
|---|---|
| 所属圈层 | 核心层 |
| 前置知识回顾 | 需了解主存由存储芯片组成,了解存储器的存取周期(包括访问时间和存取周期两个概念),了解地址线的作用 |
| 知识网络定位 | 本单元是主存设计(CO-03-04)的延伸——在主存容量满足要求后,进一步提升主存带宽。多模块存储器是理解"为什么低位交叉比高位交叉快"的关键,也是Cache设计的背景知识 |
| 考点热度等级 | H级 — 高位交叉与低位交叉的区别及带宽计算是高频考点,近5年出现≥3次,常以选择题或计算题形式出现 |
二、知识点讲解
2.1 为什么需要多模块存储器
单体单字存储器在一个存取周期内只能访问一个存储单元,数据传输率(带宽)受限于单个模块的存取速度。当CPU需要连续读取大量数据(如顺序执行指令、读取数组)时,单模块存储器成为瓶颈。
解决方案:使用多个独立的存储模块,通过并行或交叉访问来提高带宽。
2.2 基本概念
- 存取周期 :连续两次访问存储器之间的最小时间间隔(包括访问时间和恢复时间), 访问时间
- 访问时间 :从发出读命令到数据稳定输出的时间
- 存储器带宽:单位时间内存储器能传输的数据量
单模块带宽:( 为每个存储单元的位数)
2.3 高位交叉编址
编址方式:将地址的高位用于选择模块号,低位用于模块内地址。
例如:4个模块,地址共16位。高2位(A15A14)选择模块,低14位(A13~A0)为模块内地址。
| 模块号 | 地址范围 | 特征 |
|---|---|---|
| 模块0 | 0000H~3FFFH | A15A14=00 |
| 模块1 | 4000H~7FFFH | A15A14=01 |
| 模块2 | 8000H~BFFFH | A15A14=10 |
| 模块3 | C000H~FFFFH | A15A14=11 |
特点:
- 连续地址(如程序顺序执行)集中在同一个模块内
- 当CPU顺序访问时,仍然会遇到同一个模块的存取周期冲突,无法并行
- 各模块是独立的存储体,主要用于扩大容量,不能有效提高带宽
2.4 低位交叉编址
编址方式:将地址的低位用于选择模块号,高位用于模块内地址。
例如:4个模块,地址共16位。低2位(A1A0)选择模块,高14位(A15~A2)为模块内地址。
| 模块号 | 地址特征 | 连续地址举例 |
|---|---|---|
| 模块0 | A1A0=00 | 0, 4, 8, 12, ... |
| 模块1 | A1A0=01 | 1, 5, 9, 13, ... |
| 模块2 | A1A0=10 | 2, 6, 10, 14, ... |
| 模块3 | A1A0=11 | 3, 7, 11, 15, ... |
特点:
- 连续地址分散在不同模块中
- 当CPU顺序访问时,连续的请求被分配到不同的模块,各模块可以流水线式并行工作
- 可以显著提高带宽
2.5 低位交叉的流水线工作原理
设有 个模块,每个模块的存取周期为 ,启动间隔为 。
当CPU连续读取时:
- 时刻0:启动模块0读地址0
- 时刻 :启动模块1读地址1(此时模块0还在读取中)
- 时刻 :启动模块2读地址2
- ...
- 时刻 :模块0完成地址0的读取,可以启动下一轮
这样每个存取周期内可以读出 个字,带宽提高为单模块的 倍。
低位交叉存储器的带宽:
其中 为模块数, 为每模块字长, 为存取周期。
2.6 高位交叉 vs 低位交叉的本质区别
| 对比项 | 高位交叉 | 低位交叉 |
|---|---|---|
| 模块号取自 | 高位地址 | 低位地址 |
| 连续地址分布 | 集中在同一模块 | 分散在不同模块 |
| 能否并行访问 | 不能(地址冲突) | 能(流水线并行) |
| 主要作用 | 扩大容量 | 提高带宽 |
| 与字扩展的关系 | 本质就是字扩展 | 特殊的交叉编址 |
三、记忆与理解辅助
3.1 口诀记忆
口诀:"高位集中低位散,低位并行高位慢"
- 高位交叉:连续地址集中在一个模块
- 低位交叉:连续地址分散到不同模块,可以并行访问
3.2 直观类比
低位交叉就像超市多收银台:4个收银台同时工作,每个收银台处理间隔为4的顾客(第1个台处理1号、5号、9号...),顾客流通速度是单收银台的4倍。
高位交叉就像超市只有一个收银台开了,其他三个闲置:虽然有4个收银台,但顾客按顺序排队全走同一个台。
3.3 对比表:高位交叉 vs 低位交叉
| 对比项 | 高位交叉 | 低位交叉 |
|---|---|---|
| 模块选择依据 | 地址高位 | 地址低位 |
| 连续地址所在模块 | 同一模块 | 不同模块 |
| 顺序访问的带宽 | 单模块带宽 | 倍单模块带宽 |
| 主要用途 | 扩大主存容量 | 提高主存带宽 |
| 模块间地址关系 | 每个模块占一大块连续地址 | 各模块地址交织 |
3.4 带宽计算公式汇总
- 单模块带宽:
- 模块低位交叉带宽:
- 加速比:(理想情况,连续顺序访问)
四、例题与精解
例题1(基础)
题目:某计算机主存采用低位交叉编址的4模块存储器,每个模块的存取周期为200ns,字长为32位。问: (1)该存储器的最大带宽是多少? (2)若采用高位交叉编址,带宽又是多少?
命题意图:考查低位交叉和高位交叉的带宽计算。
审题分析:4模块,, 位。
解题思路:低位交叉带宽 = 单模块带宽,高位交叉带宽 = 单模块带宽。
完整步骤:
(1)低位交叉带宽:
(2)高位交叉带宽:
高位交叉不能并行,带宽等于单模块:
低位交叉的带宽是高位交叉的4倍。
方法反思:注意区分bit/s和B/s(1B=8bit)。低位交叉的理想加速比等于模块数 ,但实际中由于地址映射不完全连续等原因,实际加速比略低于 。
例题2(中等)
题目:某系统有8个存储模块,采用低位交叉编址,每个模块的存取周期为100ns。CPU连续发出以下地址序列的读请求:地址0、地址1、地址2、地址3、地址4、地址5、地址6、地址7、地址8。 (1)地址3属于哪个模块? (2)从发出地址0的请求到地址7的数据全部就绪,至少需要多少时间? (3)地址8的数据何时就绪?
命题意图:考查低位交叉的地址映射和时序计算。
审题分析:8模块低位交叉,。低位3位选择模块()。
解题思路:模块号 = 地址 mod 8;时序分析用流水线方式。
完整步骤:
(1)地址3的模块号:
地址3属于模块3。
(2)地址0~7的就绪时间:
采用流水线方式,每隔 启动一个请求:
| 时刻(ns) | 启动请求 | 目标模块 | 就绪时刻(ns) |
|---|---|---|---|
| 0 | 地址0 | 模块0 | 100 |
| 12.5 | 地址1 | 模块1 | 112.5 |
| 25 | 地址2 | 模块2 | 125 |
| 37.5 | 地址3 | 模块3 | 137.5 |
| 50 | 地址4 | 模块4 | 150 |
| 62.5 | 地址5 | 模块5 | 162.5 |
| 75 | 地址6 | 模块6 | 175 |
| 87.5 | 地址7 | 模块7 | 187.5 |
地址7的数据在 187.5ns 就绪。
(3)地址8的就绪时间:
地址8的模块号 = ,属于模块0。
模块0在时刻100ns完成地址0的读取后,需要恢复到下一个存取周期开始。模块0最早可在时刻 时被再次启动(因为一个存取周期结束后才能开始下一次访问)。
地址8的启动时刻 =
地址8的就绪时刻 =
方法反思:
- 低位交叉的地址映射:模块号 = 地址 mod 模块数。
- 流水线启动间隔 = 。
- 关键约束:同一模块的两次访问间隔不能小于 (模块的存取周期限制)。如果流水线启动间隔太小,同一模块可能还没完成上一次访问。
五、考情分析
| 项目 | 内容 |
|---|---|
| 近5年考查频次 | ≥3次 |
| 常见题型 | 选择题(高低位交叉区别)、计算题(带宽计算、地址映射) |
| 分值占比 | 选择题2分,计算题3–5分 |
| 命题趋势 | 高低位交叉对比是经典选择题。近年趋势是将带宽计算与存取周期参数结合,出需要计算的综合题 |
六、易错点提醒
易错点1
- 错误表现:认为高位交叉也能提高带宽
- 错误原因:看到"多模块"就认为可以并行
- 正确做法:高位交叉的连续地址在同一模块,顺序访问时无法并行。只有低位交叉才能通过流水线并行提高带宽
易错点2
- 错误表现:计算低位交叉带宽时,直接用 (用访问时间而非存取周期)
- 错误原因:混淆访问时间和存取周期
- 正确做法:带宽计算用的是存取周期 (包含恢复时间),不是访问时间 。因为模块完成一次访问后需要恢复才能开始下一次
易错点3
- 错误表现:计算低位交叉的地址映射时,用地址÷模块数取商作为模块号
- 错误原因:搞反了高低位的分配方式
- 正确做法:低位交叉时,地址的低位选择模块,高位是模块内地址。模块号 = 地址 mod 模块数。高位交叉时,模块号 = 地址 ÷ 每模块字数
易错点4
- 错误表现:认为低位交叉时8个模块可以同时读同一个地址
- 错误原因:混淆了"不同模块可以同时工作"和"所有模块同时读同一个地址"
- 正确做法:低位交叉的并行是指"不同模块各自读不同的地址",不是"所有模块同时读同一个地址"
七、来源标注
- 依据2026考研统考大纲(408-计算机组成原理-第三章"存储器层次结构")
- 依据大学本科经典教材共识:唐朔飞《计算机组成原理》、白中英《计算机组成原理》