www.pudn.com > rs-codec(255-223).rar > encode.v


// -------------------------------------------------------------------------
//Reed-Solomon Encoder
//Copyright (C) Tue Apr  2 17:06:57 2002
//by Ming-Han Lei(hendrik@humanistic.org)
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU Lesser General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU Lesser General Public License for more details.
//
//You should have received a copy of the GNU Lesser General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
// --------------------------------------------------------------------------

module rs_enc_m0 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[3] ^ x[5] ^ x[6];
		y[1] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[5] ^ x[7];
		y[2] = x[1] ^ x[2] ^ x[3] ^ x[4];
		y[3] = x[0] ^ x[2] ^ x[3] ^ x[4] ^ x[5];
		y[4] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[5] ^ x[6];
		y[5] = x[0] ^ x[1] ^ x[2] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[6] = x[1] ^ x[2] ^ x[3] ^ x[5] ^ x[6] ^ x[7];
		y[7] = x[2] ^ x[4] ^ x[5] ^ x[7];
	end
endmodule

module rs_enc_m1 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[1] ^ x[2] ^ x[4] ^ x[5];
		y[1] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[6];
		y[2] = x[0] ^ x[7];
		y[3] = x[1];
		y[4] = x[0] ^ x[2];
		y[5] = x[0] ^ x[1] ^ x[3];
		y[6] = x[1] ^ x[2] ^ x[4];
		y[7] = x[0] ^ x[1] ^ x[3] ^ x[4];
	end
endmodule

module rs_enc_m2 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5];
		y[1] = x[0] ^ x[6];
		y[2] = x[0] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[7];
		y[3] = x[1] ^ x[3] ^ x[4] ^ x[5] ^ x[6];
		y[4] = x[2] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[5] = x[3] ^ x[5] ^ x[6] ^ x[7];
		y[6] = x[4] ^ x[6] ^ x[7];
		y[7] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[7];
	end
endmodule

module rs_enc_m3 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[2] ^ x[4] ^ x[5] ^ x[7];
		y[1] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[6] ^ x[7];
		y[2] = x[0] ^ x[1] ^ x[3];
		y[3] = x[1] ^ x[2] ^ x[4];
		y[4] = x[0] ^ x[2] ^ x[3] ^ x[5];
		y[5] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[6];
		y[6] = x[0] ^ x[1] ^ x[2] ^ x[4] ^ x[5] ^ x[7];
		y[7] = x[1] ^ x[3] ^ x[4] ^ x[6] ^ x[7];
	end
endmodule

module rs_enc_m4 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[5] ^ x[7];
		y[1] = x[2] ^ x[5] ^ x[6] ^ x[7];
		y[2] = x[0] ^ x[1] ^ x[3] ^ x[5] ^ x[6];
		y[3] = x[0] ^ x[1] ^ x[2] ^ x[4] ^ x[6] ^ x[7];
		y[4] = x[1] ^ x[2] ^ x[3] ^ x[5] ^ x[7];
		y[5] = x[2] ^ x[3] ^ x[4] ^ x[6];
		y[6] = x[0] ^ x[3] ^ x[4] ^ x[5] ^ x[7];
		y[7] = x[0] ^ x[4] ^ x[6] ^ x[7];
	end
endmodule

module rs_enc_m5 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[4];
		y[1] = x[0] ^ x[2] ^ x[4] ^ x[5];
		y[2] = x[3] ^ x[4] ^ x[5] ^ x[6];
		y[3] = x[0] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[4] = x[0] ^ x[1] ^ x[5] ^ x[6] ^ x[7];
		y[5] = x[1] ^ x[2] ^ x[6] ^ x[7];
		y[6] = x[0] ^ x[2] ^ x[3] ^ x[7];
		y[7] = x[0] ^ x[3];
	end
endmodule

module rs_enc_m6 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[2] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[1] = x[0] ^ x[3] ^ x[4];
		y[2] = x[2] ^ x[6] ^ x[7];
		y[3] = x[3] ^ x[7];
		y[4] = x[0] ^ x[4];
		y[5] = x[0] ^ x[1] ^ x[5];
		y[6] = x[1] ^ x[2] ^ x[6];
		y[7] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[5] ^ x[6];
	end
