From 28989cf28df8722015949440519ade1383c54319 Mon Sep 17 00:00:00 2001
From: Pepping <pepping>
Date: Tue, 5 Apr 2016 14:34:06 +0000
Subject: [PATCH] Added support for g_nof_streams > 0

---
 .../base/dp/tb/vhdl/tb_mms_dp_fifo_fill.vhd   | 63 +++++++++++++------
 1 file changed, 44 insertions(+), 19 deletions(-)

diff --git a/libraries/base/dp/tb/vhdl/tb_mms_dp_fifo_fill.vhd b/libraries/base/dp/tb/vhdl/tb_mms_dp_fifo_fill.vhd
index 19ef2cb2b7..48670dc9a7 100644
--- a/libraries/base/dp/tb/vhdl/tb_mms_dp_fifo_fill.vhd
+++ b/libraries/base/dp/tb/vhdl/tb_mms_dp_fifo_fill.vhd
@@ -49,20 +49,25 @@ USE work.tb_dp_pkg.ALL;
 ENTITY tb_mms_dp_fifo_fill IS
   GENERIC (
     -- Try FIFO settings
-    g_nof_streams     : POSITIVE := 1;
-    g_dut_use_bsn     : BOOLEAN := FALSE;
-    g_dut_use_empty   : BOOLEAN := FALSE;
-    g_dut_use_channel : BOOLEAN := FALSE;
-    g_dut_use_sync    : BOOLEAN := FALSE;
-    g_dut_fifo_rl     : NATURAL := 1;                  -- internal RL,  use 0 for look ahead FIFO, default 1 for normal FIFO
-    g_dut_fifo_size   : NATURAL := 64;
-    g_dut_fifo_fill   : NATURAL := 40                  -- selectable >= 0 for dp_fifo_fill
+    g_nof_streams     : POSITIVE := 3;
+    g_dut_use_bsn     : BOOLEAN  := FALSE;
+    g_dut_use_empty   : BOOLEAN  := FALSE;
+    g_dut_use_channel : BOOLEAN  := FALSE;
+    g_dut_use_sync    : BOOLEAN  := FALSE;
+    g_dut_fifo_rl     : NATURAL  := 1;                  -- internal RL,  use 0 for look ahead FIFO, default 1 for normal FIFO
+    g_dut_fifo_size   : NATURAL  := 64;
+    g_dut_fifo_fill   : NATURAL  := 40                  -- selectable >= 0 for dp_fifo_fill
   );
 END tb_mms_dp_fifo_fill;
 
 
 ARCHITECTURE tb OF tb_mms_dp_fifo_fill IS
 
+  CONSTANT c_nof_regs_per_stream       : NATURAL := 3; 
+  CONSTANT c_reg_used_words_offset     : NATURAL := 0; 
+  CONSTANT c_reg_fifo_flags            : NATURAL := 1; 
+  CONSTANT c_reg_max_used_words_offset : NATURAL := 2; 
+  
   ----------------------------------------------------------------------------
   -- Clocks and resets
   ----------------------------------------------------------------------------   
@@ -88,6 +93,7 @@ ARCHITECTURE tb OF tb_mms_dp_fifo_fill IS
   SIGNAL reg_dp_fifo_fill_mosi : t_mem_mosi := c_mem_mosi_rst;  
   SIGNAL reg_dp_fifo_fill_miso : t_mem_miso := c_mem_miso_rst;  
 
+  SIGNAL in_sosi               : t_dp_sosi  := c_dp_sosi_rst;
   SIGNAL in_sosi_arr           : t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0) := (OTHERS=> c_dp_sosi_rst);
   SIGNAL out_siso_arr          : t_dp_siso_arr(g_nof_streams-1 DOWNTO 0);
   SIGNAL out_sosi_arr          : t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0);
@@ -108,15 +114,15 @@ BEGIN
     proc_common_wait_some_cycles(dp_clk, 10);
     -- Generate a datastream. 
     WHILE TRUE LOOP
