在开始我们今天的推送前,我们先来复习一下
竖式加法的基本法则,捡回那些已经还给小学老师的数学知识。对于在座的各位大学生来说,这应该不算什么难事…
事实上,这些进位的法则对于二进制加法也是成立的。只不过在二进制计算中,满2就进1;而在熟悉的十进制计算中是满10进1。
既然我们有了 足够的数学知识,那就让我们开始设计吧。首先,让我们设计一个最简单的电路, 它能相加两个一位二进制数。这个任务非常简单,让我们列出他的所有可能(真值表)。
看起来,这将会是一个有两个输入和两个输出的电路。既然真值表已经明确,理论上电路已经可以直接画出(方法见推送设计一个异或门)。如果你不想用这么暴力的方法,那就需要仔细地观察一下这个电路的输入与输出。
如果我们先只观察S的输出,这种规律似乎似曾相识。 没错,这和异或门的真值表是一致的!(见设计一个异或门) 而如果只观察C的输出,就会发现,这是一个简单的与门! 因此,我们只需要两个简单的门,就可以设计出一个能相加两个一位二进制数的电子玩意儿! 他有个 逼格很高却莫名所以的名字,半加器。
之所以 它叫半加器,或许是因为它只完成了位加法的 一半功能。我们已经知道,一个位的计算不仅要相加两个加数相应位上的数,而且还要再加上来自上一位的进位。 因此,我们还需要一个新的电路, 他能相加三个一位二进制数,包括一位进位。通过思考与分析(你可以自己想一想,比如列举真值表),我们找到了一种电路,他满足了我们的设计目标(你可以代入值试一试): 这类电路叫做 全加器。 全加器完整地实现了一位位加法所需的所有功能:
至此,我们离实现完整的加法器仅有一步之遥:事实上,我们只需要简单的串联全加器… 现在,我们完成了一个可以计算两个多位二进制数的加法器!(位数取决于串联的全加器的个数)这类加法器的优点在于可扩展性强,简单地串联全加器就可以提高参与运算的二进制数的位数;在这种加法器中,进位(C out)依次向高位传递,因此又称 波纹进位加法器。当然,这种设计的一个小小缺点是计算速度会比较慢,正因为要依次等待低位的进位。 根据这个原理,在mc中也可以建造出一个加法器。 Ref & Note为了便于理解,部分用语可能不太严谨部分图片来自网络本文参考自《数字电路技术基础》 解锁成就:我的一大步,ALU(算术逻辑单元,CPU的一部分)的一小步...
既然我们有了 足够的数学知识,那就让我们开始设计吧。首先,让我们设计一个最简单的电路, 它能相加两个一位二进制数。这个任务非常简单,让我们列出他的所有可能(真值表)。
算式 | 输入 | 输出 | ||
加数A | 加数B | 本位结果S | 进位C | |
0+0=0 | 0 | 0 | 0 | 0 |
1+0=1 | 1 | 0 | 1 | 0 |
0+1=1 | 0 | 1 | 1 | 0 |
1+1=10(BIN) | 1 | 1 | 0 | 1 |
如果我们先只观察S的输出,这种规律似乎似曾相识。 没错,这和异或门的真值表是一致的!(见设计一个异或门) 而如果只观察C的输出,就会发现,这是一个简单的与门! 因此,我们只需要两个简单的门,就可以设计出一个能相加两个一位二进制数的电子玩意儿! 他有个 逼格很高却莫名所以的名字,半加器。
之所以 它叫半加器,或许是因为它只完成了位加法的 一半功能。我们已经知道,一个位的计算不仅要相加两个加数相应位上的数,而且还要再加上来自上一位的进位。 因此,我们还需要一个新的电路, 他能相加三个一位二进制数,包括一位进位。通过思考与分析(你可以自己想一想,比如列举真值表),我们找到了一种电路,他满足了我们的设计目标(你可以代入值试一试): 这类电路叫做 全加器。 全加器完整地实现了一位位加法所需的所有功能:
至此,我们离实现完整的加法器仅有一步之遥:事实上,我们只需要简单的串联全加器… 现在,我们完成了一个可以计算两个多位二进制数的加法器!(位数取决于串联的全加器的个数)这类加法器的优点在于可扩展性强,简单地串联全加器就可以提高参与运算的二进制数的位数;在这种加法器中,进位(C out)依次向高位传递,因此又称 波纹进位加法器。当然,这种设计的一个小小缺点是计算速度会比较慢,正因为要依次等待低位的进位。 根据这个原理,在mc中也可以建造出一个加法器。 Ref & Note为了便于理解,部分用语可能不太严谨部分图片来自网络本文参考自《数字电路技术基础》 解锁成就:我的一大步,ALU(算术逻辑单元,CPU的一部分)的一小步...