endmodule

module rs_enc_m7 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[3] ^ x[5] ^ x[6] ^ x[7];
		y[1] = x[0] ^ x[2] ^ x[3] ^ x[4] ^ x[5];
		y[2] = x[4] ^ x[7];
		y[3] = x[0] ^ x[5];
		y[4] = x[0] ^ x[1] ^ x[6];
		y[5] = x[0] ^ x[1] ^ x[2] ^ x[7];
		y[6] = x[0] ^ x[1] ^ x[2] ^ x[3];
		y[7] = x[0] ^ x[2] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
	end
endmodule

module rs_enc_m8 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[6];
		y[1] = x[2] ^ x[6] ^ x[7];
		y[2] = x[0] ^ x[1] ^ x[3] ^ x[6] ^ x[7];
		y[3] = x[1] ^ x[2] ^ x[4] ^ x[7];
		y[4] = x[2] ^ x[3] ^ x[5];
		y[5] = x[3] ^ x[4] ^ x[6];
		y[6] = x[0] ^ x[4] ^ x[5] ^ x[7];
		y[7] = x[0] ^ x[5];
	end
endmodule

module rs_enc_m9 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[1] ^ x[2] ^ x[5] ^ x[7];
		y[1] = x[1] ^ x[3] ^ x[5] ^ x[6] ^ x[7];
		y[2] = x[0] ^ x[1] ^ x[4] ^ x[5] ^ x[6];
		y[3] = x[0] ^ x[1] ^ x[2] ^ x[5] ^ x[6] ^ x[7];
		y[4] = x[1] ^ x[2] ^ x[3] ^ x[6] ^ x[7];
		y[5] = x[0] ^ x[2] ^ x[3] ^ x[4] ^ x[7];
		y[6] = x[1] ^ x[3] ^ x[4] ^ x[5];
		y[7] = x[0] ^ x[1] ^ x[4] ^ x[6] ^ x[7];
	end
endmodule

module rs_enc_m10 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[1] ^ x[3] ^ x[4] ^ x[7];
		y[1] = x[1] ^ x[2] ^ x[3] ^ x[5] ^ x[7];
		y[2] = x[1] ^ x[2] ^ x[6] ^ x[7];
		y[3] = x[0] ^ x[2] ^ x[3] ^ x[7];
		y[4] = x[1] ^ x[3] ^ x[4];
		y[5] = x[0] ^ x[2] ^ x[4] ^ x[5];
		y[6] = x[0] ^ x[1] ^ x[3] ^ x[5] ^ x[6];
		y[7] = x[0] ^ x[2] ^ x[3] ^ x[6];
	end
endmodule

module rs_enc_m11 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[2] ^ x[3] ^ x[4] ^ x[6] ^ x[7];
		y[1] = x[2] ^ x[5] ^ x[6];
		y[2] = x[0] ^ x[2] ^ x[4];
		y[3] = x[0] ^ x[1] ^ x[3] ^ x[5];
		y[4] = x[1] ^ x[2] ^ x[4] ^ x[6];
		y[5] = x[2] ^ x[3] ^ x[5] ^ x[7];
		y[6] = x[0] ^ x[3] ^ x[4] ^ x[6];
		y[7] = x[1] ^ x[2] ^ x[3] ^ x[5] ^ x[6];
	end
endmodule

module rs_enc_m12 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[1] ^ x[3];
		y[1] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4];
		y[2] = x[2] ^ x[4] ^ x[5];
		y[3] = x[3] ^ x[5] ^ x[6];
		y[4] = x[0] ^ x[4] ^ x[6] ^ x[7];
		y[5] = x[0] ^ x[1] ^ x[5] ^ x[7];
		y[6] = x[0] ^ x[1] ^ x[2] ^ x[6];
		y[7] = x[0] ^ x[2] ^ x[7];
	end
endmodule

module rs_enc_m13 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[2] ^ x[3] ^ x[6] ^ x[7];
		y[1] = x[2] ^ x[4] ^ x[6];
		y[2] = x[0] ^ x[2] ^ x[5] ^ x[6];
		y[3] = x[1] ^ x[3] ^ x[6] ^ x[7];
		y[4] = x[0] ^ x[2] ^ x[4] ^ x[7];
		y[5] = x[1] ^ x[3] ^ x[5];
		y[6] = x[0] ^ x[2] ^ x[4] ^ x[6];
		y[7] = x[1] ^ x[2] ^ x[5] ^ x[6];
	end
