From Nand To Tetris 从与非门到俄罗斯方块

11、P1 W2 U2.2 全能的加法器

2019-07-29  本文已影响0人  shazizm

视频:
如果本次课程对应的 Coursera 的视频打不开,可以点击下面链接
P1W2U2.2 - Binary Addition

软件:
全课程所需软件项目包官方下载:
https://www.nand2tetris.org/software
备了一份软件项目包放在CSDN了,版本2.6支持Mac、Linux、Windows:
https://download.csdn.net/download/shazizm/11268147

上节讲解了 现实世界的数(十进制),如何用布尔数(二进制)来表示。
这节就来讲 二进制的计算。

事实上,课程只用实现 加法计算!

因为上节有了负数的表示方法。所以减法就可以用加法代替(正数加负数就是减...)
而乘法和除法老师会推迟到软件部分来处理(貌似也是先处理成加法吧?)


所以只需要搞明白二进制加法就可以了

下图显示我们大脑 如何解决 二进制加法 的问题。
但是计算机并不会这么思考。
所以我们需要找到一种直接进行二进制加法的方法。

人类一般这样进行二进制计算,先转成十进制,算完结果再转回二进制

在研究二进制如何直接计算时。
先回顾一下十进制如何做加法的。
因为这个规律在二进制加法也是一样的。

1.从右往左 两个数对应的位上做一个位的简单加法。
2.超过10,向前进位,多出的留下。

从右往左,各位相加,有进位还要加进位,有几位加几次

其实二进制加法 也是一样的。(区别就在 满2就进位)

1.从右往左 两个数对应的位上做一个位的简单加法。
2.超过2,向前进位,多出的留下。

在这里计算机世界因为计算位数是固定的。比如8位,所以如果正好不巧第8位计算有进位的话,就会出现一个第9位,而计算机硬件是固定8位的。

所以就会产生一个溢出的问题。这里先忽略这个问题,后面章节会讲。

二进制直接计算规律 其实 本质和十进制是一样的

根据计算规律:从右往左,各位相加,有进位还要加进位,有几位加几次

那么16位加法器,就可以这样描述:从右往左,各位相加(半加器),有进位还要加进位(全加器),有16位加16次(16位加法器)。

这样就引出了三个逻辑门:
Half Adder (半加法器不带进位)
Full Adder (全加法器带进位)
Adder (多位加法器由 半加法器 和 加法器组成)


Half 半加器 和 Full 全加器,区别就是全加器多一个进位参与加法计算

Half Adder (半加器)

那到这里我们就看到了熟悉的真值表,看到真值表就知道可以转换成逻辑门,也就是可以用HDL编写,硬件模拟实现Half Adder。

a、b分别代表两个要相加的二进制数,sum 是相加和(例如一、二、三行),如果有进位就表示进位后剩下的数(例如第四行)。carry表示进位数

HDL的实现代码 就得自己琢磨了,是个作业


作业

Full Adder (全加器)

同半加器。就是多了一个 c ,这样可以把一个全加器的carry和另一个全加器的c连起来,实现多位计算。

例如:十进制加法里,“十位”上的全加器 c,可以连接“个位”上的全加器carry上,这样“个位”上的全加器如果相加有进位,那么就可以累计到十位上,一起参与“十位”上的加法计算。同理多位二进制数相加也是一样的。

那么已知下图,求HDL实现。


已知上图,求 Full Adder 的 HDL 实现 作业

16 bits Adder (16位加法器)
已知 下图,求 HDL 实现。(暂不用考虑进位溢出问题)


已知
求作业

这节课学习了两个正数在 计算机里是如何 计算的,并且通过HDL硬件模拟实现了加法器(如果做完作业的话),而且也知道了 只要实现了加法器,其他 “减乘除”等 计算就可以转换成加法计算来实现 。

那么下节 我们来看看负数在计算中的表示和作用。

上一篇下一篇

猜你喜欢

热点阅读