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

Tutorial - Escrevendo Código Combinacional e Sequencial

Usando o processo VHDL ou o Verilog sempre bloqueia


Este tutorial mostra como escrever blocos de VHDL ou Verilog que estão contidos em um Processo ou um Sempre bloquear respectivamente. Processos (em VHDL) e Always Blocks (em Verilog) são fundamentais e precisam ser bem compreendidos. Eles se comportam exatamente da mesma maneira, então ambos são apresentados aqui para você, se você está aprendendo apenas um idioma agora, preste atenção aos exemplos focados nesse idioma específico. Processos ou Always Blocks são usados ​​em dois cenários principais:
  1. Para definir um bloco de combinacionais lógica
  2. Para definir um bloco de sequencial lógica

O primeiro cenário é o que é comumente visto nos livros didáticos ao apresentar Processos ou Sempre Blocos para um novo aluno. Ele é apresentado aqui para você, para torná-lo ciente de sua existência. Mas, na realidade, um bloco de processo/sempre usado para definir um bloco de lógica combinacional é visto com muito menos frequência no código do "mundo real" do que um bloco de processo/sempre usado para definir a lógica sequencial.

A primeira pergunta que você pode estar se perguntando é qual é a diferença entre lógica combinacional e sequencial? A lógica combinatória (ou combinatória) é a lógica que não requer um relógio para operar. O exemplo da porta and anteriormente é um exemplo combinacional. A lógica sequencial é a lógica que requer um relógio para operar. O bloco de construção mais fundamental da lógica sequencial é o D Flip-Flop (foto abaixo).
O flip-flop D!
Se você não sabe como funciona um flip-flop D, pare de ler isso imediatamente! Você precisa entender como os flip-flops são usados ​​dentro dos FPGAs antes de continuar lendo. Tudo pronto? Bom.

Processo de combinação em VHDL:

process (input_1, input_2)
begin
    and_gate <= input_1 and input_2;
end process;

Sempre Bloqueio Combinacional em Verilog:

always @ (input_1 or input_2)
  begin
    and_gate = input_1 & input_2;
  end

No código VHDL e Verilog acima, input_1 e input_2 estão no que é chamado de lista de sensibilidade . A lista de sensibilidade é uma lista de todos os sinais que farão com que o Process/Always Block seja executado. No exemplo acima, uma alteração em input_1 ou input_2 fará com que o Process/Always Block seja executado. Este bloco process/sempre pega as duas entradas, realiza uma operação "and" nelas e armazena o resultado no sinal e_gate. Esta é exatamente a mesma funcionalidade que este código:
-- VHDL:
and_gate <= input_1 and input_2;
// Verilog:
assign and_gate = input_1 & input_2;

Ambos os exemplos de código servem ao mesmo propósito:atribuir o sinal e_gate. A diferença é que um está em uma combinação Processo/Sempre Bloco e o outro não. Portanto, como o mesmo resultado pode ser alcançado sem o uso de uma combinação Process/Always Block, não recomendo que o designer digital iniciante use essas declarações dessa maneira.

A segunda maneira que um processo ou bloco sempre pode ser usado (e o exemplo muito mais interessante) é definir um bloco de lógica sequencial. Novamente, a lógica sequencial é a lógica com clock.

VHDL

  1. Tutorial - Escrevendo Código Combinacional e Sequencial
  2. Prós e contras da infraestrutura como código
  3. Introdução às Funções de Lógica Combinacional
  4. O que é codificação:trabalho, idiomas e seus desafios
  5. Usando Integrated Logic Analyzer (ILA) e Virtual Input/Output (VIO)
  6. Pilha e Heap Java:Tutorial de Alocação de Memória Java
  7. Como ler o arquivo CSV em Python. Leitura e gravação de arquivos CSV
  8. Lógica de escada 102:os prós e contras
  9. Procedimentos de escrita:simples e eficientes ao digital
  10. As diferenças entre o código G e o código M