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