EmbDev.net

Forum: FPGA, VHDL & Verilog ceil and log2 functions


von Matt (Guest)


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

von Markus F. (mfro)


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.

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.