VHDL Clock Question

Oct 14 2020

Qual é a diferença entre essas declarações em VHDL:

  1. if (clk'event e clk = '1') então
  2. se subir_grave (clk) então

Eles são equivalentes? Você produz o mesmo comportamento (saídas)? Por que um seria usado contra o outro?

Também é um sintetizável em relação ao outro? Qual é o melhor para a codificação correta da síntese?

Respostas

3 DaveTweed Oct 14 2020 at 01:20

Não, eles não são exatamente equivalentes. A primeira variação

if (clk'event and clk='1') then

só funciona corretamente se o estado anterior do relógio era de fato '0'. Isso funciona bem na maioria dos casos, mas não detecta casos incomuns, como quando o estado anterior era 'U', 'W', 'X' ou 'Z'.

A segunda variação usa rising_edge()1 , que verifica especificamente se o estado anterior era '0' ou 'L' e o novo estado é '1' ou 'H'.


1 Você pode ver a definição real no Stack Overflow