Velocity Reviews > VHDL > log2(N)

# log2(N)

ALuPin
Guest
Posts: n/a

 08-27-2004
What library do I need to declare the following signal:

constant L: integer:=log2(N); --ceiling log2(N)

Kind regards

Jonathan Bromley
Guest
Posts: n/a

 08-27-2004
On 27 Aug 2004 03:24:25 -0700, http://www.velocityreviews.com/forums/(E-Mail Removed) (ALuPin) wrote:

>What library do I need to declare the following signal:
>
>constant L: integer:=log2(N); --ceiling log2(N)

Sadly, that one is missing... but this will work
in both synthesis and simulation:

package usefuls is
--- find minimum number of bits required to
--- represent N as an unsigned binary number
---
function log2_ceil(N: natural) return positive;
end;

package body usefuls is
--- find minimum number of bits required to
--- represent N as an unsigned binary number
---
function log2_ceil(N: natural) return positive is
begin
if N < 2 then
return 1;
else
return 1 + log2_ceil(N/2);
end if;
end;
end;

Converting my tail-recursive function into
an iterative implementation is left as an exercise
for the student
--
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL, Verilog, SystemC, Perl, Tcl/Tk, Verification, Project Services

Doulos Ltd. Church Hatch, 22 Market Place, Ringwood, BH24 1AW, UK
Tel: +44 (0)1425 471223 mail:(E-Mail Removed)
Fax: +44 (0)1425 471573 Web: http://www.doulos.com

The contents of this message may contain personal views which
are not the views of Doulos Ltd., unless specifically stated.

David Bishop
Guest
Posts: n/a

 08-29-2004
This code is from the proposed floating point packages.

-- Integer version of the "log2" command
-- Synthisable
function log2(A : natural) return natural is
begin
for I in 1 to 30 loop -- Works for up to 32 bit integers
if(2**I > A) then return(I-1);
end if;
end loop;
return(30);
end function log2;

ALuPin wrote:

> What library do I need to declare the following signal:
>
> constant L: integer:=log2(N); --ceiling log2(N)
>
>
> Thank you for your help.
>
> Kind regards

--
NAME: David W. Bishop INTERNET: (E-Mail Removed)

Michael
Guest
Posts: n/a

 09-01-2004
Dave,

When do you think the VHDL-200X effort will be finalized? Are we going
to have a VHDL 2004 standard? 2005?

Just curious

David Bishop wrote:
> This code is from the proposed floating point packages.
>
> -- Integer version of the "log2" command
> -- Synthisable
> function log2(A : natural) return natural is
> begin
> for I in 1 to 30 loop -- Works for up to 32 bit integers
> if(2**I > A) then return(I-1);
> end if;
> end loop;
> return(30);
> end function log2;
>
> ALuPin wrote:
>
>> What library do I need to declare the following signal:
>>
>> constant L: integer:=log2(N); --ceiling log2(N)
>>
>>
>> Thank you for your help.
>>
>> Kind regards

>
>

texvnirap
Junior Member
Join Date: Sep 2009
Posts: 1

 09-17-2009
function log2_ceil(N: natural) return positive is
begin
if N < 2 then
return 1;
else
return 1 + log2_ceil(N/2);
end if;
end;

The above function is not correct (try N=2).

I think this works:

function log2_ceil(N : integer) return integer is
begin

if (N <= 2) then
return 1;
else
if (N mod 2 = 0) then
return 1 + log2_ceil(N/2);
else
return 1 + log2_ceil((N+1)/2);
end if;
end if;
end function log2_ceil;