From e2c7107e3582df229bf92822228122ab6f5d118f Mon Sep 17 00:00:00 2001
From: donker <donker@astron.nl>
Date: Tue, 30 Mar 2021 14:13:25 +0200
Subject: [PATCH] L2SDP-207, working version.

---
 .../sdp/src/vhdl/sdp_statistics_offload.vhd   | 12 ++--
 .../base/dp/src/vhdl/dp_block_from_mm_dc.vhd  | 69 +++++++++++--------
 2 files changed, 46 insertions(+), 35 deletions(-)

diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd
index aa3df06ce1..52a96a0a46 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd
@@ -130,7 +130,7 @@ ARCHITECTURE str OF sdp_statistics_offload IS
   SIGNAL nxt_r : t_reg;
 
   SIGNAL trigger                  : STD_LOGIC := '0';
-  SIGNAL mm_done                  : STD_LOGIC := '0';
+  SIGNAL done                     : STD_LOGIC := '0';
   SIGNAL dp_block_from_mm_src_out : t_dp_sosi;
   SIGNAL dp_block_from_mm_src_in  : t_dp_siso;
   
@@ -182,7 +182,7 @@ BEGIN
     END IF;
   END PROCESS;
 
-  p_control_packet_offload : PROCESS(r, gn_index, in_sosi, trigger, mm_done, dp_header_info)
+  p_control_packet_offload : PROCESS(r, gn_index, in_sosi, trigger, done, dp_header_info)
     VARIABLE v: t_reg;
   BEGIN
     v := r;
@@ -221,8 +221,8 @@ BEGIN
       v.start_pulse   := '1';
       v.start_address := 0;
       v.block_count   := 1;
-    ELSIF mm_done = '1' THEN
-      -- Use mm_done to start next packets
+    ELSIF done = '1' THEN
+      -- Use done to start next packets
       IF r.block_count < c_nof_packets THEN
         IF r.block_count MOD c_nof_data_per_step = 0 THEN
           v.start_address := r.start_address + c_data_size;  -- step to next packet within block
@@ -239,7 +239,7 @@ BEGIN
     END IF;
 
     -- Release header info per packet offload
-    IF trigger = '1' OR mm_done = '1' THEN
+    IF trigger = '1' OR done = '1' THEN
       v.dp_header_info := dp_header_info;
     END IF;
     nxt_r <= v;
@@ -274,7 +274,7 @@ BEGIN
     mm_clk        => mm_clk,
     start_pulse   => r.start_pulse,
     start_address => r.start_address,
-    mm_done       => mm_done,
+    done          => done,
     mm_mosi       => master_mosi,
     mm_miso       => master_miso,
     out_sosi      => dp_block_from_mm_src_out,
diff --git a/libraries/base/dp/src/vhdl/dp_block_from_mm_dc.vhd b/libraries/base/dp/src/vhdl/dp_block_from_mm_dc.vhd
index 936d476512..c2330f1ce6 100644
--- a/libraries/base/dp/src/vhdl/dp_block_from_mm_dc.vhd
+++ b/libraries/base/dp/src/vhdl/dp_block_from_mm_dc.vhd
@@ -40,53 +40,64 @@ ENTITY dp_block_from_mm_dc IS
     g_nof_data   : NATURAL
   ); 
   PORT (
-    dp_rst        : IN  STD_LOGIC;
-    dp_clk        : IN  STD_LOGIC;
+    -- mm_clk domain
     mm_rst        : IN  STD_LOGIC;
     mm_clk        : IN  STD_LOGIC;
-    start_pulse   : IN  STD_LOGIC;
-    start_address : IN  NATURAL;
-    mm_done       : OUT STD_LOGIC;
     mm_mosi       : OUT t_mem_mosi;
     mm_miso       : IN  t_mem_miso;
+    -- dp_clk domain
+    dp_rst        : IN  STD_LOGIC;
+    dp_clk        : IN  STD_LOGIC;
+    start_pulse   : IN  STD_LOGIC;
+    start_address : IN  NATURAL;
+    done          : OUT STD_LOGIC;
     out_sosi      : OUT t_dp_sosi;
     out_siso      : IN  t_dp_siso
   );
 END dp_block_from_mm_dc;
 
