How to define a constant of an array of records?

M

mamu

Guest
I want to make a lookup table where each entry in the table is record
type. I can define the types but I can't figure out a way to set the
(init) values in the declaration of a constant of that type I just
defined.

package altera_profile_pkg is

type profile_record_type is record
C_NUMBER_OF_SAMPLES : natural range 1 to 15000;
end record profile_record_type;

type lookup_table_type is array (natural range <>) of
profile_record_type;

constant profiles_table : lookup_table_type(0 to 15) := <what goes
here?>

end package altera_profile_pkg;
 
On 13 Nov, 08:09, mamu <magnem...@yahoo.no> wrote:
I want to make a lookup table where each entry in the table is record
type. I can define the types but I can't figure out a way to set the
(init) values in the declaration of a constant of that type I just
defined.

package altera_profile_pkg is

type profile_record_type is record
    C_NUMBER_OF_SAMPLES    : natural range 1 to 15000;
end record profile_record_type;

type lookup_table_type is array (natural range <>) of
profile_record_type;

constant profiles_table : lookup_table_type(0 to 15) := <what goes
here?

end package altera_profile_pkg;

if you had more than 1 element in the record,
eg:

type profile_record_type is record
C_NUMBER_OF_SAMPLES : natural range 1 to 15000;
A : integer;
end record profile_record_type;

you can use positional association:

constant profiles_table : lookup_table_type(0 to 15) :( (1, 1), --element 0
(2, 2), --element 1
(3, 3), --element 2
etc.....
);

but as you've only got 1 element, you have to use named association
(which is a good idea for readability anyway:

constant profiles_table : lookup_table_type(0 to 15) : ( (C_NUMBER_OF_SAMPLES => 1), --element 0,
(C_NUMBER_OF_SAMPLES => 2), --element 1,
(C_NUMBER_OF_SAMPLES => 3), --element 2,
etc....
);

Inner barckets are important to specify that it is a contained
element.
 
Forgot to add: you can also call a function that returns
"lookup_table_type"

function create_lookup_table return lookup_table_type is
variable return_array : lookup_table_type(0 to 15);
begin
for i in return_array'range loop
return_array(i) := (C_NUMBER_OF_SAMPLES => i);
end loop;

return return_array;
end function;

constant profiles_table : lookup_table_type(0 to 15) :=
create_lookup_table;
 
Thanks! It is working fine now. I haven't tested the function option
yet, but it shouldn't be a problem.
 

Welcome to EDABoard.com

Sponsor

Back
Top