Skip to content
Snippets Groups Projects
Commit 83d35877 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Added array_and() and array_or() functions for t_nat_boolean_arr.

parent c199ec2b
No related branches found
No related tags found
2 merge requests!28Master,!15Resolve L2SDP-27
...@@ -206,6 +206,9 @@ PACKAGE common_pkg IS ...@@ -206,6 +206,9 @@ PACKAGE common_pkg IS
FUNCTION orv( slv : STD_LOGIC_VECTOR) RETURN STD_LOGIC; -- alias of vector_or 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 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_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' 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 ...@@ -757,6 +760,20 @@ PACKAGE BODY common_pkg IS
RETURN vector_tree(slv, "XOR"); RETURN vector_tree(slv, "XOR");
END; 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 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_mat : t_sl_matrix(0 TO wi-1, 0 TO wj-1) := mat; -- map to fixed range
VARIABLE v_result : STD_LOGIC := '1'; VARIABLE v_result : STD_LOGIC := '1';
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment