From 5289dd4f8698e5069d9a8e5a1e5efb144f7b2759 Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Mon, 24 Oct 2022 17:14:20 +0200
Subject: [PATCH] Default make unused bits in hdr_fields_out_arr zero.

---
 .../base/dp/src/vhdl/dp_offload_tx_v3.vhd     | 24 ++++++++++++++-----
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/libraries/base/dp/src/vhdl/dp_offload_tx_v3.vhd b/libraries/base/dp/src/vhdl/dp_offload_tx_v3.vhd
index f72352cd69..66551c1bc8 100644
--- a/libraries/base/dp/src/vhdl/dp_offload_tx_v3.vhd
+++ b/libraries/base/dp/src/vhdl/dp_offload_tx_v3.vhd
@@ -135,12 +135,24 @@ BEGIN
     snk_out_arr(i).xon <= src_in_arr(i).xon;
 
     -- Wire hdr_fields_out_arr 
-    -- MM override bits determine source for each field
-    gen_field_wires: FOR j IN g_hdr_field_arr'RANGE GENERATE
-      hdr_fields_out_arr(i)(field_hi(g_hdr_field_arr, j) DOWNTO field_lo(g_hdr_field_arr, j)) <= mm_fields_slv_out_arr(i)(field_hi(g_hdr_field_arr, j) DOWNTO field_lo(g_hdr_field_arr, j)) 
-                                                                                              WHEN field_override_arr(j) = '1' ELSE 
-                                                                                              hdr_fields_in_arr(i)(field_hi(g_hdr_field_arr, j) DOWNTO field_lo(g_hdr_field_arr, j));
-    END GENERATE;
+    p_hdr_fields_out_arr : PROCESS(mm_fields_slv_out_arr, hdr_fields_in_arr)
+      VARIABLE v_hi : NATURAL;
+      VARIABLE v_lo : NATURAL;
+    BEGIN
+      -- Default drive unused slv bit to 0 to avoid Warning: (vsim-8684) No drivers exist on out port
+      -- hdr_fields_out_arr(0)(1023 downto ...), and its initial value is not used.
+      hdr_fields_out_arr(i) <= (OTHERS => '0');
+      FOR j IN g_hdr_field_arr'RANGE LOOP
+        v_hi := field_hi(g_hdr_field_arr, j);
+        v_lo := field_lo(g_hdr_field_arr, j);
+        -- MM override bits determine source for each field
+        IF field_override_arr(j) = '1' THEN
+          hdr_fields_out_arr(i)(v_hi DOWNTO v_lo) <= mm_fields_slv_out_arr(i)(v_hi DOWNTO v_lo);
+        ELSE
+          hdr_fields_out_arr(i)(v_hi DOWNTO v_lo) <= hdr_fields_in_arr(i)(v_hi DOWNTO v_lo);
+        END IF;
+      END LOOP;
+    END PROCESS;
 
     ---------------------------------------------------------------------------------------
     -- mm_fields for MM access to each field
-- 
GitLab