/dvbt/trunk/release/rtl/rtl_top_fold/kes_fold_rtl.v
http://github.com/zaqwes8811/decoder-reed-solomon · V · 330 lines · 279 code · 12 blank · 39 comment · 6 complexity · 770bfa5020e0aed3fd660569623a3b9e MD5 · raw file
- /**
- file : kes_fold_rtl.v
-
- abst. : ????????????????? ?????????? ???????????
- ??? kes-?????
-
- feat. :
-
- con. :
- kes_block_rtl #(
- .FFACTOR(FFACTOR));
- label_kes(
- .clk(clk), .rst(rst), .clk_ena(clk_ena),
- // control ////
- .kes_slave(kes_slave),
- // out
- .kes_master(kes_master),
- // dataflow ///
- .psindrom(psindrom),
- // out
- .plambda(plambda),
- .phomega(phomega)
- );
- */
-
- `include "vc_top.v"
- module kes_fold_rtl(
- rst, clk, clk_ena,
- // control ////
- kes_slave,
- // out
- kes_master, // ?? ??? ????? ?????
- //kes_master_short,
- // dataflow ///
- psindroms,
- // out
- plambda,
- phomega,
- degree
- );
- input clk, rst, clk_ena;
- input kes_slave;
- input [`SC_OUT_WIDTH-1:0] psindroms; // ??????????? ?????????? ????????
- output kes_master;
- output [`DEGREE_BUS-1:0] degree;
-
- //
- output [`KES_OUT_HOME-1:0] phomega;
- wire [`KES_OUT_HOME-1:0] phomega_tmp;
- output [`KES_OUT_LAM-1:0] plambda; // ??????????? ?????????? ????????
- wire [`KES_OUT_LAM-1:0] plambda_tmp; //
- // enab.
- wire windows;
- wire carry; // LCr - ??????? ???????? ???????(?????)
- assign clk_ena_cont = clk_ena & carry & windows; // ????????
- wire clk_ena_calc;
- assign clk_ena_calc = clk_ena & windows;
- wire load;
- assign load = kes_slave;
- wire pre_kes_master;
- wire pre_master = clk_ena & pre_kes_master;
- // loc. //
- wire [(`WIDTH)*(`ST)-1:0] first_zeros; // ?????? ????
- assign first_zeros = 0;
- wire [(`WIDTH)*3*(`ST+1)-1:0] psyndval_src_tmp; // ??? ???. ?????
- wire [`WIDTH-1:0] intcon [`NUM_BLK-2:0]; // ?????????? ????? ???????
- // out.
- wire [`WIDTH-1:0] deltair;
- wire [`WIDTH-1:0] tttar;
-
- // contr.
- wire [`WIDTH-1:0] gammar;
- wire [`WIDTH-1:0] tst;
- wire [`WIDTH-1:0] delta0r;
- assign delta0r = deltair;
- wire MCr;
- wire LCr;
- // ??? ??????. ???????
- wire [`ST:0] scan_w; // ?? ???????, ?? ????? ????????? ? ????. ???.
- wire [`DEGREE_BUS-1:0] degree_tmp;
- //
- wire [`BIG_DEL-1:0] bigdelta [0:(`NUM_BLK-1)]; // ??????? ????????
- wire [(`BIG_DEL)*(`NUM_BLK)-1:0] pdelta;
- wire [(`BIG_DEL)*(`NUM_BLK)-1:0] pdelta_tmp;
- wire [2*8-1:0] last_zeros; // ? ????????? ?? ??????, ????? ????? ????????
- assign last_zeros = 0;
- wire [`SC_OUT_WIDTH-1:0] psindroms_rout; // ??????????? ?????????? ????????
-
- // split and union
- // ????????????? ???????? ??????.// ???? ???, ?.?. ???? ??? ?????? ?????????
-
- genvar b;
- generate for(b = 1; b < 2*(`ST)+1; b = b+1) begin : as // ???????????? ????????
- assign psindroms_rout[(b)*(`WIDTH)-1:(b-1)*(`WIDTH)] =
- psindroms[`SC_OUT_WIDTH-1-(b-1)*(`WIDTH):`SC_OUT_WIDTH-(b)*(`WIDTH)];
- end endgenerate
- assign psyndval_src_tmp =
- { // ????? ????????? ?????? ??????
- psindroms_rout,
- // ?????????? ?????? ? ????? ????????
- first_zeros,
- // ?????????
- 8'd1};
- wire [(`WIDTH)*(`NUM_REG)*(`NUM_BLK)-1:0] psyndval_src; // ??? ???. ?????
- generate if(`FLAG == 1) begin
- assign psyndval_src = {psyndval_src_tmp};
- end endgenerate
- generate if(`FLAG == 0) begin
- assign psyndval_src = {psyndval_src_tmp, last_zeros};
- end endgenerate
-
- // con. ///
- // ??????????? ??????????? ?????????? ? ???????? ???????
- // ?????????? ?????? ? ???????
- sm_control_v3 #(
- .WIDTH(`WIDTH+1),
- .MOD_COUNT(`KES_DELAY_FOLD))
- label_kes( // ???? ????????
- .clk(clk), .rst(rst), .clk_ena(clk_ena),
- // control ///
- // slave
- .first(load), // ?????????? ???????? ? ???????? ??????? ??????? ?????
- .windows(windows),
- // master
- .last(pre_kes_master) // ?????????? ???????? ? ???? ???????? ???????
- );
- // ???????????? ??????? ?????????????
- a_dff #(.WIDTH(1)) label_aff_out_ena(
- .clk(clk), .aclr(rst), .ena(clk_ena),
- .data(pre_master),
- .q(
- pre_kes_master_tmp)
- ); //* /
-
- // ?????????? ??????????
- calc_control
- ccontr(
- .clk(clk), .rst(rst), .clk_ena(clk_ena_cont),
- // control /////
- .deltar(
- delta0r), // ??????? ???????
- .load(load),
- // out ///
- .deltarout(delta0r_tst),
- .gammar(gammar),
- .MCr(MCr)
- );
- assign rst_warrn = carry | load;
- counter_load_down_set #( // ?????????? ???????
- .MOD_COUNT(`NUM_REG),
- .WIDTH(`NUM_REG)) // ????? ? ???????, ??? ???? ?????
- label_cl(
- .clk(clk), .rst(rst),
- .clk_ena(clk_ena_calc),
- // control ///
- .load(
- rst_warrn),
- //carry), // ????????? ??????
- .set(pre_master),
- // out
- .carry(carry), // ???????? ????????
- // datastream ///
- .dfload(`NUM_REG-1) // data for loading
- );
- assign LCr = carry;
-
- // con. PE /// /// /// ///
- genvar bb; // ????????? ?????? ? ???????????? ????
- generate for(bb = 1; bb < `NUM_BLK+1 ; bb = bb+1) begin :asd
- assign pdelta_tmp[(bb)*(`BIG_DEL)-1:(bb-1)*(`BIG_DEL)] = bigdelta[(`NUM_BLK)-bb];
- end endgenerate
- generate for(bb = 1; bb < `NUM_BY+1; bb = bb+1) begin : asdf // ???????????? ????????
- assign pdelta[(bb)*(`WIDTH)-1:(bb-1)*(`WIDTH)] =
- pdelta_tmp[(`BIG_DEL)*(`NUM_BLK)-1-(bb-1)*(`WIDTH):(`BIG_DEL)*(`NUM_BLK)-(bb)*(`WIDTH)];
- end endgenerate
-
- PE_fold PE0_fold(
- .clk(clk), .rst(rst), .clk_ena(clk_ena_calc),
- // control
- .load(load), // ???????? ????????
- .MCr(MCr),
- .LCr(LCr),
- // dataflow ///
- .delta0r(delta0r), // ??????? ???????
- .gammar(gammar), //
- /////
- .deltaiir(
- intcon[0]),
- //deltaiir),
- .syndvali(
- psyndval_src[(`NUM_BLK)*((`WIDTH)*(`NUM_REG))-1:
- (`NUM_BLK-1)*(`WIDTH*(`NUM_REG))]), // ???????. ???? ?????????
- // out
- .deltair(deltair), // ?? ??????????? ?????? del0 ?? ????
- .bigdelta(bigdelta[0])
- );
- // ????. ??. ??.
- genvar g;
- generate for(g = 1; g < (`NUM_BLK-1); g = g+1) begin : adfas
- PE_fold
- PEj_fold(
- .clk(clk), .rst(rst), .clk_ena(clk_ena_calc),
- // control
- .load(load), // ???????? ????????
- .MCr(MCr),
- .LCr(LCr),
- // dataflow ///
- .delta0r(delta0r), // ??????? ???????
- .gammar(gammar), //
-
- /////////
- .deltaiir(
- intcon[g]),
- //deltaiir),
- .syndvali(
- psyndval_src[(`NUM_BLK-g)*((`WIDTH)*(`NUM_REG))-1:
- (`NUM_BLK-1-g)*(`WIDTH*(`NUM_REG))]),
- // out
- .deltair(
- intcon[g-1]), // ?? ??????????? ??????
- .bigdelta(bigdelta[g])
- );
- end endgenerate
- // ?????????
- PE_fold
- PE_last_fold(
- .clk(clk), .rst(rst), .clk_ena(clk_ena_calc),
- // control
- .load(load), // ???????? ????????
- .MCr(MCr),
- .LCr(LCr),
- // dataflow ///
- .delta0r(delta0r), // ??????? ???????
- .gammar(gammar), //
-
- /////////
- .deltaiir(0),
- .syndvali(
- psyndval_src[(`NUM_BLK-(`NUM_BLK-1))*((`WIDTH)*(`NUM_REG))-1:
- (`NUM_BLK-1-(`NUM_BLK-1))*(`WIDTH*(`NUM_REG))]),// ??????????????? ????????
- // out
- .deltair(intcon[(`NUM_BLK-1)-1]),
- /////
- .bigdelta(bigdelta[(`NUM_BLK-1)])
- );
- // ????. ???. ? ?????? ???????
-
-
- // out. and tst ///
- // ????????? ?????
- generate for(g = 1; g < `ST+1; g = g+1) begin : asdfg
- assign phomega_tmp[(g)*(`WIDTH)-1:(g-1)*(`WIDTH)] =
- pdelta[(g)*(`WIDTH)-1:(g-1)*(`WIDTH)];
- end endgenerate
- // latch homega
- a_dff #(.WIDTH(`KES_OUT_LAM)) label_homega(
- .clk(clk), .aclr(rst), .ena(pre_master),
- .data(phomega_tmp),
- .q(phomega));
-
- // ????????? ??????
- // c ???????
- generate for(g = 1; g < `ST+1+1; g = g+1) begin : qw
- assign plambda_tmp[(g)*(`WIDTH)-1:(g-1)*(`WIDTH)] =
- pdelta[(g+`ST)*(`WIDTH)-1:(g-1+`ST)*(`WIDTH)];
- zero_detect_owire_not // ??????? ??????? ????????
- label_not_zd(
- .in(pdelta[(g+`ST)*(`WIDTH)-1:(g-1+`ST)*(`WIDTH)]), //
- .out(scan_w[g-1])
- );
- end endgenerate
-
- pow_pol_8 // ??????????? ??????????
- label_pow_pol_8(
- // datastream ///
- .din(scan_w[`ST:1]),
- // out
- .dout(degree_tmp)
- );
- a_dff #(.WIDTH(`DEGREE_BUS)) label_aff_deg(
- .clk(clk), .aclr(rst), .ena(pre_master),
- .data(degree_tmp),
- .q(degree)); //* /
- // latch Lambda
- // ??????????? ? ???????? ????????
- a_dff #(.WIDTH(`KES_OUT_LAM)) label_plambda(
- .clk(clk), .aclr(rst), .ena(pre_master),
- .data(plambda_tmp),
- .q(
- plambda));
- //plambda_dnc));
- //assign plambda =
- //degree_tmp;
- //kes_slave;
- //delta0r;
-
- // ??????
- sm_control_v3 #(
- .WIDTH(`WIDTH+1),
- .MOD_COUNT(`SC_DELAY)
- )label_sm_full( // ???? ????????
- .clk(clk), .rst(rst), .clk_ena(clk_ena),
- // control ///
- // slave
- .first(kes_slave), // ?????????? ???????? ? ???????? ??????? ??????? ?????
- .windows(windows_tmp),
- // master
- .last(pre_kes_master_full) // ?????????? ???????? ? ???? ???????? ???????
- );
- // ???????????? ??????? ?????????????
- a_dff #(.WIDTH(1)) label_aff_out_ena_2(
- .clk(clk), .aclr(rst), .ena(clk_ena),
- .data(pre_kes_master_full),
- .q(kes_master)); //* /
-
- //assign kes_master =
- //LCr;
- //MCr;
- //pre_kes_master_tmp;
- endmodule
- /**
- deb. :
- `define POS 1//1*9+1+7
- assign degree =
- {4'b0,degree_tmp};
- //plambda[(`POS)*(`WIDTH)-1:(`POS-1)*(`WIDTH)];
- //phomega[(`POS)*(`WIDTH)-1:(`POS-1)*(`WIDTH)];
- */