From ec65ade506a0f41823c933f65871a88e80ab5e36 Mon Sep 17 00:00:00 2001
From: Reinier van der Walle <walle@astron.nl>
Date: Wed, 23 Jun 2021 10:30:41 +0200
Subject: [PATCH] added option to restart wpfb using the in_sosi valid instead
 of the dp_bsn_restart signal

---
 .../libraries/sdp/src/vhdl/node_sdp_filterbank.vhd    |  3 ++-
 libraries/dsp/wpfb/src/vhdl/wpfb_unit_dev.vhd         | 11 ++++++++---
 libraries/dsp/wpfb/tb/vhdl/tb_wpfb_unit_dev.vhd       |  3 +--
 libraries/dsp/wpfb/tb/vhdl/tb_wpfb_unit_wide.vhd      |  3 +--
 4 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_filterbank.vhd b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_filterbank.vhd
index 69356104b2..a30bf342f7 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_filterbank.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_filterbank.vhd
@@ -181,7 +181,8 @@ BEGIN
     g_use_prefilter          => TRUE,
     g_stats_ena              => FALSE,
     g_use_bg                 => FALSE,
-    g_coefs_file_prefix      => c_coefs_file_prefix 
+    g_coefs_file_prefix      => c_coefs_file_prefix,
+    g_restart_on_valid       => FALSE 
   )
   PORT MAP (
     dp_rst             => dp_rst, 
diff --git a/libraries/dsp/wpfb/src/vhdl/wpfb_unit_dev.vhd b/libraries/dsp/wpfb/src/vhdl/wpfb_unit_dev.vhd
index 5188d93bd2..e63d1860dc 100644
--- a/libraries/dsp/wpfb/src/vhdl/wpfb_unit_dev.vhd
+++ b/libraries/dsp/wpfb/src/vhdl/wpfb_unit_dev.vhd
@@ -365,7 +365,8 @@ entity wpfb_unit_dev is
     g_use_prefilter     : boolean           := TRUE;
     g_stats_ena         : boolean           := TRUE;    -- Enables the statistics unit
     g_use_bg            : boolean           := FALSE;
-    g_coefs_file_prefix : string            := "data/coefs_wide" -- File prefix for the coefficients files.
+    g_coefs_file_prefix : string            := "data/coefs_wide"; -- File prefix for the coefficients files.
+    g_restart_on_valid  : boolean           := TRUE
    );
   port (
     dp_rst                : in  std_logic := '0';
@@ -383,7 +384,7 @@ entity wpfb_unit_dev is
     in_sosi_arr           : in  t_dp_sosi_arr(g_wpfb.nof_wb_streams*g_wpfb.wb_factor-1 downto 0);
     fil_sosi_arr          : out t_dp_sosi_arr(g_wpfb.nof_wb_streams*g_wpfb.wb_factor-1 downto 0);
     out_sosi_arr          : out t_dp_sosi_arr(g_wpfb.nof_wb_streams*g_wpfb.wb_factor-1 downto 0);
-    dp_bsn_source_restart : in  std_logic
+    dp_bsn_source_restart : in  std_logic := '0'
   );
 end entity wpfb_unit_dev;
 
@@ -466,7 +467,11 @@ begin
   begin
     v                    := r;
     v.in_sosi_arr        := in_sosi_arr;
-    v.bsn_source_restart := dp_bsn_source_restart;
+    IF g_restart_on_valid THEN
+      v.bsn_source_restart := (NOT r.in_sosi_arr(0).valid) AND in_sosi_arr(0).valid;
+    ELSE
+      v.bsn_source_restart := dp_bsn_source_restart;
+    END IF;
     rin                  <= v;
   end process comb;
 
diff --git a/libraries/dsp/wpfb/tb/vhdl/tb_wpfb_unit_dev.vhd b/libraries/dsp/wpfb/tb/vhdl/tb_wpfb_unit_dev.vhd
index 61eb02d331..f789359e1d 100644
--- a/libraries/dsp/wpfb/tb/vhdl/tb_wpfb_unit_dev.vhd
+++ b/libraries/dsp/wpfb/tb/vhdl/tb_wpfb_unit_dev.vhd
@@ -330,8 +330,7 @@ BEGIN
     ram_bg_data_mosi   => ram_diag_bg_pfb_mosi,
     ram_bg_data_miso   => ram_diag_bg_pfb_miso,
     in_sosi_arr        => bg_sosi_arr,     
-    out_sosi_arr       => out_sosi_arr,
-    dp_bsn_source_restart => bg_sosi_arr(0).sync
+    out_sosi_arr       => out_sosi_arr
   ); 
 
   time_map : process is
diff --git a/libraries/dsp/wpfb/tb/vhdl/tb_wpfb_unit_wide.vhd b/libraries/dsp/wpfb/tb/vhdl/tb_wpfb_unit_wide.vhd
index bf8e6cb17e..d385e8f7cf 100644
--- a/libraries/dsp/wpfb/tb/vhdl/tb_wpfb_unit_wide.vhd
+++ b/libraries/dsp/wpfb/tb/vhdl/tb_wpfb_unit_wide.vhd
@@ -486,8 +486,7 @@ begin
     ram_bg_data_miso   => open,
     in_sosi_arr        => in_sosi_arr,
     fil_sosi_arr       => fil_sosi_arr,
-    out_sosi_arr       => out_sosi_arr,
-    dp_bsn_source_restart => in_sosi_arr(0).sync
+    out_sosi_arr       => out_sosi_arr
   );
   
   p_fil_sosi_arr : process(fil_sosi_arr)
-- 
GitLab