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

Uso de Listas de Sensibilidade em Processos VHDL para Design RTL Confiável

Em VHDL de nível de produção, os processos são tipicamente controlados por uma lista de sensibilidade em vez de instruções wait. Uma lista de sensibilidade enumera todos os sinais que devem despertar o processo quando mudam.

Embora wait on e wait until sejam convenientes para simulação, raramente são usados em RTL sintetizável. Na síntese, uma instrução wait é frequentemente ignorada, levando a hardware imprevisível. Por outro lado, uma lista de sensibilidade mapeia diretamente para um bloco combinacional ou síncrono de clock que as ferramentas de síntese podem implementar de forma confiável.

Tutoriais Básicos de VHDL – Sensibilidade de Processo

Ao escrever código para um simulador, sempre confio em instruções wait para controlar o tempo. Para qualquer design que será sintetizado em silício, evito wait inteiramente e uso listas de sensibilidade.

A sintaxe para um processo com lista de sensibilidade é:

 process( sinal1, sinal2, ... ) is begin -- lógica principal aqui end process; 

Note que todo sinal lido dentro do processo deve aparecer na lista. O compilador VHDL não sinaliza um sinal ausente, mas omitir um alterará o comportamento após a síntese.

O VHDL‑2008 introduziu a palavra-chave all para incluir automaticamente todos os sinais lidos, por exemplo, process(all). No entanto, a maioria dos sintetizadores comerciais ainda não suporta esse recurso.

Exercício

No tutorial em vídeo que acompanha esta lição, percorremos a construção de um processo que usa uma lista de sensibilidade.

O trecho final de VHDL produzido nesta lição é:

 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; -- Processo disparado usando Wait On process is begin if CountUp = CountDown then report "Processo A: Jackpot!"; end if; wait on CountUp, CountDown; end process; -- Processo equivalente usando lista de sensibilidade process(CountUp, CountDown) is begin if CountUp = CountDown then report "Processo B: Jackpot!"; end if; end process; end architecture; 

A execução deste testbench no ModelSim produz:

 VSIM 2> run # ** Note: Processo A: Jackpot! # Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb # ** Note: Processo B: Jackpot! # Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb 

Análise

A saída do console demonstra que tanto o processo wait on quanto o processo com lista de sensibilidade disparam sob condições idênticas. Esta equivalência ocorre porque uma lista de sensibilidade se comporta implicitamente como um wait on colocado no final do processo.

Na prática, listas de sensibilidade são o padrão de fato para RTL sintetizável. Elas fornecem intenção clara, permitem que ferramentas de síntese gerem hardware correto e evitam as ambiguidades que instruções wait podem introduzir.

Uso de Listas de Sensibilidade em Processos VHDL para Design RTL Confiável

Principais Conclusões

  • Um processo com lista de sensibilidade é funcionalmente idêntico a um processo terminando com wait on.
  • Todos os sinais lidos dentro do processo devem aparecer em sua lista de sensibilidade.
  • Use instruções wait para código apenas de simulação; use listas de sensibilidade para RTL sintetizável.

Prossiga para o próximo tutorial aqui.

VHDL

  1. Criando Listas de Strings em VHDL: Boas Práticas e Exemplo
  2. Criando um Testbench Dirigido por Tcl para um Módulo Code-Lock VHDL
  3. Implementando um Controlador PWM em VHDL: Projeto, Simulação e Demo em FPGA
  4. Projetando um FIFO Ring Buffer Robusto em VHDL com Block RAM
  5. Como Construir um Testbench de Auto-Verificação em VHDL – Guia Prático
  6. Implementando Lista Encadeada Dinâmica em VHDL com Tipos Protegidos e Ponteiros de Acesso
  7. Aproveitando Procedimentos In-Process para Design de FSM em VHDL Mais Limpo
  8. Usando Funções Impuras em VHDL: Melhorando Legibilidade e Manutenibilidade de FSM
  9. Dominando Funções VHDL: Guia Prático para Design Eficiente
  10. Projetando uma Máquina de Estados Finitos em VHDL: Exemplo Prático de Semáforo