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

Subversion Repositories bch_configurable

[/] [bch_configurable/] [trunk/] [testbench/] [tb_encode.v] - Rev 4

Compare with Previous | Blame | View Log

`timescale 1ns/100ps
module tb_encode
#(
parameter C_DWIDTH = 32,
parameter C_COEF_NUM = 2,
parameter C_PRIMPOLY_ORDER = 10,
parameter C_GENPOLY = 'h409,
parameter C_INPUT_NUM = 512,
parameter C_SEARCH_THREAD_NUM = 32,
parameter C_TOTALBIT_NUM = 100
)
(
input I_clk                      ,
input I_rst                      ,
input [C_DWIDTH-1:0] I_data      ,
input I_data_v                   ,
input I_data_sof                 ,
input I_data_eof                 ,
input [C_DWIDTH-1:0] I_data_ori  ,
input I_data_v_ori               ,
input I_data_sof_ori             ,
input I_data_eof_ori             ,
output reg [1:0] O_result       
);
wire [C_DWIDTH-1:0] S_data  ;
wire [C_DWIDTH-1:0] S_data_d;
wire S_data_v               ; 
wire S_data_sof             ;
wire S_data_eof             ;
wire [C_PRIMPOLY_ORDER*C_COEF_NUM-1:0] S_syndrome;
wire S_syndrome_v;
wire [C_PRIMPOLY_ORDER*C_COEF_NUM-1+C_PRIMPOLY_ORDER:0] S_err_pos;
wire [C_SEARCH_THREAD_NUM-1:0] S_ecc;
wire S_ecc_v;
wire S_ecc_sof;
wire S_ecc_eof;
wire [C_DWIDTH-1:0] S_data_cor;
wire S_data_v_cor;
wire S_data_sof_cor;
wire S_data_eof_cor;
 
reg [C_DWIDTH-1:0] S_ram_ori [1023:0];
reg [9:0] S_ram_ori_waddr = 0;
reg [9:0] S_ram_ori_raddr = 0;
reg S_data_eof_cor_d = 0;
reg [C_DWIDTH-1:0] S_ram_ori_dout = 0;
reg S_data_v_cor_d = 0;
reg [C_DWIDTH-1:0] S_data_cor_d = 0;
reg S_data_eof_ori = 0;
 
always @(posedge I_clk)
begin
	S_data_eof_ori <= I_data_eof_ori;
    if(S_data_eof_ori)
	    S_ram_ori_waddr <= 'd0;
	else if(I_data_v_ori)
	    S_ram_ori_waddr <= S_ram_ori_waddr + 'd1;
	if(I_data_v_ori)
	    S_ram_ori[S_ram_ori_waddr] <= I_data_ori;
end
 
always @(posedge I_clk)
begin
	S_data_eof_cor_d <= S_data_eof_cor;
    if(S_data_eof_cor_d)
	    S_ram_ori_raddr <= 'd0;
	else if(S_data_v_cor)
	    S_ram_ori_raddr <= S_ram_ori_raddr + 'd1;
	S_ram_ori_dout <= S_ram_ori[S_ram_ori_raddr];
	S_data_v_cor_d <= S_data_v_cor;
	S_data_cor_d <= S_data_cor;
end
 
always @(posedge I_clk)
begin
	if(S_data_sof_cor)
	    O_result[0] <= 1'b1;
    else if(S_data_v_cor_d)
	    O_result[0] <= O_result[0] && (S_ram_ori_dout == S_data_cor_d);
	O_result[1] <= S_data_eof_cor_d;
 
end
 
/*test_bch_encode
#(
.C_DWIDTH         (C_DWIDTH        ),
.C_COEF_NUM       (C_COEF_NUM      ),
.C_PRIMPOLY_ORDER (C_PRIMPOLY_ORDER),
.C_PRIM_POLY      (C_GENPOLY       )
)
test_bch_encode_inst
(
.I_clk       (I_clk      ),
.I_rst       (I_rst      ),
.I_data      (I_data     ),
.I_data_v    (I_data_v   ),
.I_data_sof  (I_data_sof ),
.I_data_eof  (I_data_eof ),
.O_data      (S_data     ),
.O_data_v    (S_data_v   ),
.O_data_sof  (S_data_sof ),
.O_data_eof  (S_data_eof )
);*/
 
test_bch_syndrome
#(
.C_DWIDTH             (C_DWIDTH),
.C_COEF_NUM           (C_COEF_NUM),
.C_PRIMPOLY_ORDER     (C_PRIMPOLY_ORDER),
.C_PRIM_POLY          (C_GENPOLY)
)
test_bch_syndrome_inst
(
.I_clk          (I_clk),
.I_rst          (I_rst),
.I_data         (I_data    ),
.I_data_v       (I_data_v  ),
.I_data_sof     (I_data_sof),
.I_data_eof     (I_data_eof),
.O_syndrome     (S_syndrome),
.O_syndrome_v   (S_syndrome_v)
);
 
test_bch_bm
#(
.C_PRIMPOLY_ORDER  (C_PRIMPOLY_ORDER),
.C_COEF_NUM        (C_COEF_NUM),
.C_PRIMPOLY        (C_GENPOLY)
)
test_bch_bm_inst
(
.I_clk          (I_clk),
.I_rst          (I_rst),
.I_syndrome     (S_syndrome),
.I_syndrome_v   (S_syndrome_v),
.O_err_pos      (S_err_pos),
.O_err_pos_v    (S_err_pos_v)
);
 
test_chian_search
#(
.C_PRIMPOLY_ORDER (C_PRIMPOLY_ORDER),
.C_COEF_NUM       (C_COEF_NUM),
.C_TOTALBIT_NUM   (C_TOTALBIT_NUM),
.C_THREAD_NUM     (C_SEARCH_THREAD_NUM),
.C_PRIMPOLY       (C_GENPOLY)
)
test_chian_search_inst
(
.I_clk        (I_clk),
.I_rst        (I_rst),
.I_coef       (S_err_pos),
.I_coef_v     (S_err_pos_v),
.O_data       (S_ecc    ),
.O_data_v     (S_ecc_v  ),
.O_data_sof   (S_ecc_sof),
.O_data_eof   (S_ecc_eof)
);
 
test_correct
#(
.C_INPUT_NUM (C_INPUT_NUM),
.C_DWIDTH    (C_DWIDTH ),
.C_ECCWIDTH  (C_SEARCH_THREAD_NUM )
)
test_correct_inst
(
.I_clk        (I_clk),
.I_rst        (I_rst),
.I_data       (I_data  ),
.I_data_sof   (I_data_sof  ),
.I_data_eof   (I_data_eof),
.I_data_v     (I_data_v),
.I_ecc        (S_ecc    ),
.I_ecc_v      (S_ecc_v  ),
.I_ecc_sof    (S_ecc_sof),
.I_ecc_eof    (S_ecc_eof),
.O_data       (S_data_cor    ),
.O_data_v     (S_data_v_cor  ),
.O_data_sof   (S_data_sof_cor),
.O_data_eof   (S_data_eof_cor)
);
 
endmodule
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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