1 |
6 |
root |
/////////////////////////////////////////////////////////////////////
|
2 |
|
|
//// ////
|
3 |
|
|
//// High Speed Reed Solomon Encoder ////
|
4 |
|
|
//// ////
|
5 |
|
|
//// ////
|
6 |
|
|
//// Author: Rajesh Pathak ////
|
7 |
|
|
//// rajesh_99@opencores.org ////
|
8 |
|
|
//// ////
|
9 |
|
|
//// ////
|
10 |
|
|
//// Downloaded from: http://www.opencores.org ////
|
11 |
|
|
//// ////
|
12 |
|
|
/////////////////////////////////////////////////////////////////////
|
13 |
|
|
//// ////
|
14 |
|
|
//// Copyright (C) 2003 Rajesh Pathak ////
|
15 |
|
|
//// rajesh_99@netzero.net ////
|
16 |
|
|
//// Exponentiation Technology ////
|
17 |
|
|
//// ////
|
18 |
|
|
//// This source file may be used and distributed without ////
|
19 |
|
|
//// restriction provided that this copyright statement is not ////
|
20 |
|
|
//// removed from the file and that any derivative work contains ////
|
21 |
|
|
//// the original copyright notice and the associated disclaimer.////
|
22 |
|
|
//// ////
|
23 |
|
|
//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
|
24 |
|
|
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
|
25 |
|
|
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
|
26 |
|
|
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
|
27 |
|
|
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
|
28 |
|
|
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
|
29 |
|
|
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
|
30 |
|
|
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
|
31 |
|
|
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
|
32 |
|
|
//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
|
33 |
|
|
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
|
34 |
|
|
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
|
35 |
|
|
//// POSSIBILITY OF SUCH DAMAGE. ////
|
36 |
|
|
//// ////
|
37 |
|
|
/////////////////////////////////////////////////////////////////////
|
38 |
|
|
|
39 |
|
|
|
40 |
|
|
|
41 |
|
|
module rs_encode(datain, valid, gin0, gin1, gin2, gin3, gin4, gin5, gin6, gin7, gin8,
|
42 |
|
|
gin9, gin10, gin11, gin12, gin13, gin14, gin15, q0, q1, q2, q3, q4, q5, q6, q7,
|
43 |
|
|
q8, q9, q10, q11, q12, q13, q14, q15, rst, clkin);
|
44 |
|
|
input clkin;
|
45 |
|
|
input valid;
|
46 |
|
|
input rst;
|
47 |
|
|
input [7:0] datain;
|
48 |
|
|
output [7:0] q0;
|
49 |
|
|
output [7:0] q1;
|
50 |
|
|
output [7:0] q2;
|
51 |
|
|
output [7:0] q3;
|
52 |
|
|
wire [7:0] m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15;
|
53 |
|
|
wire [7:0] m2;
|
54 |
|
|
wire [7:0] m1;
|
55 |
|
|
wire [7:0] m0;
|
56 |
|
|
wire [7:0] z0;
|
57 |
|
|
wire [7:0] z1;
|
58 |
|
|
wire [7:0] z2;
|
59 |
|
|
wire [7:0] z3, z4, z5, z6, z7, z8, z9, z10, z11, z12, z13, z14, z15;
|
60 |
|
|
input [7:0] gin0, gin1, gin2, gin3, gin4, gin5, gin6, gin7, gin8, gin9, gin10,
|
61 |
|
|
gin11, gin12, gin13, gin14, gin15;
|
62 |
|
|
wire [7:0] bb, fback;
|
63 |
|
|
wire clk;
|
64 |
|
|
output [7:0] q4, q5, q6, q7, q8, q9, q10, q11, q12, q13, q14, q15;
|
65 |
|
|
|
66 |
|
|
assign clk = clkin&valid;
|
67 |
|
|
|
68 |
|
|
FF b0(z0, q0, rst, clk);
|
69 |
|
|
FF b1(z1, q1, rst, clk);
|
70 |
|
|
FF b2(z2, q2, rst, clk);
|
71 |
|
|
FF b3(z3, q3, rst, clk);
|
72 |
|
|
|
73 |
|
|
FF b4(z4, q4, rst, clk);
|
74 |
|
|
FF b5(z5, q5, rst, clk);
|
75 |
|
|
FF b6(z6, q6, rst, clk);
|
76 |
|
|
FF b7(z7, q7, rst, clk);
|
77 |
|
|
|
78 |
|
|
FF b8(z8, q8, rst, clk);
|
79 |
|
|
FF b9(z9, q9, rst, clk);
|
80 |
|
|
FF b10(z10, q10, rst, clk);
|
81 |
|
|
FF b11(z11, q11, rst, clk);
|
82 |
|
|
|
83 |
|
|
FF b12(z12, q12, rst, clk);
|
84 |
|
|
FF b13(z13, q13, rst, clk);
|
85 |
|
|
FF b14(z14, q14, rst, clk);
|
86 |
|
|
FF b15(z15, q15, rst, clk);
|
87 |
|
|
|
88 |
|
|
assign bb = 8'b00000000;
|
89 |
|
|
GFADD a0(bb, m0, z0);
|
90 |
|
|
GFADD a1(q0, m1, z1);
|
91 |
|
|
GFADD a2(q1, m2, z2);
|
92 |
|
|
GFADD a3(q2, m3, z3);
|
93 |
|
|
GFADD a4(q3, m4, z4);
|
94 |
|
|
GFADD a5(q4, m5, z5);
|
95 |
|
|
GFADD a6(q5, m6, z6);
|
96 |
|
|
GFADD a7(q6, m7, z7);
|
97 |
|
|
GFADD a8(q7, m8, z8);
|
98 |
|
|
GFADD a9(q8, m9, z9);
|
99 |
|
|
GFADD a10(q9, m10, z10);
|
100 |
|
|
GFADD a11(q10, m11, z11);
|
101 |
|
|
GFADD a12(q11, m12, z12);
|
102 |
|
|
GFADD a13(q12, m13, z13);
|
103 |
|
|
GFADD a14(q13, m14, z14);
|
104 |
|
|
GFADD a15(q14, m15, z15);
|
105 |
|
|
|
106 |
|
|
|
107 |
|
|
|
108 |
|
|
assign fback = q15^datain;
|
109 |
|
|
|
110 |
|
|
GFMUL8 u0(fback, gin0, m0);
|
111 |
|
|
GFMUL8 u1(fback, gin1, m1);
|
112 |
|
|
GFMUL8 u2(fback, gin2, m2);
|
113 |
|
|
GFMUL8 u3(fback, gin3, m3);
|
114 |
|
|
|
115 |
|
|
GFMUL8 u4(fback, gin4, m4);
|
116 |
|
|
GFMUL8 u5(fback, gin5, m5);
|
117 |
|
|
GFMUL8 u6(fback, gin6, m6);
|
118 |
|
|
GFMUL8 u7(fback, gin7, m7);
|
119 |
|
|
|
120 |
|
|
GFMUL8 u8(fback, gin8, m8);
|
121 |
|
|
GFMUL8 u9(fback, gin9, m9);
|
122 |
|
|
GFMUL8 u10(fback, gin10, m10);
|
123 |
|
|
GFMUL8 u11(fback, gin11, m11);
|
124 |
|
|
|
125 |
|
|
GFMUL8 u12(fback, gin12, m12);
|
126 |
|
|
GFMUL8 u13(fback, gin13, m13);
|
127 |
|
|
GFMUL8 u14(fback, gin14, m14);
|
128 |
|
|
GFMUL8 u15(fback, gin15, m15);
|
129 |
|
|
|
130 |
|
|
endmodule
|
131 |
|
|
|
132 |
|
|
module GFADD(in1, in2, out);
|
133 |
|
|
input [7:0] in1;
|
134 |
|
|
input [7:0] in2;
|
135 |
|
|
output [7:0] out;
|
136 |
|
|
assign out = in1^in2;
|
137 |
|
|
endmodule
|
138 |
|
|
|
139 |
|
|
|
140 |
|
|
module FF(d, q, rst, clk);
|
141 |
|
|
input [7:0] d;
|
142 |
|
|
input clk;
|
143 |
|
|
output [7:0] q;
|
144 |
|
|
reg [7:0] out;
|
145 |
|
|
input rst;
|
146 |
|
|
|
147 |
|
|
always @(posedge clk or negedge rst)
|
148 |
|
|
if(~rst) out <= 8'b00000000; else
|
149 |
|
|
begin
|
150 |
|
|
out <= #1 d;
|
151 |
|
|
end
|
152 |
|
|
assign q = out;
|
153 |
|
|
endmodule
|
154 |
|
|
|
155 |
|
|
module GFMUL8(a, b, z);
|
156 |
|
|
input [7:0] a;
|
157 |
|
|
input [7:0] b;
|
158 |
|
|
output [7:0] z;
|
159 |
|
|
assign z[0] = b[0]&a[0]^b[1]&a[7]^b[2]&a[6]^b[3]&a[5]^b[4]&a[4]^b[5]&a[3]^b[5]&a[7]^b[6]&a[2]^b[6]&a[6]^b[6]&a[7]^b[7]&a[1]^b[7]&a[5]^b[7]&a[6]^b[7]&a[7];
|
160 |
|
|
assign z[1] = b[0]&a[1]^b[1]&a[0]^b[2]&a[7]^b[3]&a[6]^b[4]&a[5]^b[5]&a[4]^b[6]&a[3]^b[6]&a[7]^b[7]&a[2]^b[7]&a[6]^b[7]&a[7];
|
161 |
|
|
assign z[2] = b[0]&a[2]^b[1]&a[1]^b[1]&a[7]^b[2]&a[0]^b[2]&a[6]^b[3]&a[5]^b[3]&a[7]^b[4]&a[4]^b[4]&a[6]^b[5]&a[3]^b[5]&a[5]^b[5]&a[7]^b[6]&a[2]^b[6]&a[4]^b[6]&a[6]^b[6]&a[7]^b[7]&a[1]^b[7]&a[3]^b[7]&a[5]^b[7]&a[6];
|
162 |
|
|
assign z[3] = b[0]&a[3]^b[1]&a[2]^b[1]&a[7]^b[2]&a[1]^b[2]&a[6]^b[2]&a[7]^b[3]&a[0]^b[3]&a[5]^b[3]&a[6]^b[4]&a[4]^b[4]&a[5]^b[4]&a[7]^b[5]&a[3]^b[5]&a[4]^b[5]&a[6]^b[5]&a[7]^b[6]&a[2]^b[6]&a[3]^b[6]&a[5]^b[6]&a[6]^b[7]&a[1]^b[7]&a[2]^b[7]&a[4]^b[7]&a[5];
|
163 |
|
|
assign z[4] = b[0]&a[4]^b[1]&a[3]^b[1]&a[7]^b[2]&a[2]^b[2]&a[6]^b[2]&a[7]^b[3]&a[1]^b[3]&a[5]^b[3]&a[6]^b[3]&a[7]^b[4]&a[0]^b[4]&a[4]^b[4]&a[5]^b[4]&a[6]^b[5]&a[3]^b[5]&a[4]^b[5]&a[5]^b[6]&a[2]^b[6]&a[3]^b[6]&a[4]^b[7]&a[1]^b[7]&a[2]^b[7]&a[3]^b[7]&a[7];
|
164 |
|
|
assign z[5] = b[0]&a[5]^b[1]&a[4]^b[2]&a[3]^b[2]&a[7]^b[3]&a[2]^b[3]&a[6]^b[3]&a[7]^b[4]&a[1]^b[4]&a[5]^b[4]&a[6]^b[4]&a[7]^b[5]&a[0]^b[5]&a[4]^b[5]&a[5]^b[5]&a[6]^b[6]&a[3]^b[6]&a[4]^b[6]&a[5]^b[7]&a[2]^b[7]&a[3]^b[7]&a[4];
|
165 |
|
|
assign z[6] = b[0]&a[6]^b[1]&a[5]^b[2]&a[4]^b[3]&a[3]^b[3]&a[7]^b[4]&a[2]^b[4]&a[6]^b[4]&a[7]^b[5]&a[1]^b[5]&a[5]^b[5]&a[6]^b[5]&a[7]^b[6]&a[0]^b[6]&a[4]^b[6]&a[5]^b[6]&a[6]^b[7]&a[3]^b[7]&a[4]^b[7]&a[5];
|
166 |
|
|
assign z[7] = b[0]&a[7]^b[1]&a[6]^b[2]&a[5]^b[3]&a[4]^b[4]&a[3]^b[4]&a[7]^b[5]&a[2]^b[5]&a[6]^b[5]&a[7]^b[6]&a[1]^b[6]&a[5]^b[6]&a[6]^b[6]&a[7]^b[7]&a[0]^b[7]&a[4]^b[7]&a[5]^b[7]&a[6];
|
167 |
|
|
endmodule
|
168 |
|
|
|