in that case theres no need for any generate loops, just what I proposed already:
either use an array of generics:
type generics_t is array(0 to n_generics-1) of integer;
type generics_array_t is array(1 to 40) of generics_t;
constant GENERICS_ARRAY : generics_array_t := ( (0,1,2),
(4,5,6),
--etc
);
....
--then in the code
entity top is
generic (
GENERIC_SEL : integer range GENERICS_ARRAY'range := 7
)
.......
some_ent : entity work.my_ent
generic map (
gen0 => GENERICS_ARRAY(GENERIC_SEL)(0),
gen1 => GENERICS_ARRAY(GENERIC_SEL)(1),
--etc
)
.....
or if you have a different type for each generic (and its neater anyway, use a record type:
type generics_t is
record
gen0 : integer;
gen1 : string;
gen2 : boolean;
end record generics_t;
type generics_array_t is array(1 to 40) of generics_t;
constant GENERICS_ARRAY : generics_array_t := ( (gen0 => 0, gen1 => "ZERO", gen2 => false), --combination 0
(gen0 => 1, gen1 => "ONE", gen2 => true), --combination 1
--etc
);
....
--then in the code
entity top is
generic (
GENERIC_SEL : integer range GENERICS_ARRAY'range := 7
)
.......
some_ent : entity work.my_ent
generic map (
gen0 => GENERICS_ARRAY(GENERIC_SEL).gen0,
gen1 => GENERICS_ARRAY(GENERIC_SEL).gen1,
--etc
)
.....