视频:
如果本次课程对应的 Coursera 的视频打不开,可以点击下面链接
P1W1U1.6 - Multi Bit Buses
软件:
全课程所需软件项目包官方下载:
https://www.nand2tetris.org/software
备了一份软件项目包放在CSDN了,版本2.6支持Mac、Linux、Windows:
https://download.csdn.net/download/shazizm/11268147
之前一直在说对 1 bit 的布尔数进行 操作 ,例如 逻辑门 输入端 a 或 b,都是一个bit (0 或 1)。但现实中,为了方便都会用一组多bits来 做输入 或 输出。管这一组就叫 buses(这让我联想到高铁站,多条高铁进入车站的样子)。
总线(Buses)=> 一组Bits (Arrays of Bits)
接下来的几周,实际上我们要做的是 输入端都是总线形式的 16bits(位)二进制数 (例如16个0或1组成的数)组成的逻辑门。
例如下图是一个16-bit加法器(adder),加法器的 a 和 b 都会输入一个 16位的二进制数,然后out端就会输出一个16位的二进制数,表示相加后的结果。
因为二进制都是0和1,所以可以看成是布尔数,那么就可以用布尔运算,也就是说可以用真值表表示,也就是说可以用逻辑门表示,也就是说我们可以用HDL模拟出来。
假设一个3位二进制相加:a=001(十进制就是1),b=010(十进制是2),那么经过3-bit加法器后,out=011(十进制就是3)。这样我们就可以进行数值计算了。同理16位也是一样的。所以关键就是我们怎么设计加法器,让它可以计算出out=011。
那么再HDL里如何编写出带总线形式的逻辑门呢。如下图一个三组16位数相加器(Add3Way16)。起好输入端变量名, 例如有 first、second、third(之前是a 或 b)。只需要在后面加上 “[ ]”中括号,并写入16 就可以了。
a[16]这是计算机编程里的数组写法,声明变量时代表a里面有16个数。使用时 a[0]代表第一个数,a[1]代表第二个数,以此类推。
三个 16位数 相加,它可以由两个Add16来组成。Add16得之后作业里自己琢磨出来。
再举个例子,我们也可以做出4位buses的4位与门。如下图,实现方法就是将 a 和 b 对应的每位分别做 And 运算。
4位与门 (And4)
有时候我们又需要把一个总线(Buses)拆成几个分总线(Sub-buses),例如一个a[16]拆成两个 b[8],c[8]。我们也可以输出的时候,变成out[4] out[12]。主要看这个逻辑门是怎么定义和什么功能了。目前看不出这样能有什么用。。。
lsb:least significant bit。msb:most significant bit 通常,MSB位于二进制数的最左侧,LSB位于二进制数的最右侧。
这节课主要讲了 总线 以及 如何在 HDL里面表示。
下节课终于可以开发第一波的十几个逻辑门了。
网友评论