ceil and log2 functions

Guest #3892761
Rate this post
useful
not useful
I have the following line of code:

constant DPRAM_DEPTH : integer := integer(ceil(log2(real(NUM_SLOTS))));

When NUM_SLOTS equals 0, I want my DPRAM_WIDTH to be 0, however log2 of 
0 is negative infinity so I get an invalid result. How can I obtain 0 
when NUM_SLOTS is 0, and still get the functionality I want out of that 
snippet of code?

Thanks
#3892878
Rate this post
useful
not useful
If you just need this to define a constant, you can do something like 
this:
1
function log2ceil(m : integer) return integer is
2
begin
3
  for i in 0 to integer'high loop
4
        if 2 ** i >= m then
5
            return i;
6
        end if;
7
    end loop;
8
end function log2ceil;
9

10
constant x   : integer := log2ceil(16);

This way, it will not use up any logic during synthesis.

Reply

Please log in before posting.

or

Log in with Google account

Registration is free and takes only a minute.

Register now