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

Subversion Repositories bch_configurable

[/] [bch_configurable/] [trunk/] [testbench/] [tb_encode.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 Success105
`timescale 1ns/100ps
2
module tb_encode
3
#(
4
parameter C_DWIDTH = 32,
5
parameter C_COEF_NUM = 2,
6
parameter C_PRIMPOLY_ORDER = 10,
7
parameter C_GENPOLY = 'h409,
8
parameter C_INPUT_NUM = 512,
9
parameter C_SEARCH_THREAD_NUM = 32,
10
parameter C_TOTALBIT_NUM = 100
11
)
12
(
13
input I_clk                      ,
14
input I_rst                      ,
15
input [C_DWIDTH-1:0] I_data      ,
16
input I_data_v                   ,
17
input I_data_sof                 ,
18
input I_data_eof                 ,
19
input [C_DWIDTH-1:0] I_data_ori  ,
20
input I_data_v_ori               ,
21
input I_data_sof_ori             ,
22
input I_data_eof_ori             ,
23
output reg [1:0] O_result
24
);
25
wire [C_DWIDTH-1:0] S_data  ;
26
wire [C_DWIDTH-1:0] S_data_d;
27
wire S_data_v               ;
28
wire S_data_sof             ;
29
wire S_data_eof             ;
30
wire [C_PRIMPOLY_ORDER*C_COEF_NUM-1:0] S_syndrome;
31
wire S_syndrome_v;
32
wire [C_PRIMPOLY_ORDER*C_COEF_NUM-1+C_PRIMPOLY_ORDER:0] S_err_pos;
33
wire [C_SEARCH_THREAD_NUM-1:0] S_ecc;
34
wire S_ecc_v;
35
wire S_ecc_sof;
36
wire S_ecc_eof;
37
wire [C_DWIDTH-1:0] S_data_cor;
38
wire S_data_v_cor;
39
wire S_data_sof_cor;
40
wire S_data_eof_cor;
41
 
42
reg [C_DWIDTH-1:0] S_ram_ori [1023:0];
43
reg [9:0] S_ram_ori_waddr = 0;
44
reg [9:0] S_ram_ori_raddr = 0;
45
reg S_data_eof_cor_d = 0;
46
reg [C_DWIDTH-1:0] S_ram_ori_dout = 0;
47
reg S_data_v_cor_d = 0;
48
reg [C_DWIDTH-1:0] S_data_cor_d = 0;
49
reg S_data_eof_ori = 0;
50
 
51
always @(posedge I_clk)
52
begin
53
        S_data_eof_ori <= I_data_eof_ori;
54
    if(S_data_eof_ori)
55
            S_ram_ori_waddr <= 'd0;
56
        else if(I_data_v_ori)
57
            S_ram_ori_waddr <= S_ram_ori_waddr + 'd1;
58
        if(I_data_v_ori)
59
            S_ram_ori[S_ram_ori_waddr] <= I_data_ori;
60
end
61
 
62
always @(posedge I_clk)
63
begin
64
        S_data_eof_cor_d <= S_data_eof_cor;
65
    if(S_data_eof_cor_d)
66
            S_ram_ori_raddr <= 'd0;
67
        else if(S_data_v_cor)
68
            S_ram_ori_raddr <= S_ram_ori_raddr + 'd1;
69
        S_ram_ori_dout <= S_ram_ori[S_ram_ori_raddr];
70
        S_data_v_cor_d <= S_data_v_cor;
71
        S_data_cor_d <= S_data_cor;
72
end
73
 
74
always @(posedge I_clk)
75
begin
76
        if(S_data_sof_cor)
77
            O_result[0] <= 1'b1;
78
    else if(S_data_v_cor_d)
79
            O_result[0] <= O_result[0] && (S_ram_ori_dout == S_data_cor_d);
80
        O_result[1] <= S_data_eof_cor_d;
81
 
82
end
83
 
84
/*test_bch_encode
85
#(
86
.C_DWIDTH         (C_DWIDTH        ),
87
.C_COEF_NUM       (C_COEF_NUM      ),
88
.C_PRIMPOLY_ORDER (C_PRIMPOLY_ORDER),
89
.C_PRIM_POLY      (C_GENPOLY       )
90
)
91
test_bch_encode_inst
92
(
93
.I_clk       (I_clk      ),
94
.I_rst       (I_rst      ),
95
.I_data      (I_data     ),
96
.I_data_v    (I_data_v   ),
97
.I_data_sof  (I_data_sof ),
98
.I_data_eof  (I_data_eof ),
99
.O_data      (S_data     ),
100
.O_data_v    (S_data_v   ),
101
.O_data_sof  (S_data_sof ),
102
.O_data_eof  (S_data_eof )
103
);*/
104
 
105
test_bch_syndrome
106
#(
107
.C_DWIDTH             (C_DWIDTH),
108
.C_COEF_NUM           (C_COEF_NUM),
109
.C_PRIMPOLY_ORDER     (C_PRIMPOLY_ORDER),
110
.C_PRIM_POLY          (C_GENPOLY)
111
)
112
test_bch_syndrome_inst
113
(
114
.I_clk          (I_clk),
115
.I_rst          (I_rst),
116
.I_data         (I_data    ),
117
.I_data_v       (I_data_v  ),
118
.I_data_sof     (I_data_sof),
119
.I_data_eof     (I_data_eof),
120
.O_syndrome     (S_syndrome),
121
.O_syndrome_v   (S_syndrome_v)
122
);
123
 
124
test_bch_bm
125
#(
126
.C_PRIMPOLY_ORDER  (C_PRIMPOLY_ORDER),
127
.C_COEF_NUM        (C_COEF_NUM),
128
.C_PRIMPOLY        (C_GENPOLY)
129
)
130
test_bch_bm_inst
131
(
132
.I_clk          (I_clk),
133
.I_rst          (I_rst),
134
.I_syndrome     (S_syndrome),
135
.I_syndrome_v   (S_syndrome_v),
136
.O_err_pos      (S_err_pos),
137
.O_err_pos_v    (S_err_pos_v)
138
);
139
 
140
test_chian_search
141
#(
142
.C_PRIMPOLY_ORDER (C_PRIMPOLY_ORDER),
143
.C_COEF_NUM       (C_COEF_NUM),
144
.C_TOTALBIT_NUM   (C_TOTALBIT_NUM),
145
.C_THREAD_NUM     (C_SEARCH_THREAD_NUM),
146
.C_PRIMPOLY       (C_GENPOLY)
147
)
148
test_chian_search_inst
149
(
150
.I_clk        (I_clk),
151
.I_rst        (I_rst),
152
.I_coef       (S_err_pos),
153
.I_coef_v     (S_err_pos_v),
154
.O_data       (S_ecc    ),
155
.O_data_v     (S_ecc_v  ),
156
.O_data_sof   (S_ecc_sof),
157
.O_data_eof   (S_ecc_eof)
158
);
159
 
160
test_correct
161
#(
162
.C_INPUT_NUM (C_INPUT_NUM),
163
.C_DWIDTH    (C_DWIDTH ),
164
.C_ECCWIDTH  (C_SEARCH_THREAD_NUM )
165
)
166
test_correct_inst
167
(
168
.I_clk        (I_clk),
169
.I_rst        (I_rst),
170
.I_data       (I_data  ),
171
.I_data_sof   (I_data_sof  ),
172
.I_data_eof   (I_data_eof),
173
.I_data_v     (I_data_v),
174
.I_ecc        (S_ecc    ),
175
.I_ecc_v      (S_ecc_v  ),
176
.I_ecc_sof    (S_ecc_sof),
177
.I_ecc_eof    (S_ecc_eof),
178
.O_data       (S_data_cor    ),
179
.O_data_v     (S_data_v_cor  ),
180
.O_data_sof   (S_data_sof_cor),
181
.O_data_eof   (S_data_eof_cor)
182
);
183
 
184
endmodule

powered by: WebSVN 2.1.0

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