From 9f7b0b42a786b00c5775a57f8af8648dfa7f1b9c Mon Sep 17 00:00:00 2001
From: Erik Kooistra <kooistra@astron.nl>
Date: Fri, 15 Jun 2018 11:20:25 +0000
Subject: [PATCH] Moved mms_dp_xonoff to src_out output, so that input and DB
 can always remain on.

---
 .../node_apertif_unb1_correlator_output.vhd   | 78 ++++++++++---------
 1 file changed, 40 insertions(+), 38 deletions(-)

diff --git a/applications/apertif/designs/apertif_unb1_correlator/src/vhdl/node_apertif_unb1_correlator_output.vhd b/applications/apertif/designs/apertif_unb1_correlator/src/vhdl/node_apertif_unb1_correlator_output.vhd
index 54bc0e691e..16d068a68d 100644
--- a/applications/apertif/designs/apertif_unb1_correlator/src/vhdl/node_apertif_unb1_correlator_output.vhd
+++ b/applications/apertif/designs/apertif_unb1_correlator/src/vhdl/node_apertif_unb1_correlator_output.vhd
@@ -77,14 +77,16 @@ END node_apertif_unb1_correlator_output;
 ARCHITECTURE str OF node_apertif_unb1_correlator_output IS
 
   -- 1GbE Visibility Offload  
-  SIGNAL dp_xonoff_snk_in_arr                        : t_dp_sosi_arr(0 DOWNTO 0);
-  SIGNAL dp_xonoff_src_out_arr                       : t_dp_sosi_arr(0 DOWNTO 0);
   SIGNAL dp_repack_data_snk_in                       : t_dp_sosi;
   SIGNAL dp_repack_data_snk_out                      : t_dp_siso;
   SIGNAL apertif_unb1_correlator_vis_offload_snk_in  : t_dp_sosi;
   SIGNAL apertif_unb1_correlator_vis_offload_snk_out : t_dp_siso;
+  SIGNAL dp_xonoff_snk_out_arr                       : t_dp_siso_arr(0 DOWNTO 0);
+  SIGNAL dp_xonoff_snk_in_arr                        : t_dp_sosi_arr(0 DOWNTO 0);
   SIGNAL dp_offload_tx_src_out_arr                   : t_dp_sosi_arr(0 DOWNTO 0);
   SIGNAL dp_offload_tx_src_in_arr                    : t_dp_siso_arr(0 DOWNTO 0);
+  SIGNAL src_in_arr                                  : t_dp_siso_arr(0 DOWNTO 0);
+  SIGNAL src_out_arr                                 : t_dp_sosi_arr(0 DOWNTO 0);
   
   -- Output DB
   CONSTANT c_vis_header_size                         : NATURAL := 21;  -- (pad(2) + eth(14) + ip(20) + udp(8) + app_id(16) + app_flags(24)) / 4 = 84 bytes / 4 = 21 words
@@ -96,42 +98,13 @@ ARCHITECTURE str OF node_apertif_unb1_correlator_output IS
   CONSTANT c_db_nof_data_sim                         : NATURAL := c_vis_nof_data_per_sync;  -- in sim at least one sync interval
   CONSTANT c_db_nof_data                             : NATURAL := sel_a_b(g_sim, c_db_nof_data_sim, c_db_nof_data_hw);
   
-  SIGNAL src_out_arr                                 : t_dp_sosi_arr(0 DOWNTO 0);
   SIGNAL db_sosi_arr                                 : t_dp_sosi_arr(0 DOWNTO 0);
   SIGNAL db_data                                     : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0);
   SIGNAL db_data_se                                  : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0);  -- swap endian (to account for p_connect in apertif_unb1_correlator_vis_offload)
   SIGNAL db_index_arr                                : t_natural_arr(2 DOWNTO 0);
 
 BEGIN
