上一章我们介绍了基于SR锁存器改造得到的D触发器,D触发器可以用于数据的存储,这对我们后续制作寄存器能够起到至关重要的作用。但是在着手制造寄存器之前,我们还需要先了解一下于寄存器息息相关的、用于控制CPU中数据流动的总线和三态门。

总线

从零开始的手搓CPU(0)——前言与CPU基本结构中我们提到过,CPU中的总线用于负责连接各个模块,用于数据传输,还负责与外部设备、内存、芯片组(所谓的南桥之类的)进行数据通信,如果计算机中有多个CPU(核心),也负责CPU间通信。

正如之前所说,CPU中的总线实际上就是一堆连接到各个模块之间的线。在这一章,我们将了解到总线是如何连接到CPU中的各个模块的。

既然是用来连接各个模块的,那么先来回顾一下CPU中有哪些模块。首先是寄存器,寄存器是用来保存数据的,所以我们寄存器至少应该具有输入和输出的功能,所以我们会给寄存器设计两组引脚,分别是输入引脚和输出引脚,它们都连接到总线中。

示意图(开dark模式可能看不清)

如上图所示,中间与所有寄存器相连的八条线就是总线,总线与每一个寄存器直接相连,所以我们可以在不同的寄存器之间相互传递数据。实际上,总线的数据是不讲究方向的(因为都是电线,电荷虽然有移动方向,但是通电以后,所有接到总线的模块都会有电流经过),所以我们可以将数据输入寄存器的引脚和寄存器输出数据的引脚合并到一起,也就是说,寄存器有一组引脚和总线相连即可,这组引脚可以分别进行输入和输出的工作。

其次是ALU,我们之前提到过,ALU在进行计算时,会分别从A寄存器和B寄存器(通用数据寄存器)中读取立即数,然后经过计算,输出到总线或结果寄存器,所以ALU到总线的连接如下:

带ALU的总线示意图