之前我们了解并实现了全加器,又通过全加器改造的到了减法器,将这两个电路合并到一起,就构成了ALU的加减法计算部分。

在之前我们有介绍过,ALU其实就是用来做一些运算的,我们把各种运算模块组合到一起,就变成了ALU。

加法和减法

在很久以前的从零开始的手搓CPU(3)——从逻辑门到全加器一章中,我们使用逻辑门建造了一个4位的全加器。全加器是我们CPU计算功能,同时也是ALU的重要组成基础。

如果我们使用两个4位全加器相连,便可以实现一个8位的加法器,也就是我们ALU中负责运算的模块,为了节省空间,我们会使用到74LS283芯片,这是一个4位全加器芯片,我们使用两块74LS283便可以组成8位全加器。这个芯片的资料可以在文章底部找到。

关于其他加法的相关内容,在之前制作全加器时已经介绍的比较多了,这里就不再重复说明了。这里说一下减法器。

减法器,顾名思义是用来做减法运算的。在之前的从零开始的手搓CPU(6)——负数及CPU的减法运算一章中,我们也详细介绍了CPU中是如何进行减法运算的。减法运算本质上也使用了加法器,只是需要做一些简单的修改。所以实际上我们可以使用一个加法器+模式切换的方式来为ALU同时实现加法和减法的功能。

根据从零开始的手搓CPU(6)——负数及CPU的减法运算一章的介绍,减法计算只需要将减数的绝对值取相反数,然后与被减数相加即可,所以我们需要先将减数处理成绝对值的相反数,也即是正数按位取反后+1,不过实际上,减数(加数2)存在两个状态,在加法时该数不用进行操作,但是在减法时需要取反,所以我们需要设计一种电路,达到可控按位取反的目的。

实际上,我们观察各种门电路的真值表可以得知,XOR可以满足我们的需求。在从零开始的手搓CPU(2)——从开关到逻辑门一章中我们有介绍到XOR,它的输出只会在两个输入信号不同时为1。我们将该门的一个引脚接入减法运算控制线,另一个引脚接入减数(加数2)。

ALU减数取反控制器

正如上图所示,当最上方的控制线激活时,输入与输出相反,反之输入与输出相同。同时我们再将这条控制线连接到减数(加数2)的加法器的低位进位引脚,在控制线激活时,即同时完成了数字取反并+1的操作,以此作为第二个加数,即是进行减法运算。

ALU加减法部分