Skip to content
Snippets Groups Projects

Clarify g_nof_destinations_max design revision parameter and package constants...

Merged Eric Kooistra requested to merge L2SDP-964 into master
3 files
+ 122
42
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -110,15 +110,26 @@ end package sdp_bdo_pkg;
@@ -110,15 +110,26 @@ end package sdp_bdo_pkg;
package body sdp_bdo_pkg is
package body sdp_bdo_pkg is
function func_sdp_bdo_parse_nof_destinations(nof_destinations, c_nof_destinations_max : natural) return natural is
function func_sdp_bdo_parse_nof_destinations(nof_destinations, c_nof_destinations_max : natural) return natural is
 
constant c_last_arr : t_natural_arr(1 to c_nof_destinations_max) :=
 
func_sdp_bdo_nof_beamlets_per_block_last_destination_look_up_table(c_nof_destinations_max);
 
variable v_DN : natural := 1;
begin
begin
-- Parse input nof_destinations value
-- Parse input nof_destinations value
if nof_destinations = 0 then
if nof_destinations = 0 then
return 1;
v_DN := 1; -- force to at least 1 destination
elsif nof_destinations > c_nof_destinations_max then
elsif nof_destinations > c_nof_destinations_max then
return c_nof_destinations_max;
v_DN := c_nof_destinations_max;
else
else
return nof_destinations;
v_DN := nof_destinations;
end if;
end if;
 
-- Check whether nof beamlet indices can be distributed over v_DN
 
-- destinations, else force to use one less destination, see
 
-- func_sdp_bdo_nof_beamlets_per_block_last_destination_look_up_table()
 
-- description for further explanation.
 
if c_last_arr(v_DN) = 0 then
 
v_DN := v_DN - 1;
 
end if;
 
return v_DN;
end func_sdp_bdo_parse_nof_destinations;
end func_sdp_bdo_parse_nof_destinations;
function func_sdp_bdo_reorder_nof_blocks_look_up_table(c_nof_destinations_max : natural) return t_natural_arr is
function func_sdp_bdo_reorder_nof_blocks_look_up_table(c_nof_destinations_max : natural) return t_natural_arr is
@@ -179,6 +190,7 @@ package body sdp_bdo_pkg is
@@ -179,6 +190,7 @@ package body sdp_bdo_pkg is
variable v_first_arr : t_natural_arr(1 to c_nof_destinations_max) :=
variable v_first_arr : t_natural_arr(1 to c_nof_destinations_max) :=
func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table(c_nof_destinations_max);
func_sdp_bdo_nof_beamlets_per_block_first_destinations_look_up_table(c_nof_destinations_max);
variable v_last_arr : t_natural_arr(1 to c_nof_destinations_max);
variable v_last_arr : t_natural_arr(1 to c_nof_destinations_max);
 
variable v_last : integer;
begin
begin
-- Determine remaining nof_beamlets_per_block for the last destination
-- Determine remaining nof_beamlets_per_block for the last destination
-- with index DN, as function of number of destinations DN.
-- with index DN, as function of number of destinations DN.
@@ -188,17 +200,30 @@ package body sdp_bdo_pkg is
@@ -188,17 +200,30 @@ package body sdp_bdo_pkg is
-- DN = 1:16 --> v_first_arr = 488, 244, 163, 122, 98, 82, 70, 61, 55, 49, 45, 41, 38, 35, 33, 31
-- DN = 1:16 --> v_first_arr = 488, 244, 163, 122, 98, 82, 70, 61, 55, 49, 45, 41, 38, 35, 33, 31
-- DN = 1:16 --> v_last_arr = 488, 244, 162, 122, 96, 78, 68, 61, 48, 47, 38, 37, 32, 33, 26, 23
-- DN = 1:16 --> v_last_arr = 488, 244, 162, 122, 96, 78, 68, 61, 48, 47, 38, 37, 32, 33, 26, 23
--
--
 
-- DN = 17:32 --> v_first_arr = 29, 28, 26, 25, 24, 23, 22, 21, 20, 19, 19, 18, 17, 17, 16, 16
 
-- DN = 17:32 --> v_last_arr = 24, 12, 20, 13, 8, 5, 4, 5, 8, 13, -6, 2, 12, -5, 8, -8
 
