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

Subversion Repositories rs_decoder_31_19_6

[/] [rs_decoder_31_19_6/] [trunk/] [SCBLOCK.V] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 rud_dp
//*****************************************************************//
2
// Syndrome Computation                                            //
3
// This block consists mainly of 12 cells. Each cell computes      //
4
// syndrome value Si, for i=0,...,11.                              //
5
// At the end of received word block, all cells store the syndrome //
6
// values, while SC block set its flag (errdetect) if one or more  //
7
// syndrome values are not zero.                                   //
8
// Ref.: "High-speed VLSI Architecture for Parallel Reed-Solomon   //
9
//        Decoder", IEEE Trans. on VLSI, April 2003.               //
10
//*****************************************************************//
11
module SCblock(recword, clock1, clock2, active_sc, reset, syndvalue0,
12
               syndvalue1, syndvalue2, syndvalue3, syndvalue4,
13
               syndvalue5, syndvalue6, syndvalue7, syndvalue8,
14
               syndvalue9, syndvalue10, syndvalue11, errdetect,
15
               en_sccell, evalsynd, holdsynd);
16
 
17
input [4:0] recword;
18
input clock1, clock2, active_sc, reset, evalsynd, holdsynd, en_sccell;
19
output [4:0] syndvalue0, syndvalue1, syndvalue2, syndvalue3, syndvalue4,
20
             syndvalue5, syndvalue6, syndvalue7, syndvalue8, syndvalue9,
21
             syndvalue10, syndvalue11;
22
output errdetect;
23
 
24
reg errdetect;
25
reg [1:0] state, nxt_state;
26
parameter [1:0] st0=0, st1=1, st2=2;
27
 
28
always@(state or active_sc or evalsynd)
29
begin
30
    case(state)
31
        st0:   begin
32
               if(active_sc)
33
                  nxt_state <= st1;
34
               else
35
                  nxt_state <= st0;
36
               end
37
        st1:   begin
38
               if(evalsynd)
39
                  nxt_state <= st2;
40
               else
41
                  nxt_state <= st1;
42
               end
43
        st2:   nxt_state <= st0;
44
        default: nxt_state <= st0;
45
    endcase
46
end
47
 
48
always@(posedge clock2 or negedge reset)
49
begin
50
   if(~reset)
51
      state <= st0;
52
   else
53
      state <=  nxt_state;
54
end
55
 
56
always@(state or syndvalue0 or syndvalue1 or syndvalue2 or syndvalue3 or
57
        syndvalue4 or syndvalue5 or syndvalue6 or syndvalue7 or syndvalue8 or
58
        syndvalue9 or syndvalue10 or syndvalue11)
59
begin
60
    case(state)
61
        st0:   errdetect <= 0;
62
        st1:   errdetect <= 0;
63
        st2:   begin
64
               if (syndvalue0 || syndvalue1 || syndvalue2 || syndvalue3 ||
65
                   syndvalue4 || syndvalue5 || syndvalue6 || syndvalue7 ||
66
                   syndvalue8 || syndvalue9 || syndvalue10 || syndvalue11)
67
                  errdetect <= 1;
68
               else
69
                  errdetect <= 0;
70
               end
71
        default:errdetect = 0;
72
   endcase
73
end
74
 
75
syndcell_0 cell_0(recword, clock1, en_sccell, holdsynd, syndvalue0);
76
syndcell_1 cell_1(recword, clock1, en_sccell, holdsynd, syndvalue1);
77
syndcell_2 cell_2(recword, clock1, en_sccell, holdsynd, syndvalue2);
78
syndcell_3 cell_3(recword, clock1, en_sccell, holdsynd, syndvalue3);
79
syndcell_4 cell_4(recword, clock1, en_sccell, holdsynd, syndvalue4);
80
syndcell_5 cell_5(recword, clock1, en_sccell, holdsynd, syndvalue5);
81
syndcell_6 cell_6(recword, clock1, en_sccell, holdsynd, syndvalue6);
82
syndcell_7 cell_7(recword, clock1, en_sccell, holdsynd, syndvalue7);
83
syndcell_8 cell_8(recword, clock1, en_sccell, holdsynd, syndvalue8);
84
syndcell_9 cell_9(recword, clock1, en_sccell, holdsynd, syndvalue9);
85
syndcell_10 cell_10(recword, clock1, en_sccell, holdsynd, syndvalue10);
86
syndcell_11 cell_11(recword, clock1, en_sccell, holdsynd, syndvalue11);
87
 
