Velocity Reviews > VHDL > Values larger than 32 bit using conv_std_logic_vector

# Values larger than 32 bit using conv_std_logic_vector

Willem Oosthuizen
Guest
Posts: n/a

 07-01-2003
signal D is defined as std_logic_vector(51 downto 0)

D <= conv_std_logic_vector(2**n+16#ff#,D'length); only works correctly for
integer n < 31. How can I make it work for integer n < 52 ?

Any suggestions? Why is there this 32 bit limit?

Alan Fitch
Guest
Posts: n/a

 07-02-2003

"Jon" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) om...
> "Willem Oosthuizen" <(E-Mail Removed)> wrote in message

news:<bdrp4d\$i48\$(E-Mail Removed)>...
> > signal D is defined as std_logic_vector(51 downto 0)
> >
> > D <= conv_std_logic_vector(2**n+16#ff#,D'length); only

works correctly for
> > integer n < 31. How can I make it work for integer n <

52 ?
> >
> > Any suggestions? Why is there this 32 bit limit?

>
> Hi Willem,
> VHDL defined the minimum supported range of an integer

to be -2^32
> to (2^31)-1. Some simulators extended the range for

integers and you
> would have to check to see if yours did.
> One way not very efficient is to break up the number

into a sum of
> integers each no greater than 2^32.
>
> jon

I know this is very pedantic but the range is guaranteed
to be
(-2^32)+1 to (2^31)-1, i.e. the most negative number is not
guaranteed by
the standard to be included. Of course in practice is always
is!

Regarding the original question, you might be able to
achieve something
similar using shifts. It's not clear from your original code
if n is a
constant or a signal. I shall assume it's a signal.

process(n)
begin
D <= (others => '0'); -- all bits 0
D(n) <= '1'); -- e.g. n = 0 => set bit 0, n = 1 =>
set bit 1
D(7 downto 0) <= X"FF";
end process;

If n is locally static (i.e. a constant), then you *should*
be able to write

D <= (n=> '1', 7 downto 0 => '1', others => '0');

kind regards

Alan

--
Alan Fitch
Consultant

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

Doulos Ltd. Church Hatch, 22 Market Place, Ringwood,
Hampshire, BH24 1AW, UK
Tel: +44 (0)1425 471223 mail:
http://www.velocityreviews.com/forums/(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.

Allan Herriman
Guest
Posts: n/a

 07-02-2003
On 1 Jul 2003 08:16:13 -0700, (E-Mail Removed) (Jon) wrote:

>"Willem Oosthuizen" <(E-Mail Removed)> wrote in message news:<bdrp4d\$i48\$(E-Mail Removed)>...
>> signal D is defined as std_logic_vector(51 downto 0)
>>
>> D <= conv_std_logic_vector(2**n+16#ff#,D'length); only works correctly for
>> integer n < 31. How can I make it work for integer n < 52 ?
>>
>> Any suggestions? Why is there this 32 bit limit?

>
>Hi Willem,
> VHDL defined the minimum supported range of an integer to be -2^32
>to (2^31)-1.

Minor correction: the minimum supported range of an integer is
-((2^32)-1) to +((2^32)-1)

Amost all tools do extend the lower range to -(2^32) though.

Regards,
Allan.

Willem Oosthuizen
Guest
Posts: n/a

 07-02-2003
I said:
D <= conv_std_logic_vector(2**n+16#ff#,D'length);

Alan Said:
> process(n)
> begin
> D <= (others => '0'); -- all bits 0
> D(n) <= '1'); -- e.g. n = 0 => set bit 0, n = 1 =>
> set bit 1
> D(7 downto 0) <= X"FF";
> end process;

This is not equivalent. What about the carry when n < 8 ?

"Alan Fitch" <(E-Mail Removed)> wrote in message
news:bdu5fd\$6h4\$1\$(E-Mail Removed)...
>
> "Jon" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed) om...
> > "Willem Oosthuizen" <(E-Mail Removed)> wrote in message

> news:<bdrp4d\$i48\$(E-Mail Removed)>...
> > > signal D is defined as std_logic_vector(51 downto 0)
> > >
> > > D <= conv_std_logic_vector(2**n+16#ff#,D'length); only

> works correctly for
> > > integer n < 31. How can I make it work for integer n <

> 52 ?
> > >
> > > Any suggestions? Why is there this 32 bit limit?

> >
> > Hi Willem,
> > VHDL defined the minimum supported range of an integer

> to be -2^32
> > to (2^31)-1. Some simulators extended the range for

> integers and you
> > would have to check to see if yours did.
> > One way not very efficient is to break up the number

> into a sum of
> > integers each no greater than 2^32.
> >
> > jon

>
> I know this is very pedantic but the range is guaranteed
> to be
> (-2^32)+1 to (2^31)-1, i.e. the most negative number is not
> guaranteed by
> the standard to be included. Of course in practice is always
> is!
>
> Regarding the original question, you might be able to
> achieve something
> similar using shifts. It's not clear from your original code
> if n is a
> constant or a signal. I shall assume it's a signal.
>
> process(n)
> begin
> D <= (others => '0'); -- all bits 0
> D(n) <= '1'); -- e.g. n = 0 => set bit 0, n = 1 =>
> set bit 1
> D(7 downto 0) <= X"FF";
> end process;
>
> If n is locally static (i.e. a constant), then you *should*
> be able to write
>
> D <= (n=> '1', 7 downto 0 => '1', others => '0');
>
>
> kind regards
>
> Alan
>
> --
> Alan Fitch
> Consultant
>
> DOULOS - Developing Design Know-how
> VHDL * Verilog * SystemC * Perl * Tcl/Tk * Verification *
> Project Services
>
> Doulos Ltd. Church Hatch, 22 Market Place, Ringwood,
> Hampshire, 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.
>

