Tutorial VHDL – 19: Projetando um contador binário de 4 bits usando VHDL

Nota: é recomendado seguir esta série de tutoriais VHDL em ordem, começando com o primeiro tutorial.

No tutorial anterior, VHDL-18projetamos um flip-flop T usando VHDL.

Para este projeto, iremos:

  • Escreva um programa VHDL um programa VHDL para construir um contador binário de 4 bits
  • Verifique a forma de onda de saída do programa (o circuito digital) com a tabela verdade do contador

O contador binário de 4 bits

Tabela verdade

Agora vamos escrever, compilar e simular um programa VHDL. Então, obteremos a saída em forma de onda e a verificaremos com a tabela verdade fornecida.

Antes de começar, certifique-se de revisar o procedimento passo a passo fornecido em Tutorial VHDL – 3 para elaborar o projeto. Isso garantirá que você edite e compile corretamente o programa e o arquivo de forma de onda, bem como a saída final.

Programa VHDL

biblioteca IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;

contador de entidade é
Porta (rst,clk: em std_logic;
o: out std_logic_vector(0 a 3));
contador final;

arquitetura count_arch do contador é
contagem de sinais: std_logic_vector (0 a 3);
começar
processo(primeiro,clk)
começar
se (rst = '1') então conte <= “0000”;
elsif (clk'event e clk = '1') então conte <= conte + 1;
fim se;
fim do processo;
o <= contagem;
final contagem_arch;

Para refrescar sua memória sobre como isso funciona, leia os dois primeiros tutoriais de VHDL (1 e 2) desta série.

Em seguida, compile o programa acima, criando e salvando um arquivo de forma de onda com todas as entradas e saídas necessárias listadas (garantindo a aplicação de todas as diferentes combinações de entrada). Em seguida, simule o projeto. Você deve obter o seguinte resultado…

Forma de onda de simulação

Pode ser facilmente observado pela forma de onda que quando rst=1, a saída 'o' é 0 (0000). Então, aumenta em incrementos com cada borda positiva do relógio: 0001(1), 0010(2), 0011(3), etc.

Agora, vamos construir o contador ascendente-descendente. Possui um sinal de entrada adicional para “up_down”, para que quando:

  • O up_down = 0 ->, o contador conta a partir de 0, 1, 2, 3,…15, etc.
  • O up_down = 1 ->, o contador faz a contagem regressiva de 15, 14, 13,… a 0.

O contador binário up-down (4 bits)

Programa VHDL

biblioteca IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;

contador de entidade é
Porta (rst,clk,up_dwn: em std_logic;
o: out std_logic_vector(0 a 3));
contador final;

arquitetura count_arch do contador é
contagem de sinais: std_logic_vector (0 a 3);
começar
processo(primeiro,clk)
começar
se (rst = '1') então conte <= “0000”;
elsif (clk'event e clk = '0') então
if (up_dwn = '1') então conte <= conte – 1;
senão contar <= contar + 1;
fim se;
fim se;
fim do processo;
o <= contagem;
final contagem_arch;

Formas de onda de simulação

Como você pode ver nesta figura, quando up_dwn = 0, a contagem aumenta em incrementos com cada borda negativa do relógio. Então, quando up_dwn = 1, a contagem diminui. Esses exemplos estão destacados em vermelho e azul, respectivamente.

No próximo tutorial, construiremos um conversor de código binário para cinza e um conversor de código cinza para binário usando VHDL.

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.