Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> VHDL

Como criar um processo com uma lista de sensibilidade em VHDL


Você deve sempre usar uma lista de sensibilidade para acionar processos em módulos de produção. As listas de sensibilidade são parâmetros para um processo que lista todos os sinais aos quais o processo é sensível. Se algum dos sinais mudar, o processo será ativado e o código dentro dele será executado.

Já aprendemos a usar o wait on e wait until instruções para ativar um processo quando um sinal muda. No entanto, para ser honesto, não é assim que escrevo a maioria dos meus processos.

Esta postagem do blog faz parte da série de tutoriais básicos de VHDL.

Ao escrever código VHDL, o estilo de escrita depende se o código deve ou não ser executado apenas em um simulador. Se estou escrevendo código de simulação, como temos feito nesta série de tutoriais, sempre use wait instruções para controlar os processos. Se estou escrevendo código para o qual pretendo criar uma implementação física, nunca use wait declarações.

A sintaxe para um processo com uma lista de sensibilidade é:
process(<signal1>, <signal2>, ..) is
begin
    <main logic here>
end process;


Uma peculiaridade importante da lista de sensibilidade é que todos os sinais que são lidos dentro do processo devem estar na lista de sensibilidade. No entanto, o simulador não informará se você não adicionar um sinal à lista de sensibilidade, porque é legal na linguagem VHDL. O problema é que, se você não fizer isso, o código se comportará de maneira diferente quando sintetizado e usado em uma implementação física.

Em VHDL-2008, a palavra-chave all é permitido usar em vez de listar todos os sinais. Infelizmente, a maioria dos softwares de sintetização não suporta esta revisão mais recente da linguagem VHDL.

Exercício


Neste tutorial em vídeo vamos aprender como criar um processo usando uma lista de sensibilidade em VHDL:



O código final que criamos neste tutorial:
entity T09_SensitivityListTb is
end entity;

architecture sim of T09_SensitivityListTb is

    signal CountUp   : integer := 0;
    signal CountDown : integer := 10;

begin

    process is
    begin

        CountUp   <= CountUp + 1;
        CountDown <= CountDown - 1;
        wait for 10 ns;

    end process;

    -- Process triggered using Wait On
    process is
    begin

        if CountUp = CountDown then
            report "Process A: Jackpot!";
        end if;

        wait on CountUp, CountDown;

    end process;

    -- Equivalent process using a sensitivity list
    process(CountUp, CountDown) is
    begin

        if CountUp = CountDown then
            report "Process B: Jackpot!";
        end if;

    end process;

end architecture;

A saída para o console do simulador quando pressionamos o botão de execução no ModelSim:
VSIM 2> run
# ** Note: Process A: Jackpot
#    Time: 40 ns  Iteration: 1  Instance: /t09_sensitivitylisttb
# ** Note: Process B: Jackpot
#    Time: 40 ns  Iteration: 1  Instance: /t09_sensitivitylisttb




Análise


Podemos ver pelas impressões que os dois processos se comportam da mesma forma. Isso ocorre porque um processo com uma lista de sensibilidade é, por definição, equivalente a um processo com wait on no final do processo.

Processos com listas de sensibilidade são normalmente usados ​​em código que deve ser sintetizado. Esse código é comumente referido como código de nível de transferência de registro (RTL). Esta é uma convenção, mas há boas razões para isso. Embora alguns wait on e wait until instruções podem ser sintetizadas, é difícil saber que tipo de hardware ele criará.


Retirada


Ir para o próximo tutorial »

VHDL

  1. Como criar uma lista de strings em VHDL
  2. Como criar um testbench orientado por Tcl para um módulo de bloqueio de código VHDL
  3. Como criar um controlador PWM em VHDL
  4. Como criar um buffer de anel FIFO em VHDL
  5. Como criar um testbench de autoverificação
  6. Como criar uma lista vinculada em VHDL
  7. Como usar um procedimento em um processo em VHDL
  8. Como usar uma função impura em VHDL
  9. Como usar uma função em VHDL
  10. Como criar uma máquina de estado finito em VHDL