88
endmodule
89
 
90
 
91
//*****************************/
92
// Syndrome Computation Cells //
93
//****************************//
94
 
95
//**************************************************//
96
//syndcell_0 computes R(alpha^19) for 31 clock cycles//
97
//**************************************************//
98
module syndcell_0(recword, clock, enable, hold, synvalue0);
99
 
100
input [0:4] recword;
101
input clock;
102
input enable, hold;
103
output [0:4] synvalue0;
104
 
105
wire [0:4] outreg;
106
wire [0:4] outadder;
107
wire [0:4] outmult;
108
 
109
//multiply recword with constant alpha^19
110
assign outmult[0] = outreg[3] ^ outreg[4];
111
assign outmult[1] = outreg[0] ^ outreg[4];
112
assign outmult[2] = (outreg[0] ^ outreg[1]) ^ (outreg[3] ^ outreg[4]);
113
assign outmult[3] = (outreg[1] ^ outreg[2]) ^ outreg[4];
114
assign outmult[4] = outreg[2] ^ outreg[3];
115
 
116
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
117
gfadder   adder(recword, outmult, outadder);
118
assign synvalue0 = outreg;
119
 
120
endmodule
121
 
122
//**************************************************//
123
//syndcell_1 computes R(alpha^20) for 31 clock cycles//
124
//**************************************************//
125
module syndcell_1(recword, clock, enable, hold, synvalue1);
126
 
127
input [0:4] recword;
128
input clock;
129
input enable, hold;
130
output [0:4] synvalue1;
131
 
132
wire [0:4] outreg;
133
wire [0:4] outadder;
134
wire [0:4] outmult;
135
 
136
//multiply recword with constant alpha^20
137
assign outmult[0] = outreg[2] ^ outreg[3];
138
assign outmult[1] = outreg[3] ^ outreg[4];
139
assign outmult[2] = (outreg[0] ^ outreg[4]) ^ (outreg[2] ^ outreg[3]);
140
assign outmult[3] = (outreg[0] ^ outreg[1]) ^ (outreg[3] ^ outreg[4]);
141
assign outmult[4] = (outreg[1] ^ outreg[2]) ^ outreg[4];
142
 
143
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
144
gfadder   adder(recword, outmult, outadder);
145
assign synvalue1 = outreg;
146
 
147
endmodule
148
 
149
//**************************************************//
150
//syndcell_2 computes R(alpha^21) for 31 clock cycles//
151
//**************************************************//
152
module syndcell_2(recword, clock, enable, hold, synvalue2);
153
 
154
input [0:4] recword;
155
input clock;
156
input enable, hold;
157
output [0:4] synvalue2;
158
 
159
wire [0:4] outreg;
160
wire [0:4] outadder;
161
wire [0:4] outmult;
162
 
163
//multiply recword with constant alpha^21
164
assign outmult[0] = (outreg[1] ^ outreg[2]) ^ outreg[4];
165
assign outmult[1] = outreg[2] ^ outreg[3];
166
assign outmult[2] = (outreg[1] ^ outreg[2]) ^ outreg[3];
167
assign outmult[3] = (outreg[0] ^ outreg[2]) ^ (outreg[3] ^ outreg[4]);
168
assign outmult[4] = (outreg[0] ^ outreg[1]) ^ (outreg[3] ^ outreg[4]);
169
 
170
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
171
gfadder   adder(recword, outmult, outadder);
172
assign synvalue2 = outreg;
173
 
174
endmodule
175
 
176
//**************************************************//
177
//syndcell_3 computes R(alpha^22) for 31 clock cycles//
178
//**************************************************//
179
module syndcell_3(recword, clock, enable, hold, synvalue3);
180
 
181
input [0:4] recword;
182
input clock;
183
input enable, hold;
184
output [0:4] synvalue3;
185
 
186
wire [0:4] outreg;
187
wire [0:4] outadder;
188
wire [0:4] outmult;
189
 
190
//multiply recword with constant alpha^22
191
assign outmult[0] = (outreg[0] ^ outreg[1]) ^ (outreg[3] ^ outreg[4]);
192
assign outmult[1] = (outreg[1] ^ outreg[2]) ^ outreg[4];
193
assign outmult[2] = (outreg[0] ^ outreg[1]) ^ (outreg[2] ^ outreg[4]);
194
assign outmult[3] = (outreg[1] ^ outreg[2]) ^ outreg[3];
195
assign outmult[4] = (outreg[0] ^ outreg[2]) ^ (outreg[3] ^ outreg[4]);
196
 
