De meeste designs hebben ergens wel een bus, of een signaal dat een vector is. Daarom kan het ook vaak voorkomen dat VHDL-code nogal veel herhalingen heeft. Neem bijvoorbeeld het design hier onder, waarbij er een and gedaan wordt voor elke input-paar. Rechts zie je een beschrijving hiervan in VHDL.
...
y(0) <= x(0) and x(1);
y(1) <= x(2) and x(3);
y(2) <= x(4) and x(5);
y(3) <= x(6) and x(7);
...
Zolang dat het aantal bits in deze X-vector behapbaar blijft, kan je dat volledig uitschrijven. Als deze vector te breed wordt, dan begint het pijnlijk te worden. In VHDL wordt hieraan tegemoet gekomen mbv een for-generate. Deze constructie bespaart aanzienlijk veel “beschrijf werkt” zonder aan de functionaliteit te komen.
Het uiteindelijke design verandert niet omdat een for-generate gebruikt wordt.
...
GENERATE_LABEL_DAT_JE_ZELF_MAG_KIEZEN: for i in 0 to 3 generate
y(i) <= x(i*2) and x(i*2+1)
end generate GENERATE_LABEL_DAT_JE_ZELF_MAG_KIEZEN;
...
Het kan, voor beginnende VHDL-gebruikers soms verwarrend zijn hoe deze indices gebruikt moeten worden. Een goede tip is om de eerste 2-3 instanties volledig uit te schrijven. Hiermee kan het patroon van de indices gemakkelijker herkend worden.
Ook het instantiëren van een component kan gebeuren met een for-generate. Indien men het bovenstaande voorbeeld willen beschrijven met de AND-poort uit het vorige hoofdstuk, kan dit als volgt:
...
GEN_AND: for i in 0 to 3 generate
and_gate_inst: component and_gate port map(
A => x(i*2),
B => x(i*2+1),
Z => y(i)
);
end generate GEN_AND;
...
Vivado kan een schematische voorstelling maken van de hardware beschrijving met RTL analysis elaborate design.