www.pudn.com > hmac-zy.rar > claa_32b.v, change:2006-07-05,size:2844b


module claa_32b(adder1,adder2,sum);
input [31:0] adder1;
input [31:0] adder2;

output [31:0] sum;

reg [31:0] sum;

reg [31:0] p;
reg [31:0] g;
reg [30:0] carry;
reg [6:0] P;
reg [6:0] G;

always @(adder1 or adder2 or p or g or carry or P or G)
begin
	p=adder1^adder2;
	g=adder1&adder2;
	carry[0]=g[0];
	carry[1]=p[1]&carry[0]|g[1];
	carry[2]=p[2]&carry[1]|g[2];
	G[0]=g[3]+(p[3]&g[2])+(p[3]&p[2]&g[1])+(p[3]&p[2]&p[1]&g[0]);
	P[0]=p[3]&p[2]&p[1]&p[0];
	carry[3]=G[0];
	carry[4]=p[4]&carry[3]|g[4];
	carry[5]=p[5]&carry[4]|g[5];
	carry[6]=p[6]&carry[5]|g[6];
	G[1]=g[7]+(p[7]&g[6])+(p[7]&p[6]&g[5])+(p[7]&p[6]&p[5]&g[4]);
	P[1]=p[7]&p[6]&p[5]&p[4];
	carry[7]=G[1]+(P[1]&carry[3]);
	carry[8]=p[8]&carry[7]|g[8];
	carry[9]=p[9]&carry[8]|g[9];
	carry[10]=p[10]&carry[9]|g[10];
	G[2]=g[11]+(p[11]&g[10])+(p[11]&p[10]&g[9])+(p[11]&p[10]&p[9]&g[8]);
	P[2]=p[11]&p[10]&p[9]&p[8];
	carry[11]=G[2]+(P[2]&carry[7]);
	carry[12]=p[12]&carry[11]|g[12];
	carry[13]=p[13]&carry[12]|g[13];
	carry[14]=p[14]&carry[13]|g[14];
	G[3]=g[15]+(p[15]&g[14])+(p[15]&p[14]&g[13])+(p[15]&p[14]&p[13]&g[12]);
	P[3]=p[15]&p[14]&p[13]&p[12];
//	carry[15]=G[3]+(P[3]&carry[11]);
	carry[15]=G[3]+(P[3]&G[2])+(P[3]&P[2]&G[1])+(P[3]&P[2]&P[1]&G[0]);
	carry[16]=p[16]&carry[15]|g[16];
	carry[17]=p[17]&carry[16]|g[17];
	carry[18]=p[18]&carry[17]|g[18];
	G[4]=g[19]+(p[19]&g[18])+(p[19]&p[18]&g[17])+(p[19]&p[18]&p[17]&g[16]);
	P[4]=p[19]&p[18]&p[17]&p[16];
	carry[19]=G[4]+(P[4]&carry[15]);
	carry[20]=p[20]&carry[19]|g[20];
	carry[21]=p[21]&carry[20]|g[21];
	carry[22]=p[22]&carry[21]|g[22];
	G[5]=g[23]+(p[23]&g[22])+(p[23]&p[22]&g[21])+(p[23]&p[22]&p[21]&g[20]);
	P[5]=p[23]&p[22]&p[21]&p[20];
	carry[23]=G[5]+(P[5]&carry[19]);
	carry[24]=p[24]&carry[23]|g[24];
	carry[25]=p[25]&carry[24]|g[25];
	carry[26]=p[26]&carry[25]|g[26];
	G[6]=g[27]+(p[27]&g[26])+(p[27]&p[26]&g[25])+(p[27]&p[26]&p[25]&g[24]);
	P[6]=p[27]&p[26]&p[25]&p[24];
	carry[27]=G[6]+(P[6]&carry[23]);
	carry[28]=p[28]&carry[27]|g[28];
	carry[29]=p[29]&carry[28]|g[29];
	carry[30]=p[30]&carry[29]|g[30];
	sum[0]=p[0];
	sum[1]=p[1]+carry[0];
	sum[2]=p[2]+carry[1];
	sum[3]=p[3]+carry[2];
	sum[4]=p[4]+carry[3];
	sum[5]=p[5]+carry[4];
	sum[6]=p[6]+carry[5];
	sum[7]=p[7]+carry[6];
	sum[8]=p[8]+carry[7];
	sum[9]=p[9]+carry[8];
	sum[10]=p[10]+carry[9];
	sum[11]=p[11]+carry[10];
	sum[12]=p[12]+carry[11];
	sum[13]=p[13]+carry[12];
	sum[14]=p[14]+carry[13];
	sum[15]=p[15]+carry[14];
	sum[16]=p[16]+carry[15];
	sum[17]=p[17]+carry[16];
	sum[18]=p[18]+carry[17];
	sum[19]=p[19]+carry[18];
	sum[20]=p[20]+carry[19];
	sum[21]=p[21]+carry[20];
	sum[22]=p[22]+carry[21];
	sum[23]=p[23]+carry[22];
	sum[24]=p[24]+carry[23];
	sum[25]=p[25]+carry[24];
	sum[26]=p[26]+carry[25];
	sum[27]=p[27]+carry[26];
	sum[28]=p[28]+carry[27];
	sum[29]=p[29]+carry[28];
	sum[30]=p[30]+carry[29];
	sum[31]=p[31]+carry[30];
end

endmodule