-      in_sosi_arr(0).valid <= '1';
-      in_sosi_arr(0).sop <= '1';                 
+      in_sosi.valid <= '1';
+      in_sosi.sop <= '1';                 
       proc_common_wait_some_cycles(dp_clk, 1);
-      in_sosi_arr(0).sop <= '0';
+      in_sosi.sop <= '0';
       proc_common_wait_some_cycles(dp_clk, 63);                 
-      in_sosi_arr(0).eop <= '1';                 
+      in_sosi.eop <= '1';                 
       proc_common_wait_some_cycles(dp_clk, 1);
-      in_sosi_arr(0).eop <= '0';
-      in_sosi_arr(0).valid <= '0';
+      in_sosi.eop <= '0';
+      in_sosi.valid <= '0';
       proc_common_wait_some_cycles(dp_clk, 1);  
       WHILE (sim_used_words = '0' AND sim_wr_full = '0') LOOP 
         proc_common_wait_some_cycles(dp_clk, 1);
@@ -124,26 +130,45 @@ BEGIN
     END LOOP; 
   END PROCESS;   
 
-  out_siso_arr(0) <= c_dp_siso_rdy WHEN sim_wr_full = '0' ELSE c_dp_siso_rst; 
+  gen_connect : FOR I IN 0 TO g_nof_streams-1 GENERATE 
+    in_sosi_arr(I)  <= in_sosi;
+    out_siso_arr(I) <= c_dp_siso_rdy WHEN sim_wr_full = '0' ELSE c_dp_siso_rst; 
+  END GENERATE; 
 
   p_special_stimuli : PROCESS
   BEGIN
     -- Read out the used_w register
     sim_used_words <= '1';
     proc_common_wait_some_cycles(mm_clk, 200);
-    proc_mem_mm_bus_rd(0, mm_clk, reg_dp_fifo_fill_mosi);   
+    FOR I IN 0 TO g_nof_streams-1 LOOP
+      proc_mem_mm_bus_rd(I*c_nof_regs_per_stream + c_reg_used_words_offset, mm_clk, reg_dp_fifo_fill_mosi);   
+    END LOOP;
     sim_used_words <= '0';
     
-    -- Read out the rd_empty bit 
+    -- Read maximum used fifo words register
     sim_rd_empty <= '1';
+    proc_common_wait_some_cycles(mm_clk, 30);
+    FOR I IN 0 TO g_nof_streams-1 LOOP
+      proc_mem_mm_bus_rd(I*c_nof_regs_per_stream + c_reg_max_used_words_offset, mm_clk, reg_dp_fifo_fill_mosi);   
+    END LOOP;
+
+--    proc_mem_mm_bus_rd(2, mm_clk, reg_dp_fifo_fill_mosi);   
+    
+    -- Read out the rd_empty bit 
     proc_common_wait_some_cycles(mm_clk, 100);
-    proc_mem_mm_bus_rd(1, mm_clk, reg_dp_fifo_fill_mosi);   
+--    proc_mem_mm_bus_rd(1, mm_clk, reg_dp_fifo_fill_mosi);   
+    FOR I IN 0 TO g_nof_streams-1 LOOP
+      proc_mem_mm_bus_rd(I*c_nof_regs_per_stream + c_reg_fifo_flags, mm_clk, reg_dp_fifo_fill_mosi);   
+    END LOOP;
     sim_rd_empty <= '0';
     
     -- Read out the wr_full bit 
     sim_wr_full <= '1';
     proc_common_wait_some_cycles(mm_clk, 100);
-    proc_mem_mm_bus_rd(1, mm_clk, reg_dp_fifo_fill_mosi);   
+    FOR I IN 0 TO g_nof_streams-1 LOOP
+      proc_mem_mm_bus_rd(I*c_nof_regs_per_stream + c_reg_fifo_flags, mm_clk, reg_dp_fifo_fill_mosi);   
+    END LOOP;
+--    proc_mem_mm_bus_rd(1, mm_clk, reg_dp_fifo_fill_mosi);   
 
     proc_common_wait_some_cycles(mm_clk, 10);
     tb_end <= '1';
-- 
GitLab