今天捣鼓了一个可以进行负数运算的四位二进制加法器

2021/10/01776 浏览攻略
今天捣鼓了一个可以进行负数运算的四位二进制加法器,理论上可以无限堆叠位数(只要处理好边界问题),但是其中为了解决边界问题会进行增加结果输出的位数,导致了储存浪费,没找到好的解决办法,希望大神能帮帮我😂
下面附上教程:
TapTap
TapTap
1:输入端,四位二进制,第一位进行符号表示,0正1负,可以表示-7~7的范围
2:求补器,逻辑是:首先对负数(符号位为1)的数字部分求反,及使原本的0变为1,因为只对负数进行求反,则可得真值表00 0 01 1 10 1 11 0,与亦或门真值表相同,故直接用异或门逐位求反,随后对负数反码进行加一,由于表示符号位1表示负数,则可以直接将符号位与反码相加,结果就是原码的补码,再看正数求补逻辑,由于正数的补码就是本身,故而亦或门真值表亦能满足要求,同时符号位0表示正数,0与反码相加没有影响,则求反求补之后还是原码本身,符合要求,求补后将符号位移动到首位,求补完成。
这是单独的求补器(由于输入不能直接连接输出,所以在上面加了两个非门用于符号的传递,在加法器中不需要)
TapTap
下面是简单的加法模块
TapTap
3:加法部分,由于补码相加再还原成原码可以直接完成正负数的加减,所以可以直接用之前过关中的加法模块进行相加,但要注意,由于两个四位二进制相加结果范围是14~-14,超出四位二进制的表示范围,为了避免超出边界,需要在结果增加一位,及第一位仍为符号位,剩下四位进行数字表示,但原本五位二进制的表示范围是15~-15,造成了存储浪费,目前没有找到解决办法,希望大神指点。
加法器样式如上
4:解码部分:由于补码再次取补等于原码,所以本部分逻辑与之前的求补相同,略过,最后只需要将还原成原码的数字部分输入四位二进制的输出端,将符号位移动到数字部分之前,便能得到运算结果。
下面视频分别演示了
0+0
正数+负数
负数+正数
7+7
-7+(-7)
的运算
这个加法器在处理好边界问题后可以无限叠加,直接增加数字部分位数、求补器位数和加法器位数即可。
12
3
4