-    
-  dp_xonoff_snk_in_arr(0) <= snk_in;
-  -----------------------------------------------------------------------------
-  -- DP Xon Off. --> output to the datawriter can be switched on or off. 
-  -----------------------------------------------------------------------------  
-  u_mms_dp_xonoff : ENTITY dp_lib.mms_dp_xonoff 
-  GENERIC MAP(
-    g_nof_streams     => 1,
-    g_combine_streams => TRUE,
-    g_bypass          => FALSE,
-    g_default_value   => sel_a_b(g_sim, '1', '0') -- Sim: on by default like block gens
-  )
-  PORT MAP(
-    mm_rst       => mm_rst,
-    mm_clk       => mm_clk,
-
-    reg_mosi     => reg_dp_xonoff_output_mosi,
-    reg_miso     => reg_dp_xonoff_output_miso,
-    
-    dp_rst       => dp_rst,  
-    dp_clk       => dp_clk,  
-
-    snk_out_arr  => OPEN,
-    snk_in_arr   => dp_xonoff_snk_in_arr, 
-
-    src_in_arr   => (OTHERS => c_dp_siso_rdy), 
-    src_out_arr  => dp_xonoff_src_out_arr
-  );
-
+  
   -----------------------------------------------------------------------------
   -- 64b -> 32b 
   -----------------------------------------------------------------------------
@@ -149,7 +122,7 @@ BEGIN
     rst         => dp_rst,
     clk         => dp_clk,
   
-    snk_in      => dp_xonoff_src_out_arr(0),
+    snk_in      => snk_in,
 
     src_in      => dp_repack_data_snk_out,
     src_out     => dp_repack_data_snk_in
@@ -193,14 +166,12 @@ BEGIN
     snk_in                          => apertif_unb1_correlator_vis_offload_snk_in,
     snk_out                         => apertif_unb1_correlator_vis_offload_snk_out,
 
-    src_out                         => src_out_arr(0),
-    src_in                          => src_in,
+    src_out                         => dp_xonoff_snk_in_arr(0),
+    src_in                          => dp_xonoff_snk_out_arr(0),  -- ready flow control from src_in, xon = '1' thanks to mms_dp_xonoff
 
     ID                              => ID
   );
   
-  src_out <= src_out_arr(0);
-  
   -----------------------------------------------------------------------------
   -- Data buffer to monitor visibility packets offload
   -----------------------------------------------------------------------------
@@ -219,7 +190,7 @@ BEGIN
     clk           => dp_clk,
     rst           => dp_rst,
 
-    snk_in        => src_out_arr(0),
+    snk_in        => dp_xonoff_snk_in_arr(0),
     src_out       => db_sosi_arr(0),
     src_index_arr => db_index_arr     -- [2] = sync index, [1] sop index, [0] valid index
   );
@@ -253,4 +224,35 @@ BEGIN
   db_data    <= db_sosi_arr(0).data(c_32-1 DOWNTO 0);  -- for easier view in Wave window
   db_data_se <= ntoh(db_data);  -- swap endian for easier view in Wave window
 
+  -----------------------------------------------------------------------------
+  -- DP Xon Off. --> output to the datawriter can be switched on or off. 
+  -----------------------------------------------------------------------------  
+
+  u_mms_dp_xonoff : ENTITY dp_lib.mms_dp_xonoff 
+  GENERIC MAP(
+    g_nof_streams     => 1,
+    g_combine_streams => TRUE,
+    g_bypass          => FALSE,
+    g_default_value   => sel_a_b(g_sim, '1', '0') -- Sim: on by default like block gens
+  )
+  PORT MAP(
+    mm_rst       => mm_rst,
+    mm_clk       => mm_clk,
+
+    reg_mosi     => reg_dp_xonoff_output_mosi,
+    reg_miso     => reg_dp_xonoff_output_miso,
+    
+    dp_rst       => dp_rst,  
+    dp_clk       => dp_clk,  
+
+    snk_out_arr  => dp_xonoff_snk_out_arr,
+    snk_in_arr   => dp_xonoff_snk_in_arr, 
+
+    src_in_arr   => src_in_arr,
+    src_out_arr  => src_out_arr
+  );
+
+  src_out       <= src_out_arr(0);
+  src_in_arr(0) <= src_in;
+  
 END str;
-- 
GitLab