Professional Documents
Culture Documents
input[22:0] r;
integer i=0,j=0,l=0,n=0;
output[10:0] s;
output [22:0] c;
reg[22:0] c,u;
integer k=0;
reg[10:0] x;
assign e[0]=23'b00000000000000000000001;
assign e[1]=23'b00000000000000000000010;
assign e[2]=23'b00000000000000000000100;
assign e[3]=23'b00000000000000000001000;
assign e[4]=23'b00000000000000000010000;
assign e[5]=23'b00000000000000000100000;
assign e[6]=23'b00000000000000001000000;
assign e[7]=23'b00000000000000010000000;
assign e[8]=23'b00000000000000100000000;
assign e[9]=23'b00000000000001000000000;
assign e[10]=23'b00000000000010000000000;
assign e[11]=23'b00000000000100000000000;
assign e[12]=23'b00000000001000000000000;
assign e[13]=23'b00000000010000000000000;
assign e[14]=23'b00000000100000000000000;
assign e[15]=23'b00000001000000000000000;
assign e[16]=23'b00000010000000000000000;
assign e[17]=23'b00000100000000000000000;
assign e[18]=23'b00001000000000000000000;
assign e[19]=23'b00010000000000000000000;
assign e[20]=23'b00100000000000000000000;
assign e[21]=23'b01000000000000000000000;
assign e[22]=23'b10000000000000000000000;
assign m[0]=11'b01011100011;
assign m[1]=11'b10111000110;
assign m[2]=11'b00101101111;
assign m[3]=11'b01011011110;
assign m[4]=11'b10110111100;
assign m[5]=11'b00110011011;
assign m[6]=11'b01100110110;
assign m[7]=11'b11001101100;
assign m[8]=11'b11000111011;
assign m[9]=11'b11010010101;
assign m[10]=11'b11111001001;
assign m[11]=11'b10101110001;
assign m[12]=11'b00000000001;
assign m[13]=11'b00000000010;
assign m[14]=11'b00000000100;
assign m[15]=11'b00000001000;
assign m[16]=11'b00000010000;
assign m[17]=11'b00000100000;
assign m[18]=11'b00001000000;
assign m[19]=11'b00010000000;
assign m[20]=11'b00100000000;
assign m[21]=11'b01000000000;
assign m[22]=11'b10000000000;
assign s[10]=r[22]^r[11]^r[10]^r[9]^r[8]^r[7]^r[4]^r[1];
assign s[9]=r[21]^r[10]^r[9]^r[8]^r[7]^r[6]^r[3]^r[0];
assign s[8]=r[20]^r[11]^r[10]^r[6]^r[5]^r[4]^r[2]^r[1];
assign s[7]=r[19]^r[10]^r[9]^r[5]^r[4]^r[3]^r[1]^r[0];
assign s[6]=r[18]^r[11]^r[10]^r[7]^r[3]^r[2]^r[1]^r[0];
assign s[5]=r[17]^r[11]^r[4]^r[9]^r[8]^r[7]^r[6]^r[2]^r[0];
assign s[4]=r[16]^r[11]^r[3]^r[8]^r[6]^r[5]^r[4];
assign s[3]=r[15]^r[9]^r[10]^r[7]^r[8]^r[5]^r[4]^r[3]^r[2];
assign s[2]=r[14]^r[7]^r[6]^r[1]^r[4]^r[3]^r[2];
assign s[1]=r[13]^r[9]^r[8]^r[5]^r[6]^r[3]^r[2]^r[1]^r[0];
assign s[0]=r[12]^r[10]^r[11]^r[5]^r[8]^r[2]^r[0];
always@(*)
begin
if(s==0)
c<=r;
else
begin
x=s;
while(x!=0)
begin
if(x[0]&1==1)
k=k+1;
x=x>>1;
end
if((k<3)|(k==3))
begin
u={13'b0000000000000,s[10:0]};
c=r^(u<<12);
end
else
begin
u<=23'b00000000000000000000000;
else
begin
for(i=0;((i<23)&&(l!=1));i=i+1)
begin
for(j=0;((j<23)&&(l!=1));j=j+1)
begin
if(s==(m[i]^m[j]))
begin
c=r^e[i]^e[j];
l=1;
end
else
begin
for(n=0;((n<23)&&(l!=1));n=n+1)
begin
if(s==(m[i]^m[j]^m[n]))
begin
l=1;
c=r^e[i]^e[j]^e[n];
end
end
end
end
end
end
end
end
end
endmodule