|
- LIBRARY ieee;
- USE ieee.std_logic_1164.ALL;
- USE work.POLY_FIR_PKG.ALL;
-
-
-
- ENTITY poly_fir_blk IS
-
- PORT (
- i_clk : IN std_logic;
- i_coeffs : IN vect_polyfir_coeffs_in;
- i_data : IN vect_adc_data_out;
- o_data : OUT matrix_fir_data_out);
-
- END ENTITY poly_fir_blk;
-
- ARCHITECTURE polyphase OF poly_fir_blk IS
-
- SIGNAL matrix3D_reg_out_simple_rif_in : matrix3D_reg_data_out := (OTHERS => (OTHERS => (OTHERS => (OTHERS => '0'))));
- SIGNAL matrix_coeffs : matrix_fir_coeffs_in := (OTHERS => (OTHERS => (OTHERS => '0')));
- SIGNAL matrix_fir_out : matrix_fir_data_out := (OTHERS => (OTHERS => (OTHERS => '0')));
-
-
- BEGIN -- ARCHITECTURE polyphase
-
-
-
- --purpose: fill the polyphase coefficients into a 2D matrix from the filter vector (1D)
- fill_coeff : PROCESS(i_coeffs) -- rearrange coeffs into a matrix
- VARIABLE coeff_nb : natural;
- VARIABLE sf_coeff : natural;
- VARIABLE subfilter_nb : natural;
- BEGIN
- coeff_nb := 0;
- sf_coeff := 0;
- subfilter_nb := 0;
- coeff_for_matrix : FOR coeff_nb IN 0 TO cst_nb_coeffs_filter_in-1 LOOP
- matrix_coeffs(subfilter_nb)(sf_coeff) <= i_coeffs(coeff_nb);
- subfilter_nb := subfilter_nb+1;
- IF (subfilter_nb = cst_nb_subfilters) THEN
- sf_coeff := sf_coeff+1;
- subfilter_nb := 0;
- END IF;
- END LOOP coeff_for_matrix;
- END PROCESS fill_coeff;
-
-
-
- -- instanciation of the shift-reg for polyphasd filter
- shift_reg_inst : ENTITY work.POLY_SHIFT_REG(Fill_Matrix)
- PORT MAP (i_clk => i_clk,
- i_data => i_data,
- o_data => matrix3D_reg_out_simple_rif_in
- );
-
-
-
- -- instanciation of the cst_nb_subfilters subfilters
- simple_fir_inst_loop : FOR i IN 0 TO cst_nb_subfilters-1 GENERATE
- simple_fir_inst : ENTITY work.TREE_FIR(Simple_Fir)
- PORT MAP(i_clk => i_clk,
- i_coeffs => matrix_coeffs(i),
- i_data => matrix3D_reg_out_simple_rif_in(i),
- o_data => matrix_fir_out(i)
- );
- END GENERATE simple_fir_inst_loop;
-
-
-
-
- o_data <= matrix_fir_out;
-
- END ARCHITECTURE polyphase;
|