library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package gen_pkg is type alu_ops is (NOP, SUB, ADD, MUL, DIV, DONE); 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; variable count : boolean := true; begin for i in (CBITS-1) downto 0 loop if count then if a(i) = '1' then count := false; else r := r+1; end if; else null; end if; end loop; return (CBITS - r); end function find_msb; end package body gen_pkg;