endmodule

module rs_enc_m14 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[5];
		y[1] = x[1] ^ x[5] ^ x[6];
		y[2] = x[0] ^ x[2] ^ x[5] ^ x[6] ^ x[7];
		y[3] = x[0] ^ x[1] ^ x[3] ^ x[6] ^ x[7];
		y[4] = x[1] ^ x[2] ^ x[4] ^ x[7];
		y[5] = x[2] ^ x[3] ^ x[5];
		y[6] = x[3] ^ x[4] ^ x[6];
		y[7] = x[4] ^ x[7];
	end
endmodule

module rs_enc_m15 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[7];
		y[1] = x[6] ^ x[7];
		y[2] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5];
		y[3] = x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6];
		y[4] = x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[5] = x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[6] = x[4] ^ x[5] ^ x[6] ^ x[7];
		y[7] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[6];
	end
endmodule

module rs_enc_m16 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[1] = x[0] ^ x[1];
		y[2] = x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[3] = x[4] ^ x[5] ^ x[6] ^ x[7];
		y[4] = x[5] ^ x[6] ^ x[7];
		y[5] = x[6] ^ x[7];
		y[6] = x[7];
		y[7] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
	end
endmodule

module rs_enc_m17 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[5];
		y[1] = x[1] ^ x[5] ^ x[6];
		y[2] = x[0] ^ x[2] ^ x[5] ^ x[6] ^ x[7];
		y[3] = x[0] ^ x[1] ^ x[3] ^ x[6] ^ x[7];
		y[4] = x[1] ^ x[2] ^ x[4] ^ x[7];
		y[5] = x[2] ^ x[3] ^ x[5];
		y[6] = x[3] ^ x[4] ^ x[6];
		y[7] = x[4] ^ x[7];
	end
endmodule

module rs_enc_m18 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[1] ^ x[3] ^ x[5];
		y[1] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6];
		y[2] = x[0] ^ x[2] ^ x[4] ^ x[6] ^ x[7];
		y[3] = x[0] ^ x[1] ^ x[3] ^ x[5] ^ x[7];
		y[4] = x[0] ^ x[1] ^ x[2] ^ x[4] ^ x[6];
		y[5] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[5] ^ x[7];
		y[6] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[6];
		y[7] = x[0] ^ x[2] ^ x[4] ^ x[7];
	end
endmodule

module rs_enc_m19 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[2] ^ x[4] ^ x[5] ^ x[6];
		y[1] = x[3] ^ x[4] ^ x[7];
		y[2] = x[1] ^ x[2] ^ x[6];
		y[3] = x[2] ^ x[3] ^ x[7];
		y[4] = x[0] ^ x[3] ^ x[4];
		y[5] = x[0] ^ x[1] ^ x[4] ^ x[5];
		y[6] = x[1] ^ x[2] ^ x[5] ^ x[6];
		y[7] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[5] ^ x[7];
	end
endmodule

module rs_enc_m20 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[3] ^ x[6];
		y[1] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[6] ^ x[7];
		y[2] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[3] = x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[4] = x[0] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[5] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[6] = x[1] ^ x[2] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[7] = x[2] ^ x[5] ^ x[7];
	end
endmodule

module rs_enc_m21 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[2] ^ x[5] ^ x[6] ^ x[7];
		y[1] = x[0] ^ x[3] ^ x[5];
		y[2] = x[2] ^ x[4] ^ x[5] ^ x[7];
		y[3] = x[0] ^ x[3] ^ x[5] ^ x[6];
		y[4] = x[1] ^ x[4] ^ x[6] ^ x[7];
		y[5] = x[0] ^ x[2] ^ x[5] ^ x[7];
		y[6] = x[1] ^ x[3] ^ x[6];
		y[7] = x[0] ^ x[1] ^ x[4] ^ x[5] ^ x[6];
	end
endmodule

module rs_enc_m22 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[2] ^ x[4] ^ x[5] ^ x[7];
		y[1] = x[3] ^ x[4] ^ x[6] ^ x[7];
		y[2] = x[0] ^ x[1] ^ x[2];
		y[3] = x[1] ^ x[2] ^ x[3];
		y[4] = x[0] ^ x[2] ^ x[3] ^ x[4];
		y[5] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[5];
		y[6] = x[1] ^ x[2] ^ x[4] ^ x[5] ^ x[6];
		y[7] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[6];
	end
endmodule

module rs_enc_m23 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[5] ^ x[6];
		y[1] = x[4] ^ x[5] ^ x[7];
		y[2] = x[1] ^ x[2] ^ x[3];
		y[3] = x[0] ^ x[2] ^ x[3] ^ x[4];
		y[4] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[5];
		y[5] = x[1] ^ x[2] ^ x[4] ^ x[5] ^ x[6];
		y[6] = x[2] ^ x[3] ^ x[5] ^ x[6] ^ x[7];
		y[7] = x[0] ^ x[1] ^ x[2] ^ x[4] ^ x[5] ^ x[7];
	end
endmodule

module rs_enc_m24 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[5] ^ x[7];
		y[1] = x[2] ^ x[3] ^ x[6] ^ x[7];
		y[2] = x[0] ^ x[1] ^ x[5];
		y[3] = x[1] ^ x[2] ^ x[6];
		y[4] = x[2] ^ x[3] ^ x[7];
		y[5] = x[0] ^ x[3] ^ x[4];
		y[6] = x[0] ^ x[1] ^ x[4] ^ x[5];
		y[7] = x[0] ^ x[2] ^ x[3] ^ x[4] ^ x[6] ^ x[7];
	end
endmodule

module rs_enc_m25 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[2] ^ x[4] ^ x[7];
		y[1] = x[3] ^ x[4] ^ x[5] ^ x[7];
		y[2] = x[1] ^ x[2] ^ x[5] ^ x[6] ^ x[7];
		y[3] = x[0] ^ x[2] ^ x[3] ^ x[6] ^ x[7];
		y[4] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[7];
		y[5] = x[0] ^ x[1] ^ x[2] ^ x[4] ^ x[5];
		y[6] = x[1] ^ x[2] ^ x[3] ^ x[5] ^ x[6];
		y[7] = x[0] ^ x[1] ^ x[3] ^ x[6];
	end
endmodule

module rs_enc_m26 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[3] ^ x[5];
		y[1] = x[3] ^ x[4] ^ x[5] ^ x[6];
		y[2] = x[0] ^ x[3] ^ x[4] ^ x[6] ^ x[7];
		y[3] = x[0] ^ x[1] ^ x[4] ^ x[5] ^ x[7];
		y[4] = x[0] ^ x[1] ^ x[2] ^ x[5] ^ x[6];
		y[5] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[6] ^ x[7];
		y[6] = x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[7];
		y[7] = x[2] ^ x[4];
	end
endmodule

module rs_enc_m27 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[1] ^ x[3];
		y[1] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4];
		y[2] = x[2] ^ x[4] ^ x[5];
		y[3] = x[3] ^ x[5] ^ x[6];
		y[4] = x[0] ^ x[4] ^ x[6] ^ x[7];
		y[5] = x[0] ^ x[1] ^ x[5] ^ x[7];
		y[6] = x[0] ^ x[1] ^ x[2] ^ x[6];
		y[7] = x[0] ^ x[2] ^ x[7];
	end
endmodule

module rs_enc_m28 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[6] ^ x[7];
		y[1] = x[0] ^ x[4] ^ x[6];
		y[2] = x[0] ^ x[2] ^ x[3] ^ x[5] ^ x[6];
		y[3] = x[1] ^ x[3] ^ x[4] ^ x[6] ^ x[7];
		y[4] = x[0] ^ x[2] ^ x[4] ^ x[5] ^ x[7];
		y[5] = x[1] ^ x[3] ^ x[5] ^ x[6];
		y[6] = x[2] ^ x[4] ^ x[6] ^ x[7];
		y[7] = x[0] ^ x[1] ^ x[2] ^ x[5] ^ x[6];
	end
endmodule

