7、P1 W1 U1.6 多bit总线
视频:
如果本次课程对应的 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(这让我联想到高铁站,多条高铁进入车站的样子)。

接下来的几周,实际上我们要做的是 输入端都是总线形式的 16bits(位)二进制数 (例如16个0或1组成的数)组成的逻辑门。
例如下图是一个16-bit加法器(adder),加法器的 a 和 b 都会输入一个 16位的二进制数,然后out端就会输出一个16位的二进制数,表示相加后的结果。
因为二进制都是0和1,所以可以看成是布尔数,那么就可以用布尔运算,也就是说可以用真值表表示,也就是说可以用逻辑门表示,也就是说我们可以用HDL模拟出来。

那么再HDL里如何编写出带总线形式的逻辑门呢。如下图一个三组16位数相加器(Add3Way16)。起好输入端变量名, 例如有 first、second、third(之前是a 或 b)。只需要在后面加上 “[ ]”中括号,并写入16 就可以了。
a[16]这是计算机编程里的数组写法,声明变量时代表a里面有16个数。使用时 a[0]代表第一个数,a[1]代表第二个数,以此类推。

再举个例子,我们也可以做出4位buses的4位与门。如下图,实现方法就是将 a 和 b 对应的每位分别做 And 运算。

有时候我们又需要把一个总线(Buses)拆成几个分总线(Sub-buses),例如一个a[16]拆成两个 b[8],c[8]。我们也可以输出的时候,变成out[4] out[12]。主要看这个逻辑门是怎么定义和什么功能了。目前看不出这样能有什么用。。。

这节课主要讲了 总线 以及 如何在 HDL里面表示。
下节课终于可以开发第一波的十几个逻辑门了。