8位带符号数全加器 verilog

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档