nandgame--Level 2: Arithmetics

现在来到了第二关

第一个任务是,组建一个半加器。

半加器的输入是两个位:A,B

输出也是两个位:H,L

低位L=A异或B,高位H=A与B

任务二:组建全加器

输入:三个位:A,B,C

输出:还是两个位:高位H,低位L

有了半加器,很方便是使用半加器组建全加器。

可以先把A和B加起来,得到H1和L1.再将其结果与C相加H2和L2。L2即为L,H则为H1和H2的或。

任务三:一位运算变为两位运算

主要是考虑进位。硬件上是使用两个全加器级联。

任务四:组建一个自加器。

本来这个题目很简单,直接使用一个十六位的加法器,将进位位C设置为1即可。但是原材料里面没有“1”,只好使用异或门+非门得到一个“1”。

任务五:减法运算

减法运算也可以变成加法运算。A-B = A + (-B)。关键是把这个-B表示出来。负数使用补码,补码为反码加一。

这里又遇到了“1”的问题。为了产生这个1,可以想了好久。这一关里没有提供“异或”门了,只有与非、非、或。

还是按位或吧,(B)跟(B非)  按位或,或出来的全是1.

结果也算是正确的啦:

任务六:判断运算结果是不是零

这个也不难。把每一位取反,再与起来即可。如果原始结果中有一个位为1,取反后就是0,与的结果就是0.只有原始结果的位全是0,按位取反才能得到全1,与的结果才是1.

任务七:判断运算结果是不是负数

因为负数的最高位是1,直接分离出最高位即可。原材料中也很贴心地提供了一个splitter

第二关已通关:

猜你喜欢

转载自blog.csdn.net/booksyhay/article/details/82017687