1 前言
本文是基于《编码》、《穿越计算机的迷雾》两部著作进行读后整理的记录性博客。对书中较为重要的内容进行归纳整理进行二次创作,略去了繁琐的讲述细节,力求简明扼要。
编码:一种由若干符号和规则组成的系统,用来向计算机表述指令。
2 正文
2.1 总线
在前面介绍自动加法机时,我们针对当时的电路设备说过,为了简化电路,针对电路中各个位置的指令控制电路进行了省略。本文中我们着重解决两个问题:通过怎样的方法才能把指令加载到 RAM 中?怎样才能把程序的结果变得可见呢?
在前面介绍 RAM 阵列时,我们了解到:RAM 是易失性存储器——当掉电的时候其中的内容就会丢失。所以,长期存储设备也是一台计算机必不可少的部件,只有这样,代码和数据才能够被永久保存,不会因为掉电而丢失重要的数据。
搭建一台完整的计算机还需要很多集成电路,这些集成电路都必须挂载(mounted)到电路板上。在一些小型的机器中,一块电路板足以容纳所有的集成电路,但这种情况并不常见。我们通常所看到的是另一种情况:计算机中各部件按照功能被分别安装在两个或更多的电路板上。这些电路板之间通过总线(bus)通信。如果对总线做一个简单的概括,可以认为总线就是数字信号的集合,而这些信号被提供给计算机上的每块电路板。通常把这些信号划分为如下四类。
- 地址信号。这些信号是由微处理器产生,通常用来对 RAM 进行寻址操作,当然也可以用来对连接到计算机的其他设备进行寻址操作。
- 数据输出信号。这些信号也是由微处理器产生的,用来把数据写入到 RAM 或其他设备。这里特别要注意区分术语输入和输出,来自微处理器的数据输出信号会变成 RAM 和其他设备的数据输入信号。
- 数据输入信号。这些信号是由计算机的其他部分提供的,并由微处理器读取。通常情况下,数据输入信号由 RAM 输出,这就解释了微处理器是怎样从内存中读取内容的。其实,其他部件也可以给微处理器提供数据输入信号。
- 控制信号。这些信号是多种多样的,通常与计算机内所用的特定的微处理器相对应。控制信号可以产生于微处理器,也可以由与微处理器通信的其他设备产生。比如,当微处理器要把一些数据写入到特定内存单元时,它所使用的信号就是控制信号。
计算机上的各种不同的部件是如何工作的呢?为了能更好地理解,让我们再次回到 20 世纪 70 年代中期去看一看。想象一下,我们正在为 Altair 设计电路板,或者是在为自己设计的 8080 或 6800 计算机做这样的事情。我们不仅要考虑为计算机设计一些存储器,用键盘作为输入,用电视机作为输出;还要考虑关上计算机时,如何把存储器中的内容保存下来。如何把这些部件添加到计算机中呢?下面就来看看能实现这个功能的各种接口(Interface)。
现在回想一下前面所介绍的 RAM 阵列,RAM 阵列有地址输入、数据输入,以及数据输出信号,另外还有一个用来把数据写入存储器的控制信号。RAM 阵列能存放的数据的数量是和地址输入信号的个数有关的,它们之间有着 2 的幂次的关系。
20 世纪 70 年代中期,2102 是用于家用计算机的一款流行的存储器芯片。其管脚分布如下图所示。
这款芯片与 8080 和 6800 微处理器所采用的技术相同。它的存储容量可以达到 1024 位,这个数值可以根据地址信号(A0~A9)、数据输出(DO)和数据输入(DI)信号(输入和输出复用一个信号线)的数目计算出来。使用 2102 芯片型号不同,访问时间(read access time,指从芯片接收到地址信息到输出有效数据所需的时间)也是各有差异,从 350 ns~1000 ns 不等。当需要从存储器中读取数据时,R/(读/写)信号置 1;当向芯片中写入数据的时候,这个信号要置 0,而且至少要持续 170~550 ns 的时间,也是由所使用的 2102 芯片的型号决定的。
这里我们不得不提到的一个信号就是 信号,也称片选信号。该信号置 1 时,芯片不被选中,意思就是说,不会响应 信号。
如果想存储整个字节,则至少需要 8 个这样的 2102 芯片。具体的做法就是,把 8 个芯片对应的地址信号、R/ 及 信号连接起来,如下图所示。
实际上,这是一个 1024×8 位的 RAM 阵列,或者说是容量为 1 KB 的 RAM。
把存储器芯片安装在一块电路板上,这是很符合实际的做法。那么,到底一块电路板上能安装多少块这样的芯片呢?我们可以选择将它们紧密排列在一起,但一般我们不这么做,更合适的方法是用 32 个芯片组成一个 4 KB 的存储器。这种为了存储完整的字节,而连接在一起的芯片的集合,称为存储体(bank)。例如,一个 4 KB大小的存储器板就由 4 个存储体组成,而每个存储体又包含 8 个芯片。
8 位微处理器,例如 8080、6800,有 16 位地址,可用来寻址 64 KB 的存储空间。存储器板上的 16 位地址信号就有如下所示的功能:
下面详细解释一下这 16 位地址信号。A0~A9 直接与 RAM 芯片相连接;A10 和 A11 用来选择 4 个存储体中要被寻址的那一个;A12~A15 确定哪些地址申请用这块存储器板,换言之,就是这块存储器板响应哪些地址。
微处理器整个存储空间的大小是 64 KB,被划分成 16 个不同的区域,每个区域的大小是 4 KB,我们设计的 4 KB 存储器板占用了其中一个区域。这16个区域划分情况如下:0000h~0FFFh、1000h~1FFFh、...、F000h~FFFFh。
在一种称为比较器(comparator)的电路中,你可以把这个开关和总线上地址信号的高4位连接起来,就像下面这样。
异或(XOR)门电路在两个输入端中只有一个是高电平时,输出才为高电平;当两个输入端同时为低电平或高电平时,输出是低电平。
例如,如果把 A13 和 A15 对应的开关闭合,就意味着让存储器板能响应存储器空间 A000h~AFFFh。若总线上的地址信号 A12、A13、A14 和 A15与开关上设置的值相同的话,四个异或(XOR)门的输出都是 0,或非(NOR)门的输出为 1,如下图所示。
接下来我们把 Equal 信号和一个 2-4 译码器联合起来使用,就能为四个存储体中的每一个都产生一个 信号,便于对存储体进行选择。具体连接图如下图所示。
例如,若想选择第三个存储体,把 A10、A11 分别置 0 和 1 就可以了。
[了解] 存储器
在将存储体构成存储器时,可以选择将存储体按照矩阵的形式进行排列:
矩阵式排列
要启用某个存储体,就可以选择启用存储体所在位置的行线和列线:
单个存储器
这里的行线和列线对应着存储体的读写操作,我们可以利用行线和列线对存储体进行读写。而针对每个线的操作需要用到一种叫做多路复用器的设备。
多路复用
根据上面的介绍,我们来看一下生活中的存储设备:
主板上的内存条
单个内存条
放大后的内存条上的芯片
进一步放大
再放大
3 小结
总线篇简单介绍了处理器如何处理各种接入的设备,介绍了系统总线。文章内容仅作了解即可,具体内容可以参考《计算机组成原理》,文章对此没有展开讲述。为了精简内容删减了部分较为详细的书写,仅作为整理总结。
网友评论