【从零开始自制CPU之学习篇07】最简单的ALU—全加器

  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,如下为针脚图:

    

  • A1-A4:加数A
  • B1-B4:加数B
  • C0:进位输入
  • S1-S4:加和输出
  • C4:进位输出

  将两个拼一块儿则就是一个8位的加法器,同以前作的寄存器(两个)接在一块儿,输出到总线端再接一个三态控制,就完成了整个电路。

  这个加法器不像以前的寄存器,有控制是否存入数据的信号,它不管如何都直接将加和计算出并从输出端输出。咱们开启clk,手动将寄存器A(红色灯泡)和B(蓝色灯泡)设置几个数,就会看到ALU输出加和结果(黄色的灯泡,挤死了。。。)

     

 

参考视频:eater.net

相关文章
相关标签/搜索