Um Latches zu vermeiden, müssen Sie sicherstellen, dass alle Ihre Ausgaben in allen möglichen Zweigen des Codes zugewiesen sind.
zum Beispiel,
if a = '1' then
b(0) <= '1';
else
b(1 downto 0) <= "00";
end if;
würde einen Latch erzeugen, da in der ersten Bedingung der Wert von b (1) nicht angegeben ist, sodass der Compiler entschieden hat, dass Sie den vorherigen Wert von b (1) dort behalten möchten. Eine Möglichkeit, dies zu schreiben, ohne dass ein Latch generiert wird, ist:
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;
Hier geben Sie explizit an, dass b seinen alten Wert beibehalten und dann b (0) mit dem neuen Wert überschreiben soll.
Eine andere Möglichkeit besteht darin, einen Standardwert anzugeben, wie in der Antwort von @ TomiJ.
Wenn Sie den Code veröffentlichen, für den Sie einen Latch erhalten, können wir Ihnen helfen, den spezifischen Grund zu finden.