module rs_enc_m29 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[1] ^ x[2] ^ x[3] ^ x[5];
		y[1] = x[0] ^ x[1] ^ x[4] ^ x[5] ^ x[6];
		y[2] = x[0] ^ x[3] ^ x[6] ^ x[7];
		y[3] = x[0] ^ x[1] ^ x[4] ^ x[7];
		y[4] = x[0] ^ x[1] ^ x[2] ^ x[5];
		y[5] = x[1] ^ x[2] ^ x[3] ^ x[6];
		y[6] = x[2] ^ x[3] ^ x[4] ^ x[7];
		y[7] = x[0] ^ x[1] ^ x[2] ^ x[4];
	end
endmodule

module rs_enc_m30 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[3] ^ x[5] ^ x[7];
		y[1] = x[0] ^ x[1] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[2] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[6];
		y[3] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[7];
		y[4] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6];
		y[5] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[6] = x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[7] = x[2] ^ x[4] ^ x[6];
	end
endmodule

module rs_enc_m31 (y, x);
	input [7:0] x;
	output [7:0] y;
	reg [7:0] y;
	always @ (x)
	begin
		y[0] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[6];
		y[1] = x[4] ^ x[6] ^ x[7];
		y[2] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[5] ^ x[6] ^ x[7];
		y[3] = x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[6] ^ x[7];
		y[4] = x[0] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[7];
		y[5] = x[1] ^ x[3] ^ x[4] ^ x[5] ^ x[6];
		y[6] = x[2] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		y[7] = x[0] ^ x[1] ^ x[2] ^ x[5] ^ x[7];
	end
endmodule

