You are on page 1of 6

module dec_golay1(r,s,c);

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;

wire [22:0] e[22:0];

wire [10:0] m[22:0];

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;

if(s== 11'b01011100011) c=r^(23'b00000000000000000000001);

else if (s==11'b10111000110) c=r^(23'b00000000000000000000010);

else if (s==11'b00101101111) c=r^(23'b00000000000000000000100);

else if (s==11'b01011011110) c=r^(23'b00000000000000000001000);

else if (s==11'b10110111100) c=r^(23'b00000000000000000010000);

else if (s==11'b00110011011) c=r^(23'b00000000000000000100000);

else if(s==11'b01100110110) c=r^(23'b00000000000000001000000);

else if(s==11'b11001101100) c=r^(23'b00000000000000010000000);

else if(s==11'b11000111011) c=r^(23'b00000000000000100000000);

else if(s==11'b11010010101) c=r^(23'b00000000000001000000000);


else if(s==11'b11111001001) c=r^(23'b00000000000010000000000);

else if(s==11'b10101110001) c=r^(23'b00000000000100000000000);

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

You might also like