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 xor_reduce (data : in std_logic_vector) return std_logic; function even_parity (data : in std_logic_vector) return std_logic; function odd_parity (data : in std_logic_vector) return std_logic; function count_ones (data : in std_logic_vector) return natural; 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 xor_reduce (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 xor_reduce; function even_parity (data : in std_logic_vector) return std_logic is begin return xor_reduce(data); end function even_parity; function odd_parity (data : in std_logic_vector) return std_logic is begin return not(xor_reduce(data)); end function odd_parity; function count_ones (data : in std_logic_vector) return natural is variable v_return : natural := 0; begin for i in data'range loop v_return := v_return + 1; end loop; end function count_ones; end package body UtilsP;