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