|
楼主 |
发表于 2017-8-6 21:14:35
|
显示全部楼层
仔细思考了两天,自己来回答:
发现书中的代码并没有错误。
书中的操作数都是默认是补码形式。
三句话完成加法与减法,有符号数和无符号数的操作,感觉很奇妙。
之所以很简洁,主要还是因为电脑中将数字(正数/负数)按照补码形式来存储的,加法与减法得到统一。
下面是我摘出来用来单独理解写出的程序:
module alu_comp(a,b,add_sel,signed_sel,c,overflow);
input [3:0] a,b;//两个输入数
input add_sel,signed_sel;//两位选择信号:加法/减法 有符号数/无符号数
output [3:0] c;//输出数,对于输出数,如果是负数,比如-3,它会显示1101(-3的补码),而不是1011
output overflow;//当为有符号数时,是否出现溢出
wire [3:0] b_mux;
assign b_mux=(!add_sel)?(~b)+1:b;
assign c=a+b_mux;
assign overflow=((a[3])&&(b[3])&&(!c[3])&&(signed_sel)) || ((!a[3])&&(!b[3])&&(c[3])&&(signed_sel));
endmodule |
|