Search code examples
vhdl

Number of bits to represent an integer in VHDL


I have to convert an integer to find how many bits are required to represent that integer. Let say, integer value is 22. I know 5 bits are required to represent this integer. Is there any attribute in VHDL to do this? Important: The result should also be an integer, which should represent number of bits.


Solution

  • There is no VHDL attribute or function, but you can create a function like:

    -- Returns number of bits required to represent val in binary vector
    function bits_req(val : natural) return natural is
      variable res_v    : natural;  -- Result
      variable remain_v : natural;  -- Remainder used in iteration
    begin
      res_v := 0;
      remain_v := val;
      while remain_v > 0 loop  -- Iteration for each bit required
        res_v := res_v + 1;
        remain_v := remain_v / 2;
      end loop;
      return res_v;
    end function;
    

    However, sometimes a ceil_log2 function is also useful, since that gives the number of required address bits based on entries in a memory map, and ceil_log2(val) = bits_req(val - 1).