Naast een register is het ook mogelijk om een latch te hebben. Allebei hebben ze een geheugenwerking en werken ze ten opzichte van een clock. Toch is er een belangrijk verschil.

Register vs Latch
Een register zal op een stijgende (of dalende) klokflank een sample nemen van de input.
Een latch zal tijdens de positieve (of negatieve) halve klok periode een sample nemen van de input.
Alhoewel een latch wel de bedoeling kan zijn bij het design van een ASIC, bij het design voor een FPGA zijn Latches absoluut te vermijden. De tools kunnen heel slecht om (timing gewijs) met latches en meestal zijn ze ook niet gewenst.
Onbedoelde latches
Helaas zijn er een aantal constructies waarbij er een latch gemaakt wordt zonder dat de designer dit wenst.
Deze VHDL code probeert een beschrijving te geven van een multiplexer.
De sensitivy list is echter niet compleet. Als de input rotate_right verandert, wordt de output (transformed) echter niet aangepast.
PMUX: process(rotate_left, MUX_select)
begin
if MUX_select = '0' then
transformed <= rotate_left;
else
transformed <= rotate_right;
end if;
end process PMUX;
PMUX: process(rotate_left, rotate_right, MUX_select)
begin
if MUX_select = '0' then
transformed <= rotate_left;
else if MUX_select = '1' then
transformed <= rotate_right;
end if;
end process PMUX;
Deze VHDL code probeert een beschrijving te geven van een multiplexer.
De sensitivy list is correct, maar niet alle keuze opties zijn beschreven.
Wat ontbreekt?
In dit voorbeeld is de sensitivy list volledig en zijn alle opties van result(0) gecovered.
Wat is de waarde van even in het geval dat result(0) 1 is?
PEVENODD: process(result)
begin
if result(0) = '0' then
even <= '1';
else
odd <= '1'
end if;
end process PEVENODD;
Even voor de zekerheid … latches moeten vermeden worden bij FPGA design