197
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
198
gfadder   adder(recword, outmult, outadder);
199
assign synvalue3 = outreg;
200
 
201
endmodule
202
 
203
//***************************************************//
204
//syndcell_4 computes R(alpha^23) for 31 clock cycles//
205
//**************************************************//
206
module syndcell_4(recword, clock, enable, hold, synvalue4);
207
 
208
input [0:4] recword;
209
input clock;
210
input enable, hold;
211
output [0:4] synvalue4;
212
 
213
wire [0:4] outreg;
214
wire [0:4] outadder;
215
wire [0:4] outmult;
216
 
217
//multiply recword with constant alpha^23
218
assign outmult[0] = (outreg[0] ^ outreg[2]) ^ (outreg[3] ^ outreg[4]);
219
assign outmult[1] = (outreg[0] ^ outreg[1]) ^ (outreg[3] ^ outreg[4]);
220
assign outmult[2] = (outreg[0] ^ outreg[1]) ^ outreg[3];
221
assign outmult[3] = (outreg[0] ^ outreg[1]) ^ (outreg[2] ^ outreg[4]);
222
assign outmult[4] = (outreg[1] ^ outreg[2]) ^ outreg[3];
223
 
224
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
225
gfadder   adder(recword, outmult, outadder);
226
assign synvalue4 = outreg;
227
 
228
endmodule
229
 
230
//***************************************************//
231
//syndcell_5 computes R(alpha^24) for 31 clock cycles//
232
//***************************************************//
233
module syndcell_5(recword, clock, enable, hold, synvalue5);
234
 
235
input [0:4] recword;
236
input clock;
237
input enable, hold;
238
output [0:4] synvalue5;
239
 
240
wire [0:4] outreg;
241
wire [0:4] outadder;
242
wire [0:4] outmult;
243
 
244
//multiply recword with constant alpha^24
245
assign outmult[0] = (outreg[1] ^ outreg[2]) ^ outreg[3];
246
assign outmult[1] = (outreg[0] ^ outreg[2]) ^ (outreg[3] ^ outreg[4]);
247
assign outmult[2] = (outreg[0] ^ outreg[2]) ^ outreg[4];
248
assign outmult[3] = (outreg[0] ^ outreg[1]) ^ outreg[3];
249
assign outmult[4] = (outreg[0] ^ outreg[1]) ^ (outreg[2] ^ outreg[4]);
250
 
251
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
252
gfadder   adder(recword, outmult, outadder);
253
assign synvalue5 = outreg;
254
 
255
endmodule
256
 
257
//***************************************************//
258
//syndcell_6 computes R(alpha^25) for 31 clock cycles//
259
//***************************************************//
260
module syndcell_6(recword, clock, enable, hold, synvalue6);
261
 
262
input [0:4] recword;
263
input clock;
264
input enable, hold;
265
output [0:4] synvalue6;
266
 
267
wire [0:4] outreg;
268
wire [0:4] outadder;
269
wire [0:4] outmult;
270
 
271
//multiply recword with constant alpha^25
272
assign outmult[0] = (outreg[0] ^ outreg[1]) ^ (outreg[2] ^ outreg[4]);
273
assign outmult[1] = (outreg[1] ^ outreg[2]) ^ outreg[3];
274
assign outmult[2] = outreg[1] ^ outreg[3];
275
assign outmult[3] = (outreg[0] ^ outreg[2]) ^ outreg[4];
276
assign outmult[4] = (outreg[0] ^ outreg[1]) ^ outreg[3];
277
 
278
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
279
gfadder   adder(recword, outmult, outadder);
280
assign synvalue6 = outreg;
281
 
282
endmodule
283
 
284
//***************************************************//
285
//syndcell_7 computes R(alpha^26) for 31 clock cycles//
286
//***************************************************//
287
module syndcell_7(recword, clock, enable, hold, synvalue7);
288
 
289
input [0:4] recword;
290
input clock;
291
input enable, hold;
292
output [0:4] synvalue7;
293
 
294
wire [0:4] outreg;
295
wire [0:4] outadder;
296
wire [0:4] outmult;
297
 