Jon
Guest
Posts: n/a

 07-03-2003
Hi Willem,
All you have to do is what Alan said execpt add 255 to D in places
of directly assigning the lsbs to 255. Using the right packages you
can do 2's complement signed or unsigned using std_logic_vector.

jon

"Willem Oosthuizen" <(E-Mail Removed)> wrote in message news:<bdudo2\$bda\$(E-Mail Removed)>...
> I said:
> D <= conv_std_logic_vector(2**n+16#ff#,D'length);
>
> Alan Said:
> > process(n)
> > begin
> > D <= (others => '0'); -- all bits 0
> > D(n) <= '1'); -- e.g. n = 0 => set bit 0, n = 1 =>
> > set bit 1
> > D(7 downto 0) <= X"FF";
> > end process;

>
> This is not equivalent. What about the carry when n < 8 ?
>
> "Alan Fitch" <(E-Mail Removed)> wrote in message
> news:bdu5fd\$6h4\$1\$(E-Mail Removed)...
> >
> > "Jon" <(E-Mail Removed)> wrote in message
> > news:(E-Mail Removed) om...
> > > "Willem Oosthuizen" <(E-Mail Removed)> wrote in message

> news:<bdrp4d\$i48\$(E-Mail Removed)>...
> > > > signal D is defined as std_logic_vector(51 downto 0)
> > > >
> > > > D <= conv_std_logic_vector(2**n+16#ff#,D'length); only

> works correctly for
> > > > integer n < 31. How can I make it work for integer n <

> 52 ?
> > > >
> > > > Any suggestions? Why is there this 32 bit limit?
> > >
> > > Hi Willem,
> > > VHDL defined the minimum supported range of an integer

> to be -2^32
> > > to (2^31)-1. Some simulators extended the range for

> integers and you
> > > would have to check to see if yours did.
> > > One way not very efficient is to break up the number

> into a sum of
> > > integers each no greater than 2^32.
> > >
> > > jon

> >
> > I know this is very pedantic but the range is guaranteed
> > to be
> > (-2^32)+1 to (2^31)-1, i.e. the most negative number is not
> > guaranteed by
> > the standard to be included. Of course in practice is always
> > is!
> >
> > Regarding the original question, you might be able to
> > achieve something
> > similar using shifts. It's not clear from your original code
> > if n is a
> > constant or a signal. I shall assume it's a signal.
> >
> > process(n)
> > begin
> > D <= (others => '0'); -- all bits 0
> > D(n) <= '1'); -- e.g. n = 0 => set bit 0, n = 1 =>
> > set bit 1
> > D(7 downto 0) <= X"FF";
> > end process;
> >
> > If n is locally static (i.e. a constant), then you *should*
> > be able to write
> >
> > D <= (n=> '1', 7 downto 0 => '1', others => '0');
> >
> >
> > kind regards
> >
> > Alan
> >
> > --
> > Alan Fitch
> > Consultant
> >
> > DOULOS - Developing Design Know-how
> > VHDL * Verilog * SystemC * Perl * Tcl/Tk * Verification *
> > Project Services
> >
> > Doulos Ltd. Church Hatch, 22 Market Place, Ringwood,
> > Hampshire, 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.
> >

Alan Fitch
Guest
Posts: n/a

 07-03-2003

"Jon" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) om...
> Hi Willem,
> All you have to do is what Alan said execpt add 255 to D

in places
> of directly assigning the lsbs to 255. Using the right

packages you
> can do 2's complement signed or unsigned using

std_logic_vector.
>
> jon
>
>
> "Willem Oosthuizen" <(E-Mail Removed)> wrote in message

news:<bdudo2\$bda\$(E-Mail Removed)>...
> > I said:
> > D <= conv_std_logic_vector(2**n+16#ff#,D'length);
> >
> > Alan Said:
> > > process(n)
> > > begin
> > > D <= (others => '0'); -- all bits 0
> > > D(n) <= '1'); -- e.g. n = 0 => set bit 0, n = 1

=>
> > > set bit 1
> > > D(7 downto 0) <= X"FF";
> > > end process;

> >
> > This is not equivalent. What about the carry when n < 8

?
> >

Sorry, brain failure - luckily Jon has answered it for me!

I must work out how to get outlook express to wrap
sensibly as well...

regards

Alan

--
Alan Fitch
Consultant

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

Doulos Ltd. Church Hatch, 22 Market Place, Ringwood,
Hampshire, 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.

 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 OffTrackbacks are On Pingbacks are On Refbacks are Off Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post cooldisk@gmail.com C++ 6 10-04-2007 08:14 AM Paul Boven VHDL 1 09-25-2005 04:53 PM Peter Williams HTML 1 06-03-2005 08:17 AM lbbss Computer Support 6 04-14-2005 05:46 PM walala VHDL 2 09-06-2003 08:31 AM

Advertisments