Evite os latches no projeto

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Um latch é um pequeno loop combinacional que mantém o valor de um sinal até que um novo valor seja atribuído.

As ferramentas de síntese podem inferir latches a partir do código HDL (Hardware Description Language) quando você não pretendia usá-los. Se você pretende inferir um latch, é importante fazê-lo corretamente para garantir o funcionamento correto do dispositivo. Em alguns casos, a análise de temporização (Timing Analysis) não modela completamente o tempo dos latches. Como boa prática, evite latches, a menos que sejam necessários no projeto e você compreenda completamente seu impacto.

Latches não intencionais

Quando se projeta lógica combinacional, certos estilos de codificação podem criar latches não intencionais. Por exemplo, quando declarações CASE ou IF não cobrem todas as condições de entrada possíveis, as ferramentas de síntese podem inferir latches para manter a saída caso um novo valor de saída não seja atribuído. A omissão da cláusula ELSE (ou WHEN OTHERS) final em uma declaração IF (ou CASE) também pode gerar um latch.

Sempre verifique as mensagens da sua ferramenta de síntese em busca de referências a latches inferidos. Um aviso (warning) é mostrado quando um latch é inferido.

Warning (10631): VHDL Process Statement warning at FF_D.vhd(34): inferring latch(es) for signal or variable "q", which holds its previous value in one or more paths through the process
Ver