-ARCHITECTURE rtl OF dp_block_from_mm_dc IS 
-  CONSTANT c_packet_size : NATURAL := 1024;  -- 512 * 2 = 1024 words.
-  CONSTANT c_fifo_size : NATURAL := c_packet_size * 2;
-  CONSTANT c_start_addr_w : NATURAL := 29;
-  SIGNAL fifo_sosi : t_dp_sosi := c_dp_sosi_rst;
-  SIGNAL fifo_siso : t_dp_siso;
-  SIGNAL mm_start_pulse : STD_LOGIC := '0';
-  SIGNAL mm_mm_done : STD_LOGIC := '0';
-  SIGNAL start_address_slv : STD_LOGIC_VECTOR(c_start_addr_w-1 DOWNTO 0) := (OTHERS => '0');
+ARCHITECTURE str OF dp_block_from_mm_dc IS 
+
+  CONSTANT c_packet_size  : NATURAL := g_nof_data * g_data_size;  -- 512 * 2 = 1024 words.
+  CONSTANT c_fifo_size    : NATURAL := c_packet_size * 2;
+  CONSTANT c_start_addr_w : NATURAL := c_natural_w;
+
+  SIGNAL mm_fifo_sosi         : t_dp_sosi := c_dp_sosi_rst;
+  SIGNAL mm_fifo_siso         : t_dp_siso;
+  SIGNAL mm_start_pulse       : STD_LOGIC := '0';
+  SIGNAL mm_done              : STD_LOGIC := '0';
+  SIGNAL start_address_slv    : STD_LOGIC_VECTOR(c_start_addr_w-1 DOWNTO 0) := (OTHERS => '0');
   SIGNAL mm_start_address_slv : STD_LOGIC_VECTOR(c_start_addr_w-1 DOWNTO 0) := (OTHERS => '0');
-  SIGNAL mm_start_address : NATURAL := 0;
+  SIGNAL mm_start_address     : NATURAL := 0;
+
 BEGIN
   
   p_common_spulse_start_pulse : ENTITY common_lib.common_spulse
   PORT MAP (
+    in_rst      => dp_rst,
     in_clk      => dp_clk,
     in_pulse    => start_pulse,
+    out_rst     => mm_rst,
     out_clk     => mm_clk,
     out_pulse   => mm_start_pulse
   );
 
   p_common_spulse_mm_done : ENTITY common_lib.common_spulse
   PORT MAP (
+    in_rst      => mm_rst,
     in_clk      => mm_clk,
-    in_pulse    => mm_mm_done,
+    in_pulse    => mm_done,
+    out_rst     => dp_rst,
     out_clk     => dp_clk,
-    out_pulse   => mm_done
+    out_pulse   => done
   );
 
   start_address_slv <= TO_UVEC(start_address, c_start_addr_w);
   mm_start_address <= TO_UINT(mm_start_address_slv);
+
   p_common_async_slv_start_address : ENTITY common_lib.common_async_slv
   PORT MAP (
+    rst  => dp_rst,
     clk  => dp_clk,
     din  => start_address_slv,
     dout => mm_start_address_slv
@@ -100,16 +111,16 @@ BEGIN
     g_fifo_size      => c_fifo_size
   )
   PORT MAP (
-    wr_rst      => dp_rst,
-    wr_clk      => dp_clk,
-    rd_rst      => mm_rst,
-    rd_clk      => mm_clk,
+    wr_rst      => mm_rst,
+    wr_clk      => mm_clk,
+    rd_rst      => dp_rst,
+    rd_clk      => dp_clk,
     -- ST sink
-    snk_out     => fifo_siso,
-    snk_in      => fifo_sosi,
+    snk_in      => mm_fifo_sosi,
+    snk_out     => mm_fifo_siso,
     -- ST source
-    src_in      => out_siso,
-    src_out     => out_sosi
+    src_out     => out_sosi,
+    src_in      => out_siso
   );
 
   p_dp_block_from_mm : ENTITY work.dp_block_from_mm
@@ -124,11 +135,11 @@ BEGIN
 
     start_pulse   => mm_start_pulse,
     start_address => mm_start_address,
-    mm_done       => mm_mm_done,
+    mm_done       => mm_done,
     mm_mosi       => mm_mosi,
     mm_miso       => mm_miso,
-    out_sosi      => fifo_sosi,
-    out_siso      => fifo_siso
+    out_sosi      => mm_fifo_sosi,
+    out_siso      => mm_fifo_siso
   );
       
-END rtl;
\ No newline at end of file
+END str;
\ No newline at end of file
-- 
GitLab