|  | 
 
 楼主|
发表于 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
 | 
 |