-- 27, 30, 32
-- Remark:
-- Remark:
-- . The v_last_arr(DN) may be < v_first_arr(DN) - 1, so the last
-- . The v_last_arr(DN) <= v_first_arr(DN), because dp_packet_unmerge
-- destination may contain much less beamlets than the others. In
-- can only unmerge the same packet length for N - 1 blocks and then
-- combination with dp_packet_unmerge it is not feasible to distribute
-- unmerge the remaining data in the last block until the input eop.
-- the beamlets evenly over all destinations, using v_hi beamlets for
-- . The v_last_arr(DN) can be < v_first_arr(DN) - 1, so the last
-- some first destinations and v_lo = v_hi - 1 for the remaining
-- destination then contains much less beamlets than the others.
-- destinations. This is because dp_packet_unmerge can only unmerge the
-- . In combination with dp_packet_unmerge it is not feasible to
-- same packet length for N - 1 blocks and then unmerge the remaining
-- distribute the beamlets evenly over all destinations, using v_first
-- data in the last block until the eop.
-- beamlets for some first destinations and v_first - 1 beamlets for
 
-- the remaining destinations.
 
-- . The v_last must be > 0. Therefor some number of destinations are
 
-- not possible in combination with c_sdp_S_sub_bf = 488. From the
 
-- v_last_arr it follows that DN = 27, 30 and 32 are not possible for
 
-- multiple destination BDO.
for DN in 1 to c_nof_destinations_max loop
for DN in 1 to c_nof_destinations_max loop
v_last_arr(DN) := c_sdp_S_sub_bf - (DN - 1) * v_first_arr(DN);
v_last := c_sdp_S_sub_bf - (DN - 1) * v_first_arr(DN);
 
if v_last > 0 then
 
v_last_arr(DN) := v_last;
 
else
 
v_last_arr(DN) := 0; -- force 0 to fit in natural
 
end if;
end loop;
end loop;
return v_last_arr;
return v_last_arr;
end func_sdp_bdo_nof_beamlets_per_block_last_destination_look_up_table;
end func_sdp_bdo_nof_beamlets_per_block_last_destination_look_up_table;
@@ -213,10 +238,17 @@ package body sdp_bdo_pkg is
@@ -213,10 +238,17 @@ package body sdp_bdo_pkg is
-- Determine nof_ch per packet for the first 1:DN-1 destinations, as
-- Determine nof_ch per packet for the first 1:DN-1 destinations, as
-- function of number of destinations DN.
-- function of number of destinations DN.
-- The packet lengths follow from c_nof_blocks_arr * c_nof_beamlets_arr:
-- The packet lengths follow from c_nof_blocks_arr * c_nof_beamlets_arr:
 
-- DN = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
-- . c_nof_blocks_arr = 4, 8, 12, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
-- . c_nof_blocks_arr = 4, 8, 12, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
-- . c_nof_beamlets_arr = 488, 244, 163, 122, 98, 82, 70, 61, 55, 49, 45, 41, 38, 35, 33, 31
-- . c_nof_beamlets_arr = 488, 244, 163, 122, 98, 82, 70, 61, 55, 49, 45, 41, 38, 35, 33, 31
-- . v_len_arr = 1952,1952,1956,1952,1568,1312,1120, 976, 880, 784, 720, 656, 608, 560, 528, 496
-- . v_len_arr = 1952,1952,1956,1952,1568,1312,1120, 976, 880, 784, 720, 656, 608, 560, 528, 496
-- . nof octets = 7808,7808,7824,7808,6272,5248,4480,3904,3520,3136,2880,2624,2432,2240,2112,1984
-- . nof octets = 7808,7808,7824,7808,6272,5248,4480,3904,3520,3136,2880,2624,2432,2240,2112,1984
 
--
 
-- DN = 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32
 
-- . c_nof_blocks_arr = 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
 
-- . c_nof_beamlets_arr = 29, 28, 26, 25, 24, 23, 22, 21, 20, 19, 19, 18, 17, 17, 16, 16
 
-- . v_len_arr = 464, 448, 416, 400, 384, 368, 352, 336, 320, 304, 304, 288, 272, 272, 256, 256
 
-- . nof octets = 1856,1792,1664,1600,1536,1472,1408,1344,1280,1216,1216,1152,1088,1088,1024,1024
for DN in 1 to c_nof_destinations_max loop
for DN in 1 to c_nof_destinations_max loop
v_len_arr(DN) := c_nof_blocks_arr(DN) * c_nof_beamlets_arr(DN);
v_len_arr(DN) := c_nof_blocks_arr(DN) * c_nof_beamlets_arr(DN);
end loop;
end loop;
Loading