From 7427d3f371e961fdc50018eb6191a986ed886af4 Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Wed, 15 Sep 2021 14:57:36 +0200
Subject: [PATCH] Also support setting slv fields in func_dp_stream_arr_set().

---
 libraries/base/dp/src/vhdl/dp_stream_pkg.vhd | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/libraries/base/dp/src/vhdl/dp_stream_pkg.vhd b/libraries/base/dp/src/vhdl/dp_stream_pkg.vhd
index dece1acc5d..e1fc62ec22 100644
--- a/libraries/base/dp/src/vhdl/dp_stream_pkg.vhd
+++ b/libraries/base/dp/src/vhdl/dp_stream_pkg.vhd
@@ -298,7 +298,7 @@ PACKAGE dp_stream_pkg Is
   
   -- Functions to set or get a STD_LOGIC field as a STD_LOGIC_VECTOR to or from an siso or an sosi array
   FUNCTION func_dp_stream_arr_set(dp : t_dp_siso_arr; slv : STD_LOGIC_VECTOR; str : STRING) RETURN t_dp_siso_arr;
-  FUNCTION func_dp_stream_arr_set(dp : t_dp_sosi_arr; slv : STD_LOGIC_VECTOR; str : STRING) RETURN t_dp_sosi_arr;
+  FUNCTION func_dp_stream_arr_set(dp : t_dp_sosi_arr; slv : STD_LOGIC_VECTOR; str : STRING) RETURN t_dp_sosi_arr;  -- also support slv fields
   FUNCTION func_dp_stream_arr_set(dp : t_dp_siso_arr; sl  : STD_LOGIC;        str : STRING) RETURN t_dp_siso_arr;
   FUNCTION func_dp_stream_arr_set(dp : t_dp_sosi_arr; sl  : STD_LOGIC;        str : STRING) RETURN t_dp_sosi_arr;
   FUNCTION func_dp_stream_arr_get(dp : t_dp_siso_arr;                         str : STRING) RETURN STD_LOGIC_VECTOR;
@@ -889,13 +889,19 @@ PACKAGE BODY dp_stream_pkg IS
   
   FUNCTION func_dp_stream_arr_set(dp : t_dp_sosi_arr; slv : STD_LOGIC_VECTOR; str : STRING) RETURN t_dp_sosi_arr IS
     VARIABLE v_dp  : t_dp_sosi_arr(dp'RANGE)    := dp;   -- default
-    VARIABLE v_slv : STD_LOGIC_VECTOR(dp'RANGE) := slv;  -- map to ensure same range as for dp
+    VARIABLE v_slv : STD_LOGIC_VECTOR(dp'RANGE) := slv(dp'RANGE);  -- map to ensure same range as for dp
   BEGIN
     FOR I IN dp'RANGE LOOP
+      -- use v_slv(I) to set individual sl field
       IF    str="VALID" THEN v_dp(I).valid := v_slv(I);
       ELSIF str="SOP"   THEN v_dp(I).sop   := v_slv(I);
       ELSIF str="EOP"   THEN v_dp(I).eop   := v_slv(I);
       ELSIF str="SYNC"  THEN v_dp(I).sync  := v_slv(I);
+      -- use slv to set individual slv field
+      ELSIF str="BSN"     THEN v_dp(I).bsn     := RESIZE_DP_BSN(slv);
+      ELSIF str="CHANNEL" THEN v_dp(I).channel := RESIZE_DP_CHANNEL(slv);
+      ELSIF str="EMPTY"   THEN v_dp(I).empty   := RESIZE_DP_EMPTY(slv);
+      ELSIF str="ERR"     THEN v_dp(I).err     := RESIZE_DP_ERROR(slv);
       ELSE  REPORT "Error in func_dp_stream_arr_set for t_dp_sosi_arr";
       END IF;
     END LOOP;
-- 
GitLab