From 83d3587791f0b428a2a498604b28d17c54cd4fee Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Mon, 9 Mar 2020 16:21:16 +0100 Subject: [PATCH] Added array_and() and array_or() functions for t_nat_boolean_arr. --- libraries/base/common/src/vhdl/common_pkg.vhd | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/libraries/base/common/src/vhdl/common_pkg.vhd b/libraries/base/common/src/vhdl/common_pkg.vhd index 4542900603..dbbea6568e 100644 --- a/libraries/base/common/src/vhdl/common_pkg.vhd +++ b/libraries/base/common/src/vhdl/common_pkg.vhd @@ -206,6 +206,9 @@ PACKAGE common_pkg IS FUNCTION orv( slv : STD_LOGIC_VECTOR) RETURN STD_LOGIC; -- alias of vector_or FUNCTION xorv(slv : STD_LOGIC_VECTOR) RETURN STD_LOGIC; -- alias of vector_xor + FUNCTION array_and(arr : t_nat_boolean_arr) RETURN BOOLEAN; + FUNCTION array_or( arr : t_nat_boolean_arr) RETURN BOOLEAN; + FUNCTION matrix_and(mat : t_sl_matrix; wi, wj : NATURAL) RETURN STD_LOGIC; -- '1' when all matrix bits are '1' else '0' FUNCTION matrix_or( mat : t_sl_matrix; wi, wj : NATURAL) RETURN STD_LOGIC; -- '0' when all matrix bits are '0' else '1' @@ -757,6 +760,20 @@ PACKAGE BODY common_pkg IS RETURN vector_tree(slv, "XOR"); END; + FUNCTION array_and(arr : t_nat_boolean_arr) RETURN BOOLEAN IS + VARIABLE v_slv : STD_LOGIC_VECTOR(arr'RANGE); + BEGIN + FOR I IN arr'RANGE LOOP v_slv(I) := sel_a_b(arr(I), '1', '0'); END LOOP; -- wire map boolean arr to slv + RETURN sel_a_b(vector_and(v_slv) = '1', TRUE, FALSE); -- use vector_tree to determine result + END; + + FUNCTION array_or(arr : t_nat_boolean_arr) RETURN BOOLEAN IS + VARIABLE v_slv : STD_LOGIC_VECTOR(arr'RANGE); + BEGIN + FOR I IN arr'RANGE LOOP v_slv(I) := sel_a_b(arr(I), '1', '0'); END LOOP; -- wire map boolean arr to slv + RETURN sel_a_b(vector_or(v_slv) = '1', TRUE, FALSE); -- use vector_tree to determine result + END; + FUNCTION matrix_and(mat : t_sl_matrix; wi, wj : NATURAL) RETURN STD_LOGIC IS VARIABLE v_mat : t_sl_matrix(0 TO wi-1, 0 TO wj-1) := mat; -- map to fixed range VARIABLE v_result : STD_LOGIC := '1'; -- GitLab