From 6142c7683ef338ea05879b674c786f93c9404f84 Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Wed, 20 Apr 2022 11:23:53 +0200
Subject: [PATCH] Pass on g_round_even = true default, to support using false
 for golden reference results in tb_fil_ppf_wide_file_data.vhd.

---
 libraries/dsp/filter/src/vhdl/fil_ppf_filter.vhd           | 6 ++++--
 libraries/dsp/filter/src/vhdl/fil_ppf_single.vhd           | 6 ++++--
 libraries/dsp/filter/src/vhdl/fil_ppf_wide.vhd             | 2 ++
 libraries/dsp/filter/tb/vhdl/tb_fil_ppf_wide_file_data.vhd | 4 +++-
 4 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/libraries/dsp/filter/src/vhdl/fil_ppf_filter.vhd b/libraries/dsp/filter/src/vhdl/fil_ppf_filter.vhd
index bf6077f239..564cc78590 100644
--- a/libraries/dsp/filter/src/vhdl/fil_ppf_filter.vhd
+++ b/libraries/dsp/filter/src/vhdl/fil_ppf_filter.vhd
@@ -38,7 +38,8 @@ entity fil_ppf_filter is
   generic (
     g_technology       : NATURAL := c_tech_select_default;
     g_fil_ppf          : t_fil_ppf; 
-    g_fil_ppf_pipeline : t_fil_ppf_pipeline
+    g_fil_ppf_pipeline : t_fil_ppf_pipeline;
+    g_round_even       : boolean := true
   );
   port (
     clk        : in  std_logic;
@@ -117,12 +118,13 @@ begin
     sum    => adder_out
   );
   
-  u_requantize_addeer_output : entity common_lib.common_requantize
+  u_requantize_adder_output : entity common_lib.common_requantize
   generic map (
     g_representation      => "SIGNED",      
     g_lsb_w               => c_ppf_lsb_w,  
     g_lsb_round           => TRUE,           
     g_lsb_round_clip      => FALSE,      
+    g_lsb_round_even      => g_round_even,
     g_msb_clip            => FALSE,            
     g_msb_clip_symmetric  => FALSE,  
     g_pipeline_remove_lsb => g_fil_ppf_pipeline.requant_remove_lsb, 
diff --git a/libraries/dsp/filter/src/vhdl/fil_ppf_single.vhd b/libraries/dsp/filter/src/vhdl/fil_ppf_single.vhd
index 3b1b9dedba..2351c5f896 100644
--- a/libraries/dsp/filter/src/vhdl/fil_ppf_single.vhd
+++ b/libraries/dsp/filter/src/vhdl/fil_ppf_single.vhd
@@ -73,7 +73,8 @@ use work.fil_pkg.ALL;
 entity fil_ppf_single is
   generic (
     g_fil_ppf           : t_fil_ppf          := c_fil_ppf;    
-    g_fil_ppf_pipeline  : t_fil_ppf_pipeline := c_fil_ppf_pipeline; 
+    g_fil_ppf_pipeline  : t_fil_ppf_pipeline := c_fil_ppf_pipeline;
+    g_round_even        : boolean            := true;
     g_file_index_arr    : t_nat_natural_arr  := array_init(0, 128, 1);  -- default use the instance index as file index 0, 1, 2, 3, 4 ...
     g_coefs_file_prefix : string             := "hex/coef"       -- Relative path to the mif files that contain the initial data for the coefficients memories 
   );                                                                   -- The sequence number and ".mif"-extension are added within the entity.
@@ -234,7 +235,8 @@ begin
     u_filter : entity work.fil_ppf_filter
     generic map (
       g_fil_ppf_pipeline => g_fil_ppf_pipeline,
-      g_fil_ppf          => g_fil_ppf
+      g_fil_ppf          => g_fil_ppf,
+      g_round_even       => g_round_even
     )
     port map (
       clk       => dp_clk,  
diff --git a/libraries/dsp/filter/src/vhdl/fil_ppf_wide.vhd b/libraries/dsp/filter/src/vhdl/fil_ppf_wide.vhd
index 85bdf3c3fc..9561d28a3c 100644
--- a/libraries/dsp/filter/src/vhdl/fil_ppf_wide.vhd
+++ b/libraries/dsp/filter/src/vhdl/fil_ppf_wide.vhd
@@ -121,6 +121,7 @@ entity fil_ppf_wide is
     g_big_endian_wb_out : boolean            := false;
     g_fil_ppf           : t_fil_ppf          := c_fil_ppf;    
     g_fil_ppf_pipeline  : t_fil_ppf_pipeline := c_fil_ppf_pipeline; 
+    g_round_even        : boolean            := true;
     g_coefs_file_prefix : string             := "../../data/coef"  -- Relative path to the mif files that contain the FIR the coefficients
                                                                    -- The sequence number and ".mif"-extension are added within the entity.
   );
@@ -235,6 +236,7 @@ begin
     generic map (
       g_fil_ppf           => c_fil_ppf_arr(P),
       g_fil_ppf_pipeline  => g_fil_ppf_pipeline,
+      g_round_even        => g_round_even,
       g_file_index_arr    => c_file_index_arr2(P),  -- use (g_fil_ppf.wb_factor-1 - P) to try impact of reversed WB FIR coefficients
       g_coefs_file_prefix => g_coefs_file_prefix 
     )
diff --git a/libraries/dsp/filter/tb/vhdl/tb_fil_ppf_wide_file_data.vhd b/libraries/dsp/filter/tb/vhdl/tb_fil_ppf_wide_file_data.vhd
index 103f01b592..c56ad13945 100644
--- a/libraries/dsp/filter/tb/vhdl/tb_fil_ppf_wide_file_data.vhd
+++ b/libraries/dsp/filter/tb/vhdl/tb_fil_ppf_wide_file_data.vhd
@@ -131,6 +131,7 @@ architecture tb of tb_fil_ppf_wide_file_data is
   constant c_clk_period          : time := 10 ns;
   constant c_sclk_period         : time := c_clk_period / g_fil_ppf.wb_factor;
 
+  constant c_round_even          : boolean := false;  -- golden reference data is for round half away from zero
   constant c_diff_margin         : integer := 0;  -- maximum difference between PFIR HDL output and expected output (> 0 to allow minor rounding differences)
 
   constant c_nof_channels        : natural := 2**g_fil_ppf.nof_chan;
@@ -285,6 +286,7 @@ begin
     g_big_endian_wb_out => g_big_endian_wb_out,
     g_fil_ppf           => g_fil_ppf,
     g_fil_ppf_pipeline  => g_fil_ppf_pipeline,
+    g_round_even        => c_round_even,
     g_coefs_file_prefix => c_coefs_mif_file_prefix
   )
   port map (
@@ -489,4 +491,4 @@ begin
     end if;
   end process;
 
-end tb;
\ No newline at end of file
+end tb;
-- 
GitLab