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

Subversion Repositories rsencoder

[/] [rsencoder/] [web_uploads/] [rs_testbench.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 teststim( );
42
wire  [7:0] q0, q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12, q13, q14,
43
q15;
44
 
45
reg clk, valid;
46
reg [7:0] datain;
47
wire[7:0] gin0, gin1, gin2, gin3, gin4, gin5, gin6, gin7, gin8, gin9, gin10,
48
gin11, gin12, gin13, gin14, gin15;
49
reg rst;
50
reg [31:0] tmp_reg1, tmp_reg2, tmp_reg3, tmp_reg4;
51
wire [7:0] fbck, in, m0, z0, gin, sdrome;
52
integer seed;
53
integer seed1;
54
initial begin
55
clk = 0;
56
rst = 1'b1;
57
datain = 8'h06;
58
#2 rst = 1'b0;
59
#1 rst = 1'b1;
60
 
61
//Start feeding message data here one  byte at every clock.
62
 
63
#1 datain =  8'h06;
64
valid = 1;
65
$dumpfile ("xxx.dump");
66
$dumpvars (2, teststim);
67
 
68
#10 datain =  8'hF0;
69
#10 datain =  8'h82;
70
#10 datain =  8'hEE;
71
#10 datain =  8'h71;
72
#10 datain =  8'h04;
73
#10 datain =  8'h24;
74
#10 datain =  8'h9A;
75
#10 datain =  8'hEA;
76
#10 datain =  8'h6E;
77
#10 datain =  8'hEF;
78
#10 datain =  8'hDD;
79
#10 datain = $random(seed1);
80
#10 datain = $random(seed);
81
#10 datain = $random(seed1);
82
#10 datain = $random(seed);
83
#10 datain = $random(seed1);
84
#10 datain = $random(seed);
85
#10 datain = $random(seed);
86
#10 datain =  8'hF0;
87
#10 datain =  8'hAC;
88
#10 datain =  8'h1C;
89
 
90
 
91
 
92
//Continue upto 239 bytes. Here only a partial list has been fed.
93
 
94
 
95
//End feeding message data. The registers contain parity bytes now. The parity and
96
//message bytes togather form code bytes.  
97
//From next clock cylcle on, the parity bytes generated is fed into the machine as if the 
98
//parity bytes are message bytes. In other words, the entire code polynomial is shifted
99
// into the machine. This will result in zero register values at the end of shift 
100
//sequence. Reason: code polynomial divides generator polynomial so the remainder should be zero.
101
 
102
//Feeding message polynomial followed by remainder polynomial implies code polynomial has been
103
//fed to the machine. This implies the contents of registers q15, q14, ...........q1. q0 contains
104
//the remainder of division between code polynomial and generator polynomial. The result should be
105
//all zero bytes. Check to see contents of q15........q0 are 8'h00.
106
 
107
 #4 tmp_reg1 = {q3, q2, q1, q0};
108
   tmp_reg2 = {q7, q6, q5, q4};
109
   tmp_reg3 = {q11, q10, q9, q8};
110
   tmp_reg4 = {q15, q14, q13, q12};
111
#6 datain = tmp_reg4[31:24];
112
#10 datain = tmp_reg4[23:16];
113
#10 datain = tmp_reg4[15:8];
114
#10 datain = tmp_reg4[7:0];
115
 
116
#10 datain = tmp_reg3[31:24];
117
#10 datain = tmp_reg3[23:16];
118
#10 datain = tmp_reg3[15:8];
119
#10 datain = tmp_reg3[7:0];
120
 
121
#10 datain = tmp_reg2[31:24];
122
#10 datain = tmp_reg2[23:16];
123
#10 datain = tmp_reg2[15:8];
124
#10 datain = tmp_reg2[7:0];
125
 
126
#10 datain = tmp_reg1[31:24];
127
#10 datain = tmp_reg1[23:16];
128
#10 datain = tmp_reg1[15:8];
129
#10 datain = tmp_reg1[7:0];
130
 
131
//Stop the state machine after the entire code polynomial is shifted, using valid signal. Pulling valid low will
132
// freeze the machine with its register contents.
133
 
134
#10 valid = 0;
135
#30 $finish;
136
end
137
 
138
always #5 clk = ~clk;
139
 
140
//assign generator polynomial co-efficients here. The generator polynomial is
141
//of form X^16+g15X^15+g14X^14 + ..................+g1X+g0;
142
//Each gi (i=0, 1, ...15) is an element of GF(2^8);
143
//Here they have been randomly assigned. Assign actual values.
144
 
145
assign gin0 = 8'b00010000;
146
assign gin1 = 8'hAB;
147
assign gin2 = 8'hCD;
148
assign gin3 = 8'h8E;
149
assign gin4 = 8'h93;
150
assign gin5=8'hAB; assign gin6=8'h8E; assign gin7=8'hCD;
151
assign gin8=8'hFA;
152
assign gin9=8'hEE; assign gin10=8'hFF; assign gin11=8'h0C; assign gin12=8'hAB;
153
assign gin13= 8'h26; assign gin14=8'h35; assign gin15=8'h89;
154
 
155
rs_encode U1(datain, valid, gin0, gin1, gin2, gin3, gin4, gin5, gin6, gin7, gin8, gin9,
156
gin10, gin11, gin12, gin13, gin14, gin15, q0, q1, q2, q3, q4, q5, q6, q7, q8,
157
q9, q10, q11, q12, q13, q14, q15, rst, clk);
158
endmodule
159
 
160
 

powered by: WebSVN 2.1.0

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