存储器扩展技术

1. 译码器(Decoder)

在数字电路中,二进制译码器可以把 位二进制输入转换成 个输出。译码器的应用非常广泛,地址解码、数据选择等都是常用的译码器应用。

为了更清楚地理解 CPU 的 根地址线是如何产生多达 个连续的地址空间的,我们先用简单的3-8译码器来举例。74LS138是最为常见的3线-8线译码器,我们不去关注它的选通使能端,着重观察它的逻辑真值表。在如下表的逻辑真值表中,我们看到,虽然我们的输入位只有 3 位,但是却解码出了 8 种输出状态。即 3 根输入的”地址线“产生了 个连续的”地址空间“。

序号 输入端(A,B,C) 输出(Y0-Y7)
0 000 1111 1110
1 001 1111 1101
2 010 1111 1011
3 011 1111 0111
4 100 1110 1111
5 101 1101 1111
6 110 1011 1111
7 111 0111 1111

在74LS138译码器中,当输出端被选中后会变为低电平(0),其余输出端口保持高电平(1),在设计译码电路时,我们可以人为规定选中后呈现高电平或是低电平。现在,我们就应该理解为什么 根地址线,能过产生 个连续的地址空间了。当寻址方式是按字节寻址时,译码电路的一个输出端就能够对应 1byte 的数据。

当地址线条数有 12 根,且按照字节寻址,那么 CPU 直接寻址范围就等于:

2. 计算机内存相关的术语 (Main Memory Jargons)

  1. 记忆单元(存储基元/ 存储元/ 位元)(Cell)
    • 具有两种稳态的能够表示二进制数码0和1的物理器件
  2. 存储单元/ 编址单位(Addressing Unit)
    • 具有相同地址的位构成一个存储单元,也称为一个编址单位
  3. 存储体/ 存储矩阵/ 存储阵列(Bank)
    • 所有存储单元构成一个存储阵列
  4. 编址方式(Addressing Mode)
    • 字节编址、按字编址

2.1 内存芯片和位平面 (Memory Chips and Bit Plane)

位平面(Bit plane) 是存储体的重要组成部分。而每个内存芯片(DRAM chip)中可以包含多个存储体。明晰了它们之间的关系,我们来看下面这张图,假如每个位平面都包含 64*64 的位元,也就是说每个位平面的寻址范围都是 0-4096,每一个可寻址位都包含 1bit 信息。这样,8 个位平面摞在一起就可以每次寻址 8bits(也就是1byte)的数据。

Pasted image 20240812173423.png

3. 现代计算机的主存译码

3.1 一维地址译码方式

在上节中我们看到,寻址空间的范围是会随地址线条数的增加翻倍增长的。地址线每增加一根,可寻址空间增大一倍。这样会导致一个很直接的问题,那就是如果我们只采用一个译码器,译码器每增加一个输入端就会使得输出端翻倍!12 根地址线译码后可是能产生 4096 个输出端口。这样设计的译码电路会使得整个芯片奇长无比,但显然设计人员考虑到了这个问题。因而,我们现在的内存多采用的是二维地址译码方式

3.2 二维地址译码方式

我们将地址线划分成为不同行(Row)不同列(Column),当某寻址单元行选中同时列选中时也可以选中这一单元。这样可以避免译码器过于庞大。而且现代计算机多采用地址线分时复用,也就是用 6 根地址线分时复用,由 RAS(Row Address Select)CAS(Column Address Select) 控制分时的时序。这样,原先 12 根地址线就可以减少到 7 根(6根复用线,1根 RAS/CAS)。

Pasted image 20240812172331.png
看上去好像分时复用要花上比原先多一倍的时间去访存。但实际上分时复用其实并不会浪费多少时间,因为行译码后会将这一整行的数据全部放到行缓冲中,这是用 SRAM 做的,速度要比主存快很多,当列选中信号到来的时候,CPU直接从行缓冲中读取数据。而且行缓冲技术遵循了 程序的局部性原理 当CPU后面再需要访存的时候,如果行译码后仍然在这一行,CPU就会直接从 SRAM 中读取数据。这样不但访存时间不会增加,反而因为局部性原理访存时间还减少了不少。

4. 存储器芯片的扩展

4.1 存储器芯片字扩展

存储器也会出现和一维地址译码方式类似的问题。如果单方面扩大存储芯片的存储容量,就可能导致芯片越做越大,不但可能影响存储性能,也会对物理空间造成影响。因此,我们可以对存储芯片进行编址,这种增加芯片数量增大寻址范围的方式就是我们所说的字扩展

举个例子,两片 4K * 8bits 的芯片可以通过字扩展形成 8K * 8bits 的”组合芯片“。通过字扩展,CPU 可以寻址的范围就从 0-4095 变为 0-8191。

芯片进行字扩展时,因为字长不需要改变,所以芯片的字线相连一模一样。片内的地址线也不需要改变,只需要译码芯片选中时将输出端连接响应的芯片片选引脚即可。我们使用3-8译码器,3位地址线可以编址选中 8 片芯片。

4.2 存储器芯片位扩展

字扩展可以帮我们解决内存寻址大小的问题,但是随着16位机、32位机器甚至64位机的出现,我们还需要对内存芯片进行位扩展来使得我们一次性能读出符合机器的的位数。假如我们的机器是16位机,而恰好我们手头上只有位宽8位的芯片,不论寻址大小是多少,我们总需要两片这样的芯片才能位扩展成16位 I/O 的数据宽度要求。

当我们用芯片进行位扩展时,我们想要扩展芯片 I/O 的数据宽度。若 CPU 数据线有16根,我们用两个 4K*8bits 的芯片,片选和地址引脚连接完全相同,芯片1的8位数据线连接系统数据线 D0-D7,芯片2的8位数据线连接系统的 D8-D15即可完成芯片的位扩展。

4.3 字位同时扩展

字位同时扩展。