diff --git a/designs/MINI-LFR_WFP_MS/MINI_LFR_top.vhd b/designs/MINI-LFR_WFP_MS/MINI_LFR_top.vhd --- a/designs/MINI-LFR_WFP_MS/MINI_LFR_top.vhd +++ b/designs/MINI-LFR_WFP_MS/MINI_LFR_top.vhd @@ -518,7 +518,7 @@ BEGIN -- beh pirq_ms => 6, pirq_wfp => 14, hindex => 2, - top_lfr_version => X"000133") -- aa.bb.cc version + top_lfr_version => X"000134") -- aa.bb.cc version PORT MAP ( clk => clk_25, rstn => LFR_rstn, diff --git a/lib/lpp/lpp_top_lfr/lpp_lfr_filter_coeff.vhd b/lib/lpp/lpp_top_lfr/lpp_lfr_filter_coeff.vhd --- a/lib/lpp/lpp_top_lfr/lpp_lfr_filter_coeff.vhd +++ b/lib/lpp/lpp_top_lfr/lpp_lfr_filter_coeff.vhd @@ -57,7 +57,9 @@ PACKAGE BODY lpp_lfr_filter_coeff IS VARIABLE config_vector : STD_LOGIC_VECTOR((CEL_NUMBER * 5 * COEFFICIENT_SIZE)-1 DOWNTO 0); VARIABLE SOS_with_gain_array : COEFF_CEL_ARRAY_REAL(1 TO CEL_NUMBER); - VARIABLE SOS_with_gain_array_integer : COEFF_CEL_ARRAY_INTEGER(1 TO CEL_NUMBER); + VARIABLE SOS_with_gain_array_integer : COEFF_CEL_ARRAY_INTEGER(1 TO CEL_NUMBER); + + CONSTANT REAL_NEG : REAL := -1.0; BEGIN all_cel: FOR I IN 1 TO CEL_NUMBER LOOP @@ -70,20 +72,26 @@ PACKAGE BODY lpp_lfr_filter_coeff IS END LOOP all_cel; all_cel_int: FOR I IN 1 TO CEL_NUMBER LOOP - all_param_int: FOR J IN 1 TO 6 LOOP + all_param_int: FOR J IN 1 TO 3 LOOP SOS_with_gain_array_integer(I)(J) := INTEGER( SOS_with_gain_array(I)(J) * REAL(2**(POINT_POSITION)) ); END LOOP all_param_int; - END LOOP all_cel_int; + + --------------------------------------------------------------------------- + -- INVERSION of A param due to fact that IIR_CEL module make only MULT and MAC operation + all_param_int_a: FOR J IN 4 TO 6 LOOP + SOS_with_gain_array_integer(I)(J) := INTEGER( SOS_with_gain_array(I)(J) * REAL(2**(POINT_POSITION)) * REAL_NEG ); + END LOOP all_param_int_a; + --------------------------------------------------------------------------- + END LOOP all_cel_int; + all_cel_output: FOR I IN 1 TO CEL_NUMBER LOOP all_param_b_out: FOR J IN 1 TO 3 LOOP - config_vector( (((I-1)*5)+3-J)*COEFFICIENT_SIZE + COEFFICIENT_SIZE -1 DOWNTO (((I-1)*5)+3-J)*COEFFICIENT_SIZE ) - := std_logic_vector(TO_SIGNED(SOS_with_gain_array_integer(I)(J),COEFFICIENT_SIZE )); + config_vector( (((I-1)*5)+3-J)*COEFFICIENT_SIZE + COEFFICIENT_SIZE -1 DOWNTO (((I-1)*5)+3-J)*COEFFICIENT_SIZE ) := std_logic_vector(TO_SIGNED(SOS_with_gain_array_integer(I)(J),COEFFICIENT_SIZE )); END LOOP all_param_b_out; - config_vector( (((I-1)*5)+3)*COEFFICIENT_SIZE + COEFFICIENT_SIZE -1 DOWNTO (((I-1)*5)+3)*COEFFICIENT_SIZE ) - := std_logic_vector(TO_SIGNED(SOS_with_gain_array_integer(I)(6),COEFFICIENT_SIZE)); - config_vector( (((I-1)*5)+4)*COEFFICIENT_SIZE + COEFFICIENT_SIZE -1 DOWNTO (((I-1)*5)+4)*COEFFICIENT_SIZE ) - := std_logic_vector(TO_SIGNED(SOS_with_gain_array_integer(I)(5),COEFFICIENT_SIZE)); + + config_vector( (((I-1)*5)+3)*COEFFICIENT_SIZE + COEFFICIENT_SIZE -1 DOWNTO (((I-1)*5)+3)*COEFFICIENT_SIZE ) := std_logic_vector(TO_SIGNED(SOS_with_gain_array_integer(I)(6),COEFFICIENT_SIZE)); --a2 + config_vector( (((I-1)*5)+4)*COEFFICIENT_SIZE + COEFFICIENT_SIZE -1 DOWNTO (((I-1)*5)+4)*COEFFICIENT_SIZE ) := std_logic_vector(TO_SIGNED(SOS_with_gain_array_integer(I)(5),COEFFICIENT_SIZE)); --a1 END LOOP all_cel_output; RETURN config_vector;