OpenCores
URL https://opencores.org/ocsvn/rsencoder/rsencoder/trunk

Subversion Repositories rsencoder

[/] [rsencoder/] [web_uploads/] [reed_solomon.v] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
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
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.