视频:
如果本次课程对应的 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硬件模拟实现了加法器(如果做完作业的话),而且也知道了 只要实现了加法器,其他 “减乘除”等 计算就可以转换成加法计算来实现 。
那么下节 我们来看看负数在计算中的表示和作用。
网友评论