# 前言

针对这一部分内容我还是推荐大家去看看书本上和其他教学视频里的内容,本篇文章只针对计算机组成原理(第 3 版)P91 页之后的内容进行简单整理汇总。

接下来我将会按照书上的顺序进行叙述。

# CPU 与存储器的连接

# 存储器容量扩展

# 字扩展

在某些情况下,字扩展可以被视为一种扩容操作。字扩展通常指的是将一个字符或字符串转换为具有更多位数或更高精度的数据类型,以便进行更复杂的计算或存储更大的值。这个过程可能涉及到内存分配和重新分配,因此可以看作是一种扩容操作。但是,在其他情况下,字扩展可能只是简单地将一个字符或字符串进行格式化或解码,而不涉及任何内存操作。因此,是否将字扩展视为扩容取决于具体的上下文和实现方式。

但是我们可以简单地把字扩展理解为扩容。

比如,两片 1K*8 位通过字扩展扩容位逻辑上的一片 2K*8 位

# 位扩展

位扩展是一种将一个二进制数值的位数增加的操作。在位扩展中,如果原始二进制数值的最高位为 0,则在其左侧添加 0 以增加位数;如果最高位为 1,则在其左侧添加 1 以保持符号不变。例如,将 8 位二进制数值 "00110110" 进行位扩展为 16 位,则结果为 "00000000 00110110"。位扩展通常用于将低精度数据类型转换为高精度数据类型,或者在进行算术运算时对操作数进行对齐。

咳咳咳,简单理解就是二进制加长

# 字位扩展

字位扩展是一种将一个数据类型的位数增加的操作,其中 “字” 指的是计算机中的一个固定大小的数据单元。在字位扩展中,如果原始数据类型的最高位为 0,则在其左侧添加 0 以增加位数;如果最高位为 1,则在其左侧添加 1 以保持符号不变。例如,将 16 位有符号整数进行字位扩展为 32 位,则结果为在最高位之前添加 16 个相同的符号位。字位扩展通常用于将低精度数据类型转换为高精度数据类型,或者在进行算术运算时对操作数进行对齐。

简单理解就是… 结合版

# 例题

怎么出题呢?一般都像这样:

CPU 有 16 根地址线、8 根数据线,并用 MREQ 非作为访存控制信号(低电频有效),用 WR 作为读 / 写控制信号。现在有如下存储芯片:1K X 4 位 RAM、4K X 8 位 RAM、8K X 8 位 RAM、2K X 8 位 ROM、4K X 8 位 ROM、8K X 8 位 ROM 及 74138 译码器和各种门电路。现要求如下:

  • 主存地址空间分配:
    • 6000H ~ 67FFH 为系统程序区
    • 6800H ~ 6BFFH 为用户程序区
  • 合理选用上述存储芯片,说明各选几片
  • 详细画出芯片片选逻辑图

# 解!!

第一步:写出地址空间分配范围二进制码

6000H ~ 67FFH 为系统程序区

6800H ~ 6BFFH 为用户程序区

6000H、67FFH、6800H、6BFFH 化为二进制:

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1
0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1

首先,先确定芯片,全零到全一就是一个芯片

先看 ROM,也就是系统区:

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1
0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1

A0 ~ A10 为一个 ROM,一共 11 位,理想是要一个规格为 2K X 8 位 ROM

再来看 RAM ,也就是用户区:

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1
0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1

A0 ~ A9 为一个 RAM,一共 10 位,理想是要一个规格为 1K X 8 位 RAM

然后呢,我们需要对 ROM 和 RAM 进行读写,这就涉及到切换 ROM 和 RAM 芯片的问题,我们需要弄一个片选信号:

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1
0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1

上两行是 ROM,下两行是 RAM,可以看到 A11 及其关键的决定了到底选择哪一个芯片,是 ROM 还是 RAM。当 A11 为 0 时 ROM 被选中,当 A11 为 1 时 RAM 被选中。

然而 74138 译码器需要三个数据输入端,这时候我们就需要再拉来两个垫背的 A12 与 A13。

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1
0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1

A11 A12 A13 一次排列连接至 74138 的数据输入端 A B C,这一点非常重要!!低位是起始点 A,高位时终点 C。

数据为 100 时 ROM 被选中,74138Y4 非端被点亮,因为 100 正是数字 4

数据为 101 时 RAM 被选中,74138Y4 非端被点亮,因为 101 正是数字 5

接下来再讨论讨论芯片的选择:

A0 ~ A10 为一个 ROM,一共 11 位,理想是要一个规格为 2K X 8 位 ROM

A0 ~ A9 为一个 RAM,一共 10 位,理想是要一个规格为 1K X 8 位 RAM

对于 ROM,题中刚好有一个规格为 2K X 8 位的 ROM 芯片,拿来便是!

对于 RAM,题中没有那个规格的我们这里就需要进行扩展,这里我们选择两片 1K X 4 位的 ROM 芯片对他进行位扩展就好了。位扩展 位扩展 位扩展,说明它位数不够,数据一次无法写进一个芯片,但是一次可以写进两个芯片。这样就解决了!

# 总结

CPU 与存储器的连接是计算机计算机组成原理中的重要考题,更是期末考试中的重点,看着很复杂的连接图,但其实内在的原理还是很简单的,无非就是:写二进制、选芯片、扩展外带画图连接,本质还是比较容易作的