library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package utils is function log2(i : natural) return integer; function log2ceil(i : natural) return integer; function ispow2(i : integer) return boolean; function round_up(i : integer; s : integer) return integer; end utils; package body utils is function log2(i : natural) return integer is variable tmp : integer := i; variable ret : integer := 0; begin while tmp > 1 loop ret := ret + 1; tmp := tmp / 2; end loop; return ret; end function; function log2ceil(i : natural) return integer is variable tmp : integer := i; variable ret : integer := 0; begin while tmp >= 1 loop ret := ret + 1; tmp := tmp / 2; end loop; return ret; end function; function ispow2(i : integer) return boolean is begin if to_integer(to_unsigned(i, 32) and to_unsigned(i - 1, 32)) = 0 then return true; else return false; end if; end function; function round_up(i : integer; s : integer) return integer is begin return ((i + (s - 1)) / s) * s; end function; end utils;