module encode (y, x, enable, data, clk, clrn);
	input [7:0] x;
	input clk, clrn, enable, data;
	output [7:0] y;
	reg [7:0] y;

	wire [7:0] scale0;
	wire [7:0] scale1;
	wire [7:0] scale2;
	wire [7:0] scale3;
	wire [7:0] scale4;
	wire [7:0] scale5;
	wire [7:0] scale6;
	wire [7:0] scale7;
	wire [7:0] scale8;
	wire [7:0] scale9;
	wire [7:0] scale10;
	wire [7:0] scale11;
	wire [7:0] scale12;
	wire [7:0] scale13;
	wire [7:0] scale14;
	wire [7:0] scale15;
	wire [7:0] scale16;
	wire [7:0] scale17;
	wire [7:0] scale18;
	wire [7:0] scale19;
	wire [7:0] scale20;
	wire [7:0] scale21;
	wire [7:0] scale22;
	wire [7:0] scale23;
	wire [7:0] scale24;
	wire [7:0] scale25;
	wire [7:0] scale26;
	wire [7:0] scale27;
	wire [7:0] scale28;
	wire [7:0] scale29;
	wire [7:0] scale30;
	wire [7:0] scale31;
	reg [7:0] mem0;
	reg [7:0] mem1;
	reg [7:0] mem2;
	reg [7:0] mem3;
	reg [7:0] mem4;
	reg [7:0] mem5;
	reg [7:0] mem6;
	reg [7:0] mem7;
	reg [7:0] mem8;
	reg [7:0] mem9;
	reg [7:0] mem10;
	reg [7:0] mem11;
	reg [7:0] mem12;
	reg [7:0] mem13;
	reg [7:0] mem14;
	reg [7:0] mem15;
	reg [7:0] mem16;
	reg [7:0] mem17;
	reg [7:0] mem18;
	reg [7:0] mem19;
	reg [7:0] mem20;
	reg [7:0] mem21;
	reg [7:0] mem22;
	reg [7:0] mem23;
	reg [7:0] mem24;
	reg [7:0] mem25;
	reg [7:0] mem26;
	reg [7:0] mem27;
	reg [7:0] mem28;
	reg [7:0] mem29;
	reg [7:0] mem30;
	reg [7:0] mem31;
	reg [7:0] feedback;

	rs_enc_m0 m0 (scale0, feedback);
	rs_enc_m1 m1 (scale1, feedback);
	rs_enc_m2 m2 (scale2, feedback);
	rs_enc_m3 m3 (scale3, feedback);
	rs_enc_m4 m4 (scale4, feedback);
	rs_enc_m5 m5 (scale5, feedback);
	rs_enc_m6 m6 (scale6, feedback);
	rs_enc_m7 m7 (scale7, feedback);
	rs_enc_m8 m8 (scale8, feedback);
	rs_enc_m9 m9 (scale9, feedback);
	rs_enc_m10 m10 (scale10, feedback);
	rs_enc_m11 m11 (scale11, feedback);
	rs_enc_m12 m12 (scale12, feedback);
	rs_enc_m13 m13 (scale13, feedback);
	rs_enc_m14 m14 (scale14, feedback);
	rs_enc_m15 m15 (scale15, feedback);
	rs_enc_m16 m16 (scale16, feedback);
	rs_enc_m17 m17 (scale17, feedback);
	rs_enc_m18 m18 (scale18, feedback);
	rs_enc_m19 m19 (scale19, feedback);
	rs_enc_m20 m20 (scale20, feedback);
	rs_enc_m21 m21 (scale21, feedback);
	rs_enc_m22 m22 (scale22, feedback);
	rs_enc_m23 m23 (scale23, feedback);
	rs_enc_m24 m24 (scale24, feedback);
	rs_enc_m25 m25 (scale25, feedback);
	rs_enc_m26 m26 (scale26, feedback);
	rs_enc_m27 m27 (scale27, feedback);
	rs_enc_m28 m28 (scale28, feedback);
	rs_enc_m29 m29 (scale29, feedback);
	rs_enc_m30 m30 (scale30, feedback);
	rs_enc_m31 m31 (scale31, feedback);

	always @ (posedge clk or negedge clrn)
	begin
		if (~clrn)
		begin
			mem0 <= 0;
			mem1 <= 0;
			mem2 <= 0;
			mem3 <= 0;
			mem4 <= 0;
			mem5 <= 0;
			mem6 <= 0;
			mem7 <= 0;
			mem8 <= 0;
			mem9 <= 0;
			mem10 <= 0;
			mem11 <= 0;
			mem12 <= 0;
			mem13 <= 0;
			mem14 <= 0;
			mem15 <= 0;
			mem16 <= 0;
			mem17 <= 0;
			mem18 <= 0;
			mem19 <= 0;
			mem20 <= 0;
			mem21 <= 0;
			mem22 <= 0;
			mem23 <= 0;
			mem24 <= 0;
			mem25 <= 0;
			mem26 <= 0;
			mem27 <= 0;
			mem28 <= 0;
			mem29 <= 0;
			mem30 <= 0;
			mem31 <= 0;
		end
		else if (enable)
		begin
			mem31 <= mem30 ^ scale31;
			mem30 <= mem29 ^ scale30;
			mem29 <= mem28 ^ scale29;
			mem28 <= mem27 ^ scale28;
			mem27 <= mem26 ^ scale27;
			mem26 <= mem25 ^ scale26;
			mem25 <= mem24 ^ scale25;
			mem24 <= mem23 ^ scale24;
			mem23 <= mem22 ^ scale23;
			mem22 <= mem21 ^ scale22;
			mem21 <= mem20 ^ scale21;
			mem20 <= mem19 ^ scale20;
			mem19 <= mem18 ^ scale19;
			mem18 <= mem17 ^ scale18;
			mem17 <= mem16 ^ scale17;
			mem16 <= mem15 ^ scale16;
			mem15 <= mem14 ^ scale15;
			mem14 <= mem13 ^ scale14;
			mem13 <= mem12 ^ scale13;
			mem12 <= mem11 ^ scale12;
			mem11 <= mem10 ^ scale11;
			mem10 <= mem9 ^ scale10;
			mem9 <= mem8 ^ scale9;
			mem8 <= mem7 ^ scale8;
			mem7 <= mem6 ^ scale7;
			mem6 <= mem5 ^ scale6;
			mem5 <= mem4 ^ scale5;
			mem4 <= mem3 ^ scale4;
			mem3 <= mem2 ^ scale3;
			mem2 <= mem1 ^ scale2;
			mem1 <= mem0 ^ scale1;
			mem0 <= scale0;
		end
	end

	always @ (data or x or mem31)
		if (data) feedback = x ^ mem31;
		else feedback = 0;

	always @ (data or x or mem31)
		if (data) y = x;
		else y = mem31;

endmodule