VHDL Clock Question
Oct 14 2020
Qual é a diferença entre essas declarações em VHDL:
- if (clk'event e clk = '1') então
- 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
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino