Mandalları önlemek için, tüm çıkışlarınızın kodun tüm olası dallarına atandığından emin olmanız gerekir.
Örneğin,
if a = '1' then
b(0) <= '1';
else
b(1 downto 0) <= "00";
end if;
ilk durumda b (1) değeri belirtilmediğinden, bir derleyici b (1) 'in önceki değerini orada tutmak istediğinize karar verdi. Bir mandal üretmeyecek şekilde yazmanın bir yolu:
if a = '1' then
b <= prev_b;
b(0) <= '1';
else
b(1 downto 0) <= "00";
end if;
...
if rising_edge (clk)
prev_b <= b;
end if;
Burada b'nin eski değerini korumasını ve ardından yeni değerle b (0) üzerine yazması gerektiğini açıkça belirtirsiniz.
Başka bir yol, @ TomiJ'nin cevabında olduğu gibi ba varsayılan değerini vermektir.
Bir mandal aldığınız kodu gönderirseniz, belirli bir nedeni bulmanıza yardımcı olabiliriz.