diff --git a/libraries/base/common/src/vhdl/common_pkg.vhd b/libraries/base/common/src/vhdl/common_pkg.vhd
index 45429006032f3e26fdb0a44a69d283ff9152b161..dbbea6568eb6d61c57cb9d84333d5d2f13ebcedf 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';