ALU是算术逻辑单元,是CPU中重要的一部分,由于CPU本质上就是不断重复最简单的计算。而咱们这一版CPU的ALU部分更为简单,是一个只能作加法的ALU。.net
理论部分设计
咱们须要一个能帮咱们进行数学计算的电路设计。一旦打通了这一关,能够说你已经了解了计算机的所有,由于计算机所作的一切,就只有计算,更绝对一点说,计算的一切,也就只有加法。在这里我作一个大胆的假设,正在阅读这篇文章的你已经知道了二进制的含义,那如何给本身作一个8位二进制数的加法计算器呢?它大概应该是这个样子。视频
其实这不是一个新知识,我相信给你足够的时间你必定会设计出来,你不妨在此暂停一段时间拿出一张纸试试。咱们先从最简单的一位数相加开始,如何设计出一个一位数相加的计算器呢?咱们首先应该整理出这样一张清晰的表,它列出了对每一种可能的输入状况所对应的输出结果,即 0+0=00;0+1=01;1+0=01;1+1=10,这种表叫作真值表。这里咱们直接将进位也考虑进来。blog
加数A | 加数B | 加和输出S | 进位输出C1 |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
有了真值表以后,咱们就能够经过基本的逻辑运算来获得一个逻辑表达式。运算过程以下:博客
其中,加号(+)表示“或”运算,而输入项之间省略的乘号则表示“与”运算。咱们选出全部能使结果为1的输入项组合,再进行取反操做和与运算,再使每项之间经过或运算相连。对此有疑惑的同窗能够本身模拟一遍上面的运算过程,大概就能知道为何要这么作了。数学
由运算结果咱们得知,和就是异或门,进位就是与门。画出来就是下面这个样子,因为咱们只考虑了向后进位,而没有考虑前一个数的进位,所以咱们称这种装置为半加器。table
若是将前一个进位考虑进来,只需再多一个半加器就能够了,至于为何进位输出的加和没有用半加器而是用了一个或门,请暂停一分钟思考一下。这回咱们已经创建好了一个完美的一位计算器,咱们即可以自豪地称之为全加器。二进制
全加器的逻辑实现咱们一样能够用上面提到的真值表来完成。下面是全加器的真值表。im
进位输入C0 | 加数A | 加数B | 进位输出C1 | 加和输出S |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 0 | 1 |
0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 0 |
1 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
对应的逻辑表达式以下:数据
一位计算器作出来以后,8位计算器就只需将全加器逐个拼起来便可,而且再次抽象总体,咱们称之为8位加法器。
OK,大功告成。我不知道你此时的感觉如何,不知不觉咱们连续进行了3次抽象(即把以前的器件封装起来),有没有深入体会到以前所说的你必须开始习惯这种抽象。每当一个复杂的构造被装进一个黑盒子里时,你便不再要考虑里面的构造了,只要你作到了这一点,这三步的抽象便会是so easy。有了加法计算器,减法也就不是问题了,在本博客中将略去这部份内容,若是有兴趣,能够去了解一下计算机是如何用补码表示减法的,以后你会发现,减法就是加法。
实操部分
同8位的寄存器同样,插在咱们面包板上的ALU,一样直接用一个集成电路实现,74LS283,如下为针脚图:
将两个拼一块儿则就是一个8位的加法器,同以前作的寄存器(两个)接在一块儿,输出到总线端再接一个三态控制,就完成了整个电路。
这个加法器不像以前的寄存器,有控制是否存入数据的信号,它不管如何都直接将加和计算出并从输出端输出。咱们开启clk,手动将寄存器A(红色灯泡)和B(蓝色灯泡)设置几个数,就会看到ALU输出加和结果(黄色的灯泡,挤死了。。。)
参考视频:eater.net