How to define a constant of an array of records?

M

mamu

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;
 
T

Tricky

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.
 
T

Tricky

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;
 
M

mamu

Thanks! It is working fine now. I haven't tested the function option
yet, but it shouldn't be a problem.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,994
Messages
2,570,223
Members
46,810
Latest member
Kassie0918

Latest Threads

Top