Como uma variável VHDL é sintetizada por ferramentas de síntese

9

Conheço duas maneiras pelas quais uma variável VHDL é sintetizada pela ferramenta de síntese:

  • Variável sintetizada como lógica combinacional
  • Variável sintetizada como uma Trava involuntariamente (quando uma variável não inicializada é atribuída a um sinal ou outra variável)

Quais são as outras maneiras pelas quais uma variável VHDL pode ser sintetizada? (Exemplo: pode ser interpretado como um FF?)

nurabha
fonte

Respostas:

8

Eu distinguiria três possibilidades:

  1. Uma variável VHDL não possui representação de hardware. Suponha o seguinte exemplo

    signal a,b,c : integer;  
    ...  
    process ( clk ) is  
    variable var : integer := 0;  
    begin  
    if ( rising_edge(clk) ) then  
    var := a + b;  
    c <= var;  
    end if;  
    end process;

    A variável varnão é realmente sintetizada como lógica combinatória (supondo que isso seja o que se quis dizer na pergunta). É o lado direito da tarefa a + bque é sintetizada no hardware. A rigor, uma variável nunca é sintetizada na lógica combinatória.

  2. Uma variável apenas mantém um resultado intermediário, que é avaliado no mesmo ciclo de clock -> nenhum hardware sintetizado (este é 1) novamente) ou é avaliado no ciclo de clock a seguir -> um flip-flop é sintetizado.

  3. Uma dessas travas temidas é inferida nos casos em que existem ramificações condicionais nas quais a variável não recebe um novo valor (dependendo de alguns sinais) nem um valor padrão. Normalmente, este caso acontece involuntariamente :-)

andrsmllr
fonte
A "trava temida" só pode acontecer fora de um processo com relógio e a maioria das pessoas (na minha experiência) hoje em dia não está usando processos sem relógio. Assim, o temor trava não é um problema mais (IMHO) - que decorre dos velhos tempos quando você tinha para escrever sua lógica combinatória em um processo separado para sua chinelas
Martin Thompson
4

Se você usar o valor em uma variável antes de armazená-lo, obterá o valor que foi armazenado na última vez em que o processo o armazenou (em um processo com relógio, o valor de um ciclo de relógio anterior). Isso é sintetizado como um registro ou FF.

Obviamente, no primeiro ciclo do relógio, você obtém lixo, a menos que tenha inicializado a variável em uma cláusula de redefinição.

Brian Drummond
fonte