298
//multiply recword with constant alpha^26
299
assign outmult[0] = (outreg[0] ^ outreg[1]) ^ outreg[3];
300
assign outmult[1] = (outreg[0] ^ outreg[1]) ^ (outreg[2] ^ outreg[4]);
301
assign outmult[2] = outreg[0] ^ outreg[2];
302
assign outmult[3] = outreg[1] ^ outreg[3];
303
assign outmult[4] = (outreg[0] ^ outreg[2]) ^ outreg[4];
304
 
305
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
306
gfadder   adder(recword, outmult, outadder);
307
assign synvalue7 = outreg;
308
 
309
endmodule
310
 
311
//***************************************************//
312
//syndcell_8 computes R(alpha^27) for 31 clock cycles//
313
//***************************************************//
314
module syndcell_8(recword, clock, enable, hold, synvalue8);
315
 
316
input [0:4] recword;
317
input clock;
318
input enable, hold;
319
output [0:4] synvalue8;
320
 
321
wire [0:4] outreg;
322
wire [0:4] outadder;
323
wire [0:4] outmult;
324
 
325
//multiply recword with constant alpha^27
326
assign outmult[0] = (outreg[0] ^ outreg[2]) ^ outreg[4];
327
assign outmult[1] = (outreg[0] ^ outreg[1]) ^ outreg[3];
328
assign outmult[2] = outreg[1];
329
assign outmult[3] = outreg[0] ^ outreg[2];
330
assign outmult[4] = outreg[1] ^ outreg[3];
331
 
332
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
333
gfadder   adder(recword, outmult, outadder);
334
assign synvalue8 = outreg;
335
 
336
endmodule
337
 
338
//***************************************************//
339
//syndcell_9 computes R(alpha^28) for 31 clock cycles//
340
//***************************************************//
341
module syndcell_9(recword, clock, enable, hold, synvalue9);
342
 
343
input [0:4] recword;
344
input clock;
345
input enable, hold;
346
output [0:4] synvalue9;
347
 
348
wire [0:4] outreg;
349
wire [0:4] outadder;
350
wire [0:4] outmult;
351
 
352
//multiply recword with constant alpha^28
353
assign outmult[0] = outreg[1] ^ outreg[3];
354
assign outmult[1] = (outreg[0] ^ outreg[2]) ^ outreg[4];
355
assign outmult[2] = outreg[0];
356
assign outmult[3] = outreg[1];
357
assign outmult[4] = outreg[0] ^ outreg[2];
358
 
359
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
360
gfadder   adder(recword, outmult, outadder);
361
assign synvalue9 = outreg;
362
 
363
endmodule
364
 
365
//****************************************************//
366
//syndcell_10 computes R(alpha^29) for 31 clock cycles//
367
//****************************************************//
368
module syndcell_10(recword, clock, enable, hold, synvalue10);
369
 
370
input [0:4] recword;
371
input clock;
372
input enable, hold;
373
output [0:4] synvalue10;
374
 
375
wire [0:4] outreg;
376
wire [0:4] outadder;
377
wire [0:4] outmult;
378
 
379
//multiply recword with constant alpha^29
380
assign outmult[0] = outreg[0] ^ outreg[2];
381
assign outmult[1] = outreg[1] ^ outreg[3];
382
assign outmult[2] = outreg[4];
383
assign outmult[3] = outreg[0];
384
assign outmult[4] = outreg[1];
385
 
386
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
387
gfadder   adder(recword, outmult, outadder);
388
assign synvalue10 = outreg;
389
 
390
endmodule
391
 
392
//****************************************************//
393
//syndcell_11 computes R(alpha^30) for 31 clock cycles//
394
//****************************************************//
395
module syndcell_11(recword, clock, enable, hold, synvalue11);
396
 
397
input [0:4] recword;
398
input clock;
399
input enable, hold;
400
output [0:4] synvalue11;
401
 
402
wire [0:4] outreg;
403
wire [0:4] outadder;
404
wire [0:4] outmult;
405
 
406
//multiply recword with constant alpha^30
407
assign outmult[0] = outreg[1];
408
assign outmult[1] = outreg[0] ^ outreg[2];
409
assign outmult[2] = outreg[3];
410
assign outmult[3] = outreg[4];
411
assign outmult[4] = outreg[0];
412
 
413
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
414
gfadder   adder(recword, outmult, outadder);
415
assign synvalue11 = outreg;
416
 
417
endmodule

powered by: WebSVN 2.1.0

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