8位带符号数全加器 verilog
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//8 bit signed adder
module adder1(Cin,A,B,S,Cout,clk,rst);
input clk,rst,Cin;
input [7:0]A,B;
output [7:0]S;
output Cout;
reg [7:0]C,D,S,T;
reg Cout;
reg [3:0]i;
reg[8:0] Q;
always@(negedge clk,negedge rst)
begin
if(!rst)
begin
Cout=0;
Q[0]=Cin;
S=8'B00000000;
Q=9'B000000000;
C=8'B00000000;
D=8'B00000000;
end
else if((A[7]==1)&&(B[7]==1))//A and B both negetive begin
C=A;
D=B;
for(i=4'b0000;i<=4'b0111;i=i+1)
begin
T[i]=Q[i]^C[i]^D[i];
Q[i+1]=(Q[i]&&C[i])||(Q[i]&&D[i])||(C[i]&&D[i]); end
if(Q[7]==1)//overflow
begin
S=8'B00000000;
Cout=1;
end
else
begin
S[6:0]=T[6:0];
Cout=0;
S[7]=1;
end
end
else if(A[7]==1)//A is negetive
begin
C[6:0]=~A[6:0]+7'B0000001;
C[7]=1;
D=B;
Cout=0;
for(i=4'b0000;i<=4'b0111;i=i+1)
begin
T[i]=Q[i]^C[i]^D[i];
Q[i+1]=(Q[i]&&C[i])||(Q[i]&&D[i])||(C[i]&&D[i]); end
if(T[7]==1)
begin
S[6:0]=~T[6:0]+7'B0000001;
S[7]=1;
end
else
S=T;
end
else if(B[7]==1)//B is negetive
begin
C=A;
D[6:0]=~B[6:0]+7'B0000001;
D[7]=1;
Cout=0;
for(i=4'b0000;i<=4'b0111;i=i+1)
begin
T[i]=Q[i]^C[i]^D[i];
Q[i+1]=(Q[i]&&C[i])||(Q[i]&&D[i])||(C[i]&&D[i]); end
if(T[7]==1)
begin
S[6:0]=~T[6:0]+7'B0000001;
S[7]=1;
end
else
S=T;
end
else
begin
C=A;
D=B;
for(i=4'b0000;i<=4'b0111;i=i+1)
begin
T[i]=Q[i]^C[i]^D[i];
Q[i+1]=(Q[i]&&C[i])||(Q[i]&&D[i])||(C[i]&&D[i]); end
if(Q[7]==1)
begin
S=8'B00000000;
Cout=1;
end
else
begin
S=T;
Cout=0;
end
end
end
endmodule