generate ifadesi, VHDL’de tekrarlanan lojikler eşitlikler veya component örneklerinde kullanılır. İki tip generate ifadesi mevcuttur :
- if generate
- for generate
Bu ifadelerden if generate çok nadir kullanılır. Fakat for generate sıklıkla kullanılan bir ifadedir ve genel gösterimi aşağıda verilmiştir.
for değer in aralik generate ifade ; {ifade ;} end generate;
Aşağıda verilen örnekte 4 bitlik std_logic_vector tipinde sinyal_1 sinyaline başlangıç değeri olarak “0001” atanmıştır. sinyal_2 sinyali de 5 bitlik std_logic_vector tipinde tanımlanmıştır. sinyal_2 sinyalinin en anlamsız bitine ‘1’ değeri atanmaktadır. Daha sonra for generate döngüsü içerisinde sinyal_1 ve sinyal_2’ye ait n_i. bitler xor işlemine tabi tutulduktan sonra sinyal_2’nin n_i + 1. bitine atamaktadır. Koda ilişkin devre benzetimi Şekil 1’de verilmiştir.
.. .. signal sinyal_1 : std_logic_vector(3 downto 0) := “0001”; signal sinyal_2 : std_logic_vector(4 downto 0); .. .. sinyal_2(0) <= ‘1’; for_kontrol: for n_i 0 to 3 generate sinyal_2(n_i + 1) <= sinyal_2(n_i) xor sinyal_1(n_i) end generate for_kontrol; .. ..

Şekil 1 for generate için verilen örneğe ilişkin lojik gösterim
if generate ifadesinin genel gösterimi aşağıda verilmiştir.
if koşul generate ifade ; {ifade ;} end generate;
Örnek 1: Aşağıda verilen for_if_generate.vhd VHDL kodunda for generate ve if generate ifadeleri kullanılarak 8 bitlik toplayıcı tasarımı yapılmıştır. for_kontrol etiketli for generate döngüsü ile ardışık olarak oluşturulan toplayıcı devreleri ile toplama sonucu elde edilmektedir. Döngü içerisinde bulunan if_kontrol_EAB etiketli if generate söz dizimi ile sadece n_i değerinin sıfır olduğu durumda söz dizimi içerisinde bulunan yarı toplayıcı lojik eşitlikleri aktif hale gelmektedir. n_i’nin diğer durumlarında ise bu blok pasif durumda olacaktır. if_kontrol_DB etiketli if generate söz dizimi ile sadece n_i değerinin sıfırdan farklı olduğu durumlarda söz dizimi içerisinde bulunan tam toplayıcı lojik eşitlikleri aktif hale getirmektedir.
library IEEE; use IEEE.STD_LOGIC_1164.all; entity for_if_generate is port ( in_giris_1 : in std_logic_vector(7 downto 0); in_giris_2 : in std_logic_vector(7 downto 0); out_cikis : out std_logic_vector(7 downto 0); out_cikis_elde : out std_logic ); end for_if_generate; architecture Behavioral of for_if_generate is signal r_toplam : std_logic_vector(8 downto 1); begin for_kontrol : for n_i in 0 to 7 generate if_kontrol_EAB : if n_i = 0 generate out_cikis(n_i)<= in_giris_1(n_i) xor in_giris_2(n_i); r_toplam(n_i + 1)<= in_giris_1(n_i) and in_giris_2(n_i); end generate if_kontrol_EAB; if_kontrol_DB : if n_i> 0 generate out_cikis(n_i) <= r_toplam(n_i) xor in_giris_1(n_i) xor in_giris_2(n_i); r_toplam(n_i + 1)<= (r_toplam(n_i) and in_giris_1(n_i)) or (in_giris_1(n_i) and in_giris_2(n_i)) or (in_giris_2(n_i) and r_toplam(n_i)); end generate if_kontrol_DB; end generate for_kontrol; out_cikis_elde <= r_toplam(8); end Behavioral;
Örnek 2: Yukarıda verilen for_if_generate.vhd VHDL kodunda yarı toplayıcı ve tam toplayıcı lojik eşitlikleri yerine yari_toplayici ve tam_toplayici alt devrelerinin kullanıldığı port_map_for_if_generate.vhd VHDL kodu aşağıda verilmiştir. Kodda 40-46. satırlarda yari_toplayici alt devre tasarımı yapılmıştır. Kodda 50-47. satırlarda tam_toplayici alt devre tasarımı yapılmıştır.
library IEEE; use IEEE.STD_LOGIC_1164.all; entity port_map_for_if_generate is Port ( in_giris_1 : in std_logic_vector(7 downto 0); in_giris_2 : in std_logic_vector(7 downto 0); out_cikis_elde : out std_logic; out_cikis : out std_logic_vector(7 downto 0) ); end port_map_for_if_generate; architecture Behavioral of port_map_for_if_generate is component yari_toplayici port( in_giris_1 : in std_logic; in_giris_2 : in std_logic; out_cikis : out std_logic; out_cikis_elde : out std_logic ); end component; component tam_toplayici port( in_giris_elde : in std_logic; in_giris_1 : in std_logic; in_giris_2 : in std_logic; out_cikis : out std_logic; out_cikis_elde : out std_logic ); end component; signal r_toplam : std_logic_vector(8 downto 1); begin for_kontrol : for n_i in 0 to 7 generate if_kontrol_EAB : if n_i = 0 generate yari_toplayici_map : yari_toplayici port map( in_giris_1 => in_giris_1(n_i), in_giris_2 => in_giris_2(n_i), out_cikis => out_cikis(n_i), out_cikis_elde => r_toplam(n_i + 1) ); end generate if_kontrol_EAB; if_kontrol_DB : if n_i > 0 generate tam_toplayici_map : tam_toplayici port map( in_giris_elde => r_toplam(n_i), in_giris_1 => in_giris_1(n_i), in_giris_2 => in_giris_2(n_i), out_cikis => out_cikis(n_i), out_cikis_elde => r_toplam(n_i + 1) ); end generate if_kontrol_DB; end generate for_kontrol; out_cikis_elde <= r_toplam(8); end Behavioral;