library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package UtilsP is function and_reduce (data : in std_logic_vector) return std_logic; function and_reduce (data : in boolean_vector) return boolean; function or_reduce (data : in std_logic_vector) return std_logic; function or_reduce (data : in boolean_vector) return boolean; function even_parity (data : in std_logic_vector) return std_logic; function odd_parity (data : in std_logic_vector) return std_logic; end package UtilsP; package body UtilsP is function and_reduce (data : in std_logic_vector) return std_logic is begin for i in data'range loop if data(i) = '0' then return '0'; end if; end loop; return '1'; end function and_reduce; function and_reduce (data : in boolean_vector) return boolean is begin for i in data'range loop if (not(data(i))) then return false; end if; end loop; return true; end function and_reduce; function or_reduce (data : in std_logic_vector) return std_logic is begin for i in data'range loop if data(i) = '1' then return '1'; end if; end loop; return '0'; end function or_reduce; function or_reduce (data : in boolean_vector) return boolean is begin for i in data'range loop if data(i) then return true; end if; end loop; return false; end function or_reduce; function even_parity (data : in std_logic_vector) return std_logic is variable v_return : std_logic := '0'; begin for i in data'range loop v_return := v_return xor data(i); end loop; return v_return; end function even_parity; function odd_parity (data : in std_logic_vector) return std_logic is variable v_return : std_logic := '1'; begin for i in data'range loop v_return := v_return xor data(i); end loop; return v_return; end function odd_parity; end package body UtilsP;