5.8 KiB
tags, create time
| tags | create time | |||||
|---|---|---|---|---|---|---|
|
2026-06-16 21:21 |
小题 6 — 组相联映射与标识存储器
概述
本题考查组相联映射方式下标识存储器(Tag Memory)的两种实现方法——相联存储器(Content-Addressable Memory, CAM)和单体多字存储器,以及所需的比较器个数。这是理解 Cache 硬件实现的关键知识点。
[!tip] 考试重点 重点掌握组相联映射中两种标识存储器实现方案的比较器个数计算。相联存储器方案用
n个比较器(n为相联度),单体多字存储器方案用 1 个比较器但需要多体并行读取。
正文
一、组相联映射回顾
n 路组相联($n$-way Set Associative)是直接映像和全相联的折中:
| 特征 | 直接映像 | n 路组相联 |
全相联 |
|---|---|---|---|
| 映射关系 | 一块对一行 | 一块对一组(组内 n 行) |
一块对任意行 |
| 查找范围 | 1 个位置 | n 个位置 |
所有位置 |
| 比较次数 | 1 | n |
全部行数 |
[!question] 为什么组相联需要标识存储器? 组相联映射中,一个主存块可以映射到一组内的任意一行。处理器发出的地址需要与该组内所有行的 Tag进行比较,才能确定是否命中。存储这些 Tag 并进行比较的硬件就是标识存储器。
二、标识存储器的两种实现方法
2.1 方法一:相联存储器(CAM)
相联存储器是一种特殊的存储器,它不是通过地址访问,而是通过内容匹配来查找。每个存储单元都内置了一个比较器。
graph LR
subgraph CAM["CAM Implementation"]
T1["Tag Entry 1"] --> C1["Comparator 1"]
T2["Tag Entry 2"] --> C2["Comparator 2"]
T3["Tag Entry 3"] --> C3["Comparator 3"]
T4["Tag Entry n"] --> C4["Comparator n"]
end
ADDR["Input Tag"] --> C1
ADDR --> C2
ADDR --> C3
ADDR --> C4
C1 --> M["Match Logic"]
C2 --> M
C3 --> M
C4 --> M
| 项目 | 说明 |
|---|---|
| 存储结构 | 每个 Tag 条目自带比较器,并行比较 |
| 比较器个数 | n 个(n = 相联度/路数) |
| 速度 | 快——所有路同时比较,一个时钟周期完成 |
| 硬件开销 | 大——每个条目都需要一个比较器 |
[!example] 示例:4 路组相联的 CAM 实现
每组有 4 个 Tag 条目,每个条目配一个比较器:
组内行号 Tag 存储 比较器 输出 行 0 Tag₀ CMP₀ Hit₀ 行 1 Tag₁ CMP₁ Hit₁ 行 2 Tag₂ CMP₂ Hit₂ 行 3 Tag₃ CMP₃ Hit₃ 比较器个数 = 4 个(每个时钟周期 4 路同时比较)
2.2 方法二:单体多字存储器
将一组内所有行的 Tag 存在一个单体多字存储器中。每次读出该组所有行的 Tag,再用一个比较器逐个比较(或用一个多位比较器一次比较)。
graph LR
SET["Set Index"] --> MEM["Multi-Word Memory"]
MEM --> T["All n Tags in the Set"]
T --> CMP["1 Comparator (or sequential)"]
ADDR["Input Tag"] --> CMP
CMP --> HIT["Hit Signal"]
| 项目 | 说明 |
|---|---|
| 存储结构 | 一个存储器存所有 Tag,一次读出一组的所有 Tag |
| 比较器个数 | 1 个(但位宽较大,需比较 Tag 的全部位) |
| 速度 | 较慢——需要先读出再比较,可能需要多拍 |
| 硬件开销 | 小——只需 1 个比较器 |
[!question] 单体多字存储器方案真的只用 1 个比较器吗? 严格来说,如果要用一拍完成比较,需要用
n个比较器(读出n个 Tag 同时比较)。如果允许多拍完成,可以只用 1 个比较器逐个比较。实际设计中通常在面积和速度之间折中。考试中需要根据题意判断。
三、两种方案的比较器个数总结
[!abstract]- 答案
实现方案 比较器个数 速度 硬件开销 相联存储器(CAM) n个(n= 相联度)快(并行比较) 大 单体多字存储器 1 个(逐个比较)或 n个(并行比较)较慢 小
[!note] 关键计算
n路组相联标识存储器实现方案对比:
参数 CAM 方案 单体多字方案 存储器数量 n个独立存储体1 个多字存储体 每个存储体宽度 Tag 位宽 n \timesTag 位宽比较器个数 n个1 个(串行)或 n个(并行)比较延迟 1 拍 1 拍(并行)或 n拍(串行)适用场景 高速 L1 Cache 面积受限的场景
四、数值化示例
[!example] 完整示例
已知:32 位地址,Cache 容量 16KB,块大小 64B,4 路组相联。
- Offset =
\log_2(64) = 6位- 组数 =
(16\text{KB} / 64\text{B}) / 4 = 64组- Set Index =
\log_2(64) = 6位- Tag =
32 - 6 - 6 = 20位
方案 存储器数量 每个体位宽 比较器个数 比较器位宽 CAM 4 20 位 4 20 位 单体多字 1 80 位(4×20) 1 20 位
[!warning] 考试注意 题目问"比较器个数"时要明确是哪种方案。如果是 CAM 方案,答案是相联度 $n$;如果是单体多字方案串行比较,答案是 1。考试中如果题目没明确说明方案,通常默认是 CAM 方案(因为这是 Cache 最常用的高速实现)。