Verilog实现32位加-减法电路
1.理论
参考文章
原码反码和补码,一篇就够了,全网最详细解析
HDLbits
- 计算机中存储数字只会存储正数和负数的补码。
- 正数的补码是其本身,负数的补码是对原码非符号位取反,再加1得到。
- 只存在+0,不存在-0。例子: 0000_0000 - 0111_1111 表示 (+0) - (+127);1111_1111 - 1000_0001 表示(-1) - (-127)。 1000···000(n个0)表示的是-2^n,这是人为规定且自然的:1000_0000 + 0000_0001 = 1000_0001 ,正好对应-128的补码与+1的补码相加得到了-127的补码。所以8bit数据可以表示(-128)到(127)一共256个数。
- 不过要注意,例如2个字节的二进制数据1000 0000 0000 0000 表示-215=-32768 ;注意 如1000_0000_0000其实是0000_1000_0000_0000,所以它不是以为的-211,而是211。
- 求一个正数的相反数的补码:符号位取反,然后取其补码,也就是说:正数所有位取反,再加1,得到其相反数的补码。
- 计算机内部的数字电路做减法实际上是通过加法器实现的,HDLbits的题目讲述了这样一种方法:
2.RTL view
图片截取自HDLbits的作业题目“adder-subtractor”。HDLbits

整个加法-减法器包含了两个16位全加器以及一个异或门实现a+b和a-b功能。
加法:sub = 0即可,正常的两个16全加器联合用做32位全加器。
减法:当sub为1‘b1时,使b与32’h0000_0000进行异或操作,即对b[31:0]进行了取反操作(包括符号位),另外,低位全加器的进位端cin = 1’b1,即实现加1功能。最终共同完成对b的相反数的补码做加法,即对b的减法。
3.Verilog


3707

被折叠的 条评论
为什么被折叠?



