module fa_behavioral(a,b,ci,s,co);//考虑进位的加法器模块
input a,b;
input ci;
output s;
output co;
// 请在下面添加代码,完成一位全加器功能
/* Begin */
assign{co,s}=a+b+ci;
/* End */
endmodule
module adder(a,b,cin,cout,sum);
parameter bit_width=8;
output[bit_width-1:0] sum;
output cout;
input [bit_width-1:0] a,b;
input cin;
// 请在下面添加代码,完成n=8位的无符号二进制数加法器功能
/* Begin */
assign{cout,sum}=a+b+cin;
/* End */
endmodule
module substractor(a,b,cin,cout,sum);
parameter bit_width=8;
output[bit_width-1:0] sum;
output cout;
input [bit_width-1:0] a,b;
input cin;//carry
// 请在下面添加代码,完成n位的无符号二进制数减法器功能
/* Begin */
assign{cout,sum}=a-b-cin;
/* End */
endmodule
module add_sub(a,b,control,cout,overflow,sum);
parameter bit_width=4;
output[bit_width-1:0] sum; output cout,overflow;
input [bit_width-1:0] a,b; input control;//carry
reg overflow,cout; reg [bit_width-1:0] sum;
reg [bit_width:0] a2,b2,sum2;
// 请在下面添加代码,完成定点二进制数的补码加减法运算器功能
/********** Begin *********/
always@(a or b or control)
/********** End *********/
begin
a2[bit_width]=a[bit_width-1]; //将a符号位扩展成2位并赋值给a2
a2[bit_width-1:0]=a[bit_width-1:0];
// 请在下面添加代码,将b符号位扩展成2位并赋值给b2
/********** Begin *********/
b2[bit_width]=b[bit_width-1]; //将b符号位扩展成2位并赋值给b2
b2[bit_width-1:0]=b[bit_width-1:0];
/********** End *********/
if (control==0) {cout,sum2}=a2+b2;
else {cout,sum2}=a2+(~b2)+control;
if((sum2[bit_width]^sum2[bit_width-1])==1) overflow=1;
else overflow=0; //用双符号位判溢出
sum[bit_width-1:0]=sum2[bit_width-1:0];
end
endmodule