library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package gen_pkg is subtype alu_ops is std_logic_vector(2 downto 0); constant ALU_NOP : alu_ops := "000"; constant ALU_SUB : alu_ops := "001"; constant ALU_ADD : alu_ops := "010"; constant ALU_MUL : alu_ops := "011"; constant ALU_DIV : alu_ops := "100"; constant ALU_DONE : alu_ops := "101"; constant CBITS : integer := 32; subtype csigned is signed((CBITS-1) downto 0); --TODO: bei CBITS-1 gibts einen overflow :/ subtype cinteger is integer range -(2**(CBITS-2)) to ((2**(CBITS-2))-1); function find_msb(a : csigned) return natural; end package gen_pkg; package body gen_pkg is function find_msb(a : csigned) return natural is variable r : natural := 0; begin for i in (CBITS-1) downto 0 loop exit when a(i) = '1'; r := r+1; end loop; return (CBITS - r); end function find_msb; end package body gen_pkg;