不同存储器组织和交叉编址技术的工作方式及举例说明
本节介绍内存系统中常见的组织方式以及如何通过交叉编址来提高存储器性能,主要内容包括:
- 多模块存储器
- 单体多字存储器
- 多体并行存储器
- 高位交叉编址(顺序方式)
- 低位交叉编址(交叉方式)
下面依次说明这些结构的工作原理和实际应用中的举例。
1. 多模块存储器
原理简介:
多模块存储器将整个存储系统划分为多个独立模块(或称“块”),每个模块具有一定的存储容量和独立的控制电路。整个系统通过地址译码将总地址空间分配到各个模块中,从而可以采用并行、分布式的方式进行读写操作。
应用举例:
例如,一个 512MB 的内存系统可以由 8 个 64MB 的存储模块构成。内存控制器根据地址的高位字段选择相应的模块,然后由该模块内部依照内部结构进行数据访问。
2. 单体多字存储器
原理简介:
单体多字存储器指的是单个存储器芯片或设备内部组织成一个大数组,直接存储多个字(word)。存储器内部地址译码直接根据输入地址选择所在的行和列,所有数据存储在同一物理体上。
应用举例:
例如,一款 SRAM 芯片可能内部包含 64K×16 位的存储阵列,其中 64K(65,536)个存储单元,每个单元存储 16 位数据。该芯片作为一个整体提供高速存取,但通常容量较小且成本较高。
3. 多体并行存储器
原理简介:
多体并行存储器是由多个体(即多个存储芯片)同时组成一个逻辑存储单元。各芯片通常并行工作,实现数据位宽的扩展。例如,将若干个 4 位存储芯片并行组成 32 位的数据总线。
应用举例:
在现代 DRAM 模块中,常见的 64 位存储总线通常由 8 个 x8(每芯片 8-bit)DRAM 芯片构成。每次存取操作中,各芯片并行输出 8 位数据,最终组合成 64 位的数据字,从而达到高吞吐量同时保持较高的存储密度。
4. 高位交叉编址(顺序方式)
原理简介:
在高位交叉编址中,使用地址中的高位部分来决定存取数据所在的模块。也就是说,存储模块的选择由地址的较高位来完成,而低位则确定模块内的偏移地址。
- 特点:
- 一个模块内的地址空间连续;
- 顺序的内存地址往往全部落在同一个模块里;
- 优点在于模块内地址译码简单,易于构造大容量模块;
- 缺点是一旦程序执行顺序访问,往往只访问单个模块,不能充分利用并行读取优势。
举例说明:
假设有两个存储模块,每个模块容量 1MB,采用高位交叉编址,地址格式定义如下:
- 地址的最高1位作为模块选择(0 表示模块 0,1 表示模块 1);
- 余下部分作为模块内的地址偏移。
这样,地址范围如下:
- 地址 0x00000 至 0xFFFFF(1MB)分配给模块 0;
- 地址 0x100000 至 0x1FFFFF 分配给模块 1。
如果一个程序要顺序访问从 0x00000 开始的 128KB 数据,这 128KB 都落入模块 0内,只有一个模块被激活,难以实现多个模块之间的并行读写。
5. 低位交叉编址(交叉方式)
原理简介:
低位交叉编址采用地址中最低位来决定存储模块的选择,使得连续的内存地址依次分散到不同的模块中。
- 特点:
- 连续的地址在各个模块间轮流分布;
- 可将顺序访问拆分到多个模块,达到并行访问、提高整体带宽的目的;
- 地址译码相对复杂,但在顺序数据访问场合表现优异。
举例说明:
同样以两个存储模块,每个容量 1MB为例。假设地址格式进行低位交叉编址,地址定义如下:
- 地址的最低1位作为模块选择;
- 其余高位作为模块内地址偏移。
这样,分布情况如下:
- 地址 0x00000(二进制:……0)分配给模块 0;
- 地址 0x00001(二进制:……1)分配给模块 1;
- 地址 0x00002(二进制:……0)分配给模块 0;
- 地址 0x00003(二进制:……1)分配给模块 1;
- 以此类推。
在这种配置下,如果一个程序连续读取 4 个连续地址(例如 0x00000、0x00001、0x00002、0x00003),则这些请求均分布在模块 0 和模块 1,两个模块可以并行工作,从而有效提高整体访问速度和带宽。
6. 总结
- 单体多字存储器 在单一芯片内部存储多个字,结构简单、适用于容量要求较低的高速存储;
- 多体并行存储器 利用多个存储芯片并行构成宽数据总线,提高传输带宽;
- 多模块存储器 将整个存储空间分割成多个独立模块,既可以是单体多字,也可以是多体并行,便于构成大容量系统;
- 高位交叉编址(顺序方式):利用地址的高位选择模块,使连续地址集中在一起,译码简单但并行度低;
- 低位交叉编址(交叉方式):利用地址的低位轮换分布到各模块中,实现高并行度,适合顺序访问和高带宽要求。
通过合理选择存储器组织和交叉编址方式,系统可以优化内存访问性能,达到更高的吞吐量和较低的延迟。
低位交叉编址 vs 高位交叉编址
在存储器系统中,为提高并行性和带宽,通常采用交叉编址技术将连续地址分散到多个独立的存储模块或银行中。主要有两种方式:低位交叉编址和高位交叉编址。下面具体说明它们的原理、优缺点及各自适用的情况。
1. 低位交叉编址
工作原理
- 地址分配:
利用地址中的低位(最低有效位)来决定存储模块的选择。
—— 对于采用低位交叉编址的系统,连续的内存地址将依次分布到各个模块中。例如,利用最低一位来选择模块时:- 地址 0、2、4……分配到模块 0,
- 地址 1、3、5……分配到模块 1。
优缺点
-
优点:
- 高并行度: 当连续地址被轮换分配到不同模块时,顺序数据的访问可以在多个模块中同时进行,从而提升整体存储带宽。
- 负载均衡: 连续的数据被均匀分布到各模块,不会出现单一模块过载的情况。
-
缺点:
- 地址译码复杂度较高: 分配逻辑需要细致的低位分割和映射,硬件实现相对复杂。
- 行局部性利用不明显: 因为连续地址分散在不同模块,可能会降低单个模块内行缓冲器的命中率,对需要行缓冲重用的场景不太有利。
适用场景
- 当系统中大量顺序数据传输时,如视频流、音频处理或大数据连续访问,此时利用低位交叉可以充分发挥多个模块的并行优势,极大提升数据传输带宽。
2. 高位交叉编址
工作原理
- 地址分配:
利用地址中的高位(最高有效位)来选择存储模块。
—— 在高位交叉编址下,地址中较高部分决定模块编号,而低位作为模块内偏移。
例如,若最高一位指定模块,则:- 所有地址的低位部分相同(在相邻地址内变化较小)的数据往往都落在同一模块中,只有当高位改变时才切换模块。
优缺点
-
优点:
- 行缓冲器重用性好: 连续地址往往在同一模块内,可以充分利用存储芯片中行缓冲区的命中,降低行激活和预充电的延迟。
- 硬件实现简单: 模块选择由地址高位直接决定,译码逻辑相对简单。
-
缺点:
- 并行度较低: 顺序访问时,所有连续地址都位于同一模块,难以实现跨模块的并行访问,从而可能限制整体带宽。
- 热点问题: 如果大量连续数据集中在单一模块,容易造成该模块过载,降低访问效率。
适用场景
- 当系统应用对“局部性”要求较高,且数据访问模式具有较高的空间局部特性时(例如,缓存行内多次访问或大数据块的重复读取),高位交叉编址有助于提高行缓冲器命中率,减少访问延迟。
- 适用于随机性较低且行重用效果明显的应用场景,但在高带宽需求、顺序访问密集的场景下可能不如低位交叉。
3. 总结对比
特性 | 低位交叉编址 | 高位交叉编址 |
---|---|---|
地址分布 | 将连续地址轮流分配到各模块 | 连续地址常落在同一模块 |
并行性 | 较高:允许同时访问多个模块 | 较低:顺序访问集中于单一模块 |
行缓冲利用 | 可能不利于行缓冲重用,因为数据分散 | 利于行缓冲器命中,连续数据被局部存放于同一行 |
译码复杂度 | 较高,需要对低位进行精细分割 | 简单,直接取高位即可 |
适用场景 | 顺序传输要求高带宽、并行访问场合 | 强调局部性重用、行缓冲器利用,随机或局部访问较多 |
选择建议:
- 若系统主要进行顺序数据传输、要求高带宽和并行访问,推荐采用低位交叉编址;
- 若系统访问模式强调缓冲行的重用、局部性较强且对并行性要求不极端,采用高位交叉编址可能更合适。
低位交叉编址与高位交叉编址对带宽的影响
存储系统中常采用交叉编址技术将数据分散到多个存储模块或银行,从而实现并行访问。不同的交叉方式决定连续地址的分布方式,并对带宽产生明显影响。下面通过一个具体例子说明:
1. 基本概念
-
低位交叉编址:
利用地址中的低位来确定数据所在的存储模块。这样,连续的内存地址依次轮流落在不同模块中。例如,在两个模块(银行)系统中,如果用最低一位作为模块选择位,则- 地址 0(二进制末尾 0) → 模块 0
- 地址 1(二进制末尾 1) → 模块 1
- 地址 2 → 模块 0
- 地址 3 → 模块 1,依此类推。
-
高位交叉编址:
利用地址中的高位来选择存储模块。这样,连续的内存地址往往全部落在同一模块中,直到高位发生改变。例如,在同样两个模块系统中,用最高位作为模块选择位,则- 地址 0~511,999…(如果最高位为 0)都分配到模块 0,
- 地址 512~1023(最高位为 1)都分配到模块 1等。
2. 举例比较
假设系统中只有两个存储模块(Module 0 和 Module 1),且每个模块可以独立工作,支持同时并行访问。设每个模块的存取延迟相同,不存在其他瓶颈。
情况 A:低位交叉编址
-
映射规则:
用地址最低一位来选择模块。- 地址0 → 模块 0
- 地址1 → 模块 1
- 地址2 → 模块 0
- 地址3 → 模块 1
- ……
-
连续访问示例:
程序顺序读取 4 个数据单元,其地址为:
0 , 1 , 2