From 06c17b28bc7e207a020d38ba617c700960a441f7 Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Thu, 28 Sep 2023 11:30:55 +0200
Subject: [PATCH] Use g_nof_destinations_max <=
 c_sdp_bdo_mm_nof_destinations_max = 32

---
 .../sdp/src/vhdl/sdp_bdo_destinations_reg.vhd | 147 +++++++++++++++---
 1 file changed, 127 insertions(+), 20 deletions(-)

diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_destinations_reg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_destinations_reg.vhd
index 89a9aa97d1..8c5d010163 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_destinations_reg.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_destinations_reg.vhd
@@ -50,6 +50,9 @@ library IEEE, common_lib, mm_lib;
   use work.sdp_bdo_pkg.all;
 
 entity sdp_bdo_destinations_reg is
+  generic (
+    g_nof_destinations_max : natural
+  );
   port (
     -- Clocks and reset
     mm_clk   : in  std_logic;
@@ -67,11 +70,27 @@ end sdp_bdo_destinations_reg;
 
 architecture str of sdp_bdo_destinations_reg is
   constant c_field_arr : t_common_field_arr(c_sdp_bdo_destinations_info_nof_hdr_fields - 1 downto 0) :=
-    ( (field_name_pad("nof_blocks_per_packet_act"), "RO",  8, field_default(c_sdp_cep_nof_blocks_per_packet)),
-      (field_name_pad("nof_destinations_max"),      "RO",  8, field_default(1)),
+    ( (field_name_pad("nof_blocks_per_packet"),     "RO",  8, field_default(c_sdp_cep_nof_blocks_per_packet)),
+      (field_name_pad("nof_destinations_max"),      "RO",  8, field_default(g_nof_destinations_max)),
       (field_name_pad("nof_destinations_act"),      "RO",  8, field_default(1)),
       (field_name_pad("nof_destinations"),          "RW",  8, field_default(1)),
 
+      (field_name_pad("udp_destination_port_31"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_30"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_29"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_28"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_27"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_26"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_25"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_24"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_23"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_22"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_21"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_20"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_19"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_18"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_17"),   "RW", 16, field_default(0)),
+      (field_name_pad("udp_destination_port_16"),   "RW", 16, field_default(0)),
       (field_name_pad("udp_destination_port_15"),   "RW", 16, field_default(0)),
       (field_name_pad("udp_destination_port_14"),   "RW", 16, field_default(0)),
       (field_name_pad("udp_destination_port_13"),   "RW", 16, field_default(0)),
@@ -89,6 +108,22 @@ architecture str of sdp_bdo_destinations_reg is
       (field_name_pad("udp_destination_port_1"),    "RW", 16, field_default(0)),
       (field_name_pad("udp_destination_port_0"),    "RW", 16, field_default(0)),
 
+      (field_name_pad("ip_destination_address_31"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_30"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_29"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_28"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_27"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_26"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_25"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_24"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_23"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_22"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_21"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_20"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_19"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_18"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_17"), "RW", 32, field_default(0)),
+      (field_name_pad("ip_destination_address_16"), "RW", 32, field_default(0)),
       (field_name_pad("ip_destination_address_15"), "RW", 32, field_default(0)),
       (field_name_pad("ip_destination_address_14"), "RW", 32, field_default(0)),
       (field_name_pad("ip_destination_address_13"), "RW", 32, field_default(0)),
@@ -106,6 +141,22 @@ architecture str of sdp_bdo_destinations_reg is
       (field_name_pad("ip_destination_address_1"),  "RW", 32, field_default(0)),
       (field_name_pad("ip_destination_address_0"),  "RW", 32, field_default(0)),
 
+      (field_name_pad("eth_destination_mac_31"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_30"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_29"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_28"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_27"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_26"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_25"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_24"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_23"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_22"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_21"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_20"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_19"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_18"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_17"),    "RW", 48, field_default(0)),
+      (field_name_pad("eth_destination_mac_16"),    "RW", 48, field_default(0)),
       (field_name_pad("eth_destination_mac_15"),    "RW", 48, field_default(0)),
       (field_name_pad("eth_destination_mac_14"),    "RW", 48, field_default(0)),
       (field_name_pad("eth_destination_mac_13"),    "RW", 48, field_default(0)),
@@ -126,25 +177,33 @@ architecture str of sdp_bdo_destinations_reg is
   signal mm_fields_in  : std_logic_vector(field_slv_in_len(c_field_arr) - 1 downto 0);
   signal mm_fields_out : std_logic_vector(field_slv_out_len(c_field_arr) - 1 downto 0);
 
-  signal destinations_info_rd : t_sdp_bdo_destinations_info;
-  signal destinations_info_wr : t_sdp_bdo_destinations_info;
+  signal destinations_info_rd : t_sdp_bdo_destinations_info := c_sdp_bdo_destinations_info_rst;
+  signal destinations_info_wr : t_sdp_bdo_destinations_info := c_sdp_bdo_destinations_info_rst;
 
-  signal nof_destinations_act      : natural := 1;
-  signal nof_blocks_per_packet_act : natural := c_sdp_cep_nof_blocks_per_packet;
+  signal nof_destinations_act  : natural := 1;
+  signal nof_blocks_per_packet : natural := c_sdp_cep_nof_blocks_per_packet;
 begin
   destinations_info <= destinations_info_rd;
 
   p_destinations_info_rd : process(destinations_info_wr,
                                    nof_destinations_act,
-                                   nof_blocks_per_packet_act)
+                                   nof_blocks_per_packet)
   begin
-    -- default write assign all fields
-    destinations_info_rd <= destinations_info_wr;
+    -- read/write fields
+    for DI in 0 to g_nof_destinations_max - 1 loop
+      -- Default only read/write connect the available fields. Leave unused
+      -- write fields open and read fields at rst value, so they will be
+      -- optimized away by synthesis.
+      destinations_info_rd.eth_destination_mac_arr(DI)    <= destinations_info_wr.eth_destination_mac_arr(DI);
+      destinations_info_rd.ip_destination_address_arr(DI) <= destinations_info_wr.ip_destination_address_arr(DI);
+      destinations_info_rd.udp_destination_port_arr(DI)   <= destinations_info_wr.udp_destination_port_arr(DI);
+    end loop;
+    destinations_info_rd.nof_destinations <= destinations_info_wr.nof_destinations;
 
-    -- overrule the read only fields
-    destinations_info_rd.nof_destinations_act      <= nof_destinations_act;
-    destinations_info_rd.nof_destinations_max      <= c_sdp_bdo_nof_destinations_max;
-    destinations_info_rd.nof_blocks_per_packet_act <= nof_blocks_per_packet_act;
+    -- read only fields
+    destinations_info_rd.nof_destinations_act  <= nof_destinations_act;
+    destinations_info_rd.nof_destinations_max  <= g_nof_destinations_max;
+    destinations_info_rd.nof_blocks_per_packet <= nof_blocks_per_packet;
   end process;
 
   u_mm_fields: entity mm_lib.mm_fields
@@ -169,9 +228,9 @@ begin
   );
 
   -- add "RO" fields to mm_fields
-  mm_fields_in(field_hi(c_field_arr, "nof_destinations_act") downto field_lo(c_field_arr, "nof_destinations_act")) <= to_uvec(destinations_info_rd.nof_destinations_act, 8);
-  mm_fields_in(field_hi(c_field_arr, "nof_destinations_max") downto field_lo(c_field_arr, "nof_destinations_max")) <= to_uvec(destinations_info_rd.nof_destinations_max, 8);
-  mm_fields_in(field_hi(c_field_arr, "nof_blocks_per_packet_act") downto field_lo(c_field_arr, "nof_blocks_per_packet_act")) <= to_uvec(destinations_info_rd.nof_blocks_per_packet_act, 8);
+  mm_fields_in(field_hi(c_field_arr, "nof_destinations_act")  downto field_lo(c_field_arr, "nof_destinations_act"))  <= to_uvec(destinations_info_rd.nof_destinations_act, 8);
+  mm_fields_in(field_hi(c_field_arr, "nof_destinations_max")  downto field_lo(c_field_arr, "nof_destinations_max"))  <= to_uvec(destinations_info_rd.nof_destinations_max, 8);
+  mm_fields_in(field_hi(c_field_arr, "nof_blocks_per_packet") downto field_lo(c_field_arr, "nof_blocks_per_packet")) <= to_uvec(destinations_info_rd.nof_blocks_per_packet, 8);
 
   -- get "RW" fields from mm_fields
   destinations_info_wr.eth_destination_mac_arr(0)  <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_0") downto field_lo(c_field_arr, "eth_destination_mac_0"));
@@ -190,6 +249,22 @@ begin
   destinations_info_wr.eth_destination_mac_arr(13) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_13") downto field_lo(c_field_arr, "eth_destination_mac_13"));
   destinations_info_wr.eth_destination_mac_arr(14) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_14") downto field_lo(c_field_arr, "eth_destination_mac_14"));
   destinations_info_wr.eth_destination_mac_arr(15) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_15") downto field_lo(c_field_arr, "eth_destination_mac_15"));
+  destinations_info_wr.eth_destination_mac_arr(16) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_16") downto field_lo(c_field_arr, "eth_destination_mac_16"));
+  destinations_info_wr.eth_destination_mac_arr(17) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_17") downto field_lo(c_field_arr, "eth_destination_mac_17"));
+  destinations_info_wr.eth_destination_mac_arr(18) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_18") downto field_lo(c_field_arr, "eth_destination_mac_18"));
+  destinations_info_wr.eth_destination_mac_arr(19) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_19") downto field_lo(c_field_arr, "eth_destination_mac_19"));
+  destinations_info_wr.eth_destination_mac_arr(20) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_20") downto field_lo(c_field_arr, "eth_destination_mac_20"));
+  destinations_info_wr.eth_destination_mac_arr(21) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_21") downto field_lo(c_field_arr, "eth_destination_mac_21"));
+  destinations_info_wr.eth_destination_mac_arr(22) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_22") downto field_lo(c_field_arr, "eth_destination_mac_22"));
+  destinations_info_wr.eth_destination_mac_arr(23) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_23") downto field_lo(c_field_arr, "eth_destination_mac_23"));
+  destinations_info_wr.eth_destination_mac_arr(24) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_24") downto field_lo(c_field_arr, "eth_destination_mac_24"));
+  destinations_info_wr.eth_destination_mac_arr(25) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_25") downto field_lo(c_field_arr, "eth_destination_mac_25"));
+  destinations_info_wr.eth_destination_mac_arr(26) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_26") downto field_lo(c_field_arr, "eth_destination_mac_26"));
+  destinations_info_wr.eth_destination_mac_arr(27) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_27") downto field_lo(c_field_arr, "eth_destination_mac_27"));
+  destinations_info_wr.eth_destination_mac_arr(28) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_28") downto field_lo(c_field_arr, "eth_destination_mac_28"));
+  destinations_info_wr.eth_destination_mac_arr(29) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_29") downto field_lo(c_field_arr, "eth_destination_mac_29"));
+  destinations_info_wr.eth_destination_mac_arr(30) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_30") downto field_lo(c_field_arr, "eth_destination_mac_30"));
+  destinations_info_wr.eth_destination_mac_arr(31) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_31") downto field_lo(c_field_arr, "eth_destination_mac_31"));
 
   destinations_info_wr.ip_destination_address_arr(0)  <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_0") downto field_lo(c_field_arr, "ip_destination_address_0"));
   destinations_info_wr.ip_destination_address_arr(1)  <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_1") downto field_lo(c_field_arr, "ip_destination_address_1"));
@@ -207,6 +282,22 @@ begin
   destinations_info_wr.ip_destination_address_arr(13) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_13") downto field_lo(c_field_arr, "ip_destination_address_13"));
   destinations_info_wr.ip_destination_address_arr(14) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_14") downto field_lo(c_field_arr, "ip_destination_address_14"));
   destinations_info_wr.ip_destination_address_arr(15) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_15") downto field_lo(c_field_arr, "ip_destination_address_15"));
+  destinations_info_wr.ip_destination_address_arr(16) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_16") downto field_lo(c_field_arr, "ip_destination_address_16"));
+  destinations_info_wr.ip_destination_address_arr(17) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_17") downto field_lo(c_field_arr, "ip_destination_address_17"));
+  destinations_info_wr.ip_destination_address_arr(18) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_18") downto field_lo(c_field_arr, "ip_destination_address_18"));
+  destinations_info_wr.ip_destination_address_arr(19) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_19") downto field_lo(c_field_arr, "ip_destination_address_19"));
+  destinations_info_wr.ip_destination_address_arr(20) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_20") downto field_lo(c_field_arr, "ip_destination_address_20"));
+  destinations_info_wr.ip_destination_address_arr(21) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_21") downto field_lo(c_field_arr, "ip_destination_address_21"));
+  destinations_info_wr.ip_destination_address_arr(22) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_22") downto field_lo(c_field_arr, "ip_destination_address_22"));
+  destinations_info_wr.ip_destination_address_arr(23) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_23") downto field_lo(c_field_arr, "ip_destination_address_23"));
+  destinations_info_wr.ip_destination_address_arr(24) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_24") downto field_lo(c_field_arr, "ip_destination_address_24"));
+  destinations_info_wr.ip_destination_address_arr(25) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_25") downto field_lo(c_field_arr, "ip_destination_address_25"));
+  destinations_info_wr.ip_destination_address_arr(26) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_26") downto field_lo(c_field_arr, "ip_destination_address_26"));
+  destinations_info_wr.ip_destination_address_arr(27) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_27") downto field_lo(c_field_arr, "ip_destination_address_27"));
+  destinations_info_wr.ip_destination_address_arr(28) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_28") downto field_lo(c_field_arr, "ip_destination_address_28"));
+  destinations_info_wr.ip_destination_address_arr(29) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_29") downto field_lo(c_field_arr, "ip_destination_address_29"));
+  destinations_info_wr.ip_destination_address_arr(30) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_30") downto field_lo(c_field_arr, "ip_destination_address_30"));
+  destinations_info_wr.ip_destination_address_arr(31) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_31") downto field_lo(c_field_arr, "ip_destination_address_31"));
 
   destinations_info_wr.udp_destination_port_arr(0)  <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_0") downto field_lo(c_field_arr, "udp_destination_port_0"));
   destinations_info_wr.udp_destination_port_arr(1)  <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_1") downto field_lo(c_field_arr, "udp_destination_port_1"));
@@ -224,17 +315,33 @@ begin
   destinations_info_wr.udp_destination_port_arr(13) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_13") downto field_lo(c_field_arr, "udp_destination_port_13"));
   destinations_info_wr.udp_destination_port_arr(14) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_14") downto field_lo(c_field_arr, "udp_destination_port_14"));
   destinations_info_wr.udp_destination_port_arr(15) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_15") downto field_lo(c_field_arr, "udp_destination_port_15"));
+  destinations_info_wr.udp_destination_port_arr(16) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_16") downto field_lo(c_field_arr, "udp_destination_port_16"));
+  destinations_info_wr.udp_destination_port_arr(17) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_17") downto field_lo(c_field_arr, "udp_destination_port_17"));
+  destinations_info_wr.udp_destination_port_arr(18) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_18") downto field_lo(c_field_arr, "udp_destination_port_18"));
+  destinations_info_wr.udp_destination_port_arr(19) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_19") downto field_lo(c_field_arr, "udp_destination_port_19"));
+  destinations_info_wr.udp_destination_port_arr(20) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_20") downto field_lo(c_field_arr, "udp_destination_port_20"));
+  destinations_info_wr.udp_destination_port_arr(21) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_21") downto field_lo(c_field_arr, "udp_destination_port_21"));
+  destinations_info_wr.udp_destination_port_arr(22) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_22") downto field_lo(c_field_arr, "udp_destination_port_22"));
+  destinations_info_wr.udp_destination_port_arr(23) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_23") downto field_lo(c_field_arr, "udp_destination_port_23"));
+  destinations_info_wr.udp_destination_port_arr(24) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_24") downto field_lo(c_field_arr, "udp_destination_port_24"));
+  destinations_info_wr.udp_destination_port_arr(25) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_25") downto field_lo(c_field_arr, "udp_destination_port_25"));
+  destinations_info_wr.udp_destination_port_arr(26) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_26") downto field_lo(c_field_arr, "udp_destination_port_26"));
+  destinations_info_wr.udp_destination_port_arr(27) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_27") downto field_lo(c_field_arr, "udp_destination_port_27"));
+  destinations_info_wr.udp_destination_port_arr(28) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_28") downto field_lo(c_field_arr, "udp_destination_port_28"));
+  destinations_info_wr.udp_destination_port_arr(29) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_29") downto field_lo(c_field_arr, "udp_destination_port_29"));
+  destinations_info_wr.udp_destination_port_arr(30) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_30") downto field_lo(c_field_arr, "udp_destination_port_30"));
+  destinations_info_wr.udp_destination_port_arr(31) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_31") downto field_lo(c_field_arr, "udp_destination_port_31"));
 
   destinations_info_wr.nof_destinations <= to_uint(mm_fields_out(field_hi(c_field_arr, "nof_destinations") downto field_lo(c_field_arr, "nof_destinations")));
 
   -- Register the read only actual values, to ease timing closure
   p_dp_clk : process(dp_clk)
-    constant c_nof_blocks_per_packet_arr : t_natural_arr(1 to c_sdp_bdo_nof_destinations_max) :=
-      func_sdp_bdo_nof_blocks_per_packet_look_up_table;
+    constant c_nof_blocks_per_packet_arr : t_natural_arr(1 to g_nof_destinations_max) :=
+      func_sdp_bdo_reorder_nof_blocks_look_up_table(g_nof_destinations_max);
   begin
     if rising_edge(dp_clk) then
-      nof_destinations_act <= func_sdp_bdo_parse_nof_destinations(destinations_info_wr.nof_destinations);
-      nof_blocks_per_packet_act <= c_nof_blocks_per_packet_arr(nof_destinations_act);
+      nof_destinations_act <= func_sdp_bdo_parse_nof_destinations(destinations_info_wr.nof_destinations, g_nof_destinations_max);
+      nof_blocks_per_packet <= c_nof_blocks_per_packet_arr(nof_destinations_act);
     end if;
   end process;
 end str;
-- 
GitLab