![]() |
|
|
|||||||
![]() |
VHDL - Initialization of an unconstrained array object to the null array |
|
|
Thread Tools | Search this Thread |
|
|
#1 |
|
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 |
|
|
|
|
#2 |
|
Posts: n/a
|
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 |
|
|
|
#3 |
|
Posts: n/a
|
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 |
|
|
|
#4 |
|
Posts: n/a
|
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 |
|