Go Back   Velocity Reviews > Newsgroups > VHDL
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

Reply

VHDL - Initialization of an unconstrained array object to the null array

 
Thread Tools Search this Thread
Old 08-18-2008, 03:37 AM   #1
Default Initialization of an unconstrained array object to the null array


On Jun 12 2002, 5:51 pm, b...@altavista.com (Bill Austin) wrote:
> Let A be an unconstrained array, e.g.
> TYPE A is array(natural range <>) or integer.
> Consider creating objects of type A and initializing them via
> aggregates:
>
> OBJ2 : A := (3, 7); -- Creates a two-element object
> -- with A(0)=3 and A(1)=7.
>
> OBJ1 : A := (0 => 3); -- Creates a one-element object
> -- with A(0)=3.
> --(Named association required,
> -- see e.g. the VHLD FAQ)
>
> OBJ0 : A := ? -- how can OBJ0 be initialized
> -- to anull array?
>
> The aggregate syntax (LRM 7.3.2) does not appear to allow for
> initialization using an aggregate. Can someone confirm this? Anybody
> have a suggestion for initializing OBJ0 to anull array?


I'm trying to do the same thing with a default value for a generic.
It looks like this will do the trick:

OBJ0 : A := (1 to 0 => 0); -- invalid range results in null array

However I was hoping to find something that doesn't look like a
kludge. Any ideas?


jens
  Reply With Quote
Old 08-18-2008, 09:09 AM   #2
sandeep
 
Posts: n/a
Default Re: Initialization of an unconstrained array object to the null array
On Aug 18, 10:37*am, jens <ro...@rochester.rr.com> wrote:
> On Jun 12 2002, 5:51 pm, b...@altavista.com (Bill Austin) wrote:
>
>
>
>
>
> > Let A be an unconstrained array, e.g.
> > * * TYPE A is array(natural range <>) or integer.
> > Consider creating objects of type A and initializing them via
> > aggregates:

>
> > * OBJ2 : A := (3, 7); * -- Creates a two-element object
> > * * * * * * * * * * * * -- with A(0)=3 and A(1)=7.

>
> > * OBJ1 : A := (0 => 3); -- Creates a one-element object
> > * * * * * * * * * * * * -- with A(0)=3.
> > * * * * * * * * * * * * --(Named association required,
> > * * * * * * * * * * * * -- see e.g. the VHLD FAQ)

>
> > * OBJ0 : A := ? * * * * -- how can OBJ0 be initialized
> > * * * * * * * * * * * * -- to anull array?

>
> > The aggregate syntax (LRM 7.3.2) does not appear to allow for
> > initialization using an aggregate. Can someone confirm this? Anybody
> > have a suggestion for initializing OBJ0 to anull array?

>
> I'm trying to do the same thing with a default value for a generic.
> It looks like this will do the trick:
>
> OBJ0 : A := (1 to 0 => 0); -- invalid range results in null array
>
> However I was hoping to find something that doesn't look like a
> kludge. *Any ideas?- Hide quoted text -
>
> - Show quoted text -


Can we write
OBJ0 : A := (others => 0);

regards



sandeep
  Reply With Quote
Old 08-18-2008, 09:45 AM   #3
Tricky
 
Posts: n/a
Default Re: Initialization of an unconstrained array object to the null array
On 18 Aug, 03:37, jens <ro...@rochester.rr.com> wrote:
> On Jun 12 2002, 5:51 pm, b...@altavista.com (Bill Austin) wrote:
>
>
>
> > Let A be an unconstrained array, e.g.
> > * * TYPE A is array(natural range <>) or integer.
> > Consider creating objects of type A and initializing them via
> > aggregates:

>
> > * OBJ2 : A := (3, 7); * -- Creates a two-element object
> > * * * * * * * * * * * * -- with A(0)=3 and A(1)=7.

>
> > * OBJ1 : A := (0 => 3); -- Creates a one-element object
> > * * * * * * * * * * * * -- with A(0)=3.
> > * * * * * * * * * * * * --(Named association required,
> > * * * * * * * * * * * * -- see e.g. the VHLD FAQ)

>
> > * OBJ0 : A := ? * * * * -- how can OBJ0 be initialized
> > * * * * * * * * * * * * -- to anull array?

>
> > The aggregate syntax (LRM 7.3.2) does not appear to allow for
> > initialization using an aggregate. Can someone confirm this? Anybody
> > have a suggestion for initializing OBJ0 to anull array?

>
> I'm trying to do the same thing with a default value for a generic.
> It looks like this will do the trick:
>
> OBJ0 : A := (1 to 0 => 0); -- invalid range results in null array
>
> However I was hoping to find something that doesn't look like a
> kludge. *Any ideas?



An invalid range will result in a failed compilation, as well as only
initialising part of an array. You need to use (others => 0) to make
sure it is complete. Afaik, the only things that are allowed to be
null are pointers. An unitialised value will always take the lowest
value if it is left unassaigned.

So for example:

OBJO : A(1 downto 0); will give an array where A(0) and A(1) =
integer'low.

For all 0's, just assign (others => 0)

The example you gave ( OBJ0 : A := (1 to 0 => 0); ) just gives a 2
element array with both values set to 0. You cannot have an
unconstrained array in VHDL.

So the example above: OBJO : A := (others => 0) is invalid because
there is no range on OBJO.


Tricky
  Reply With Quote
Old 08-19-2008, 03:29 AM   #4
jens
 
Posts: n/a
Default Re: Initialization of an unconstrained array object to the null array
Thanks for the info. It's interesting to note that numeric_std uses
what appears to be a kludge. However that technique doesn't work for
a generic, as there's a mismatch between the null array length of 0
and the aggregate length of 1 when there's a non-default value passed
into the generic. It looks like

OBJ0 : A := (1 to 0 => 0); -- invalid range results in null array
or
OBJ0 : A := (0 downto 1 => 0); -- invalid range results in null array

may be the only solutions.


jens
  Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

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

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




SEO by vBSEO 3.3.2 ©2009, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46