Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > log2(N)

Reply
Thread Tools

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)


Thank you for your help.

Kind regards
 
Reply With Quote
 
 
 
 
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.
 
Reply With Quote
 
 
 
 
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)

 
Reply With Quote
 
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

>
>


 
Reply With Quote
 
texvnirap texvnirap is offline
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;
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments