Tutorial VHDL 16: Projete um flip-flop D usando VHDL

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

No tutorial anteriorprojetamos circuitos de trava SR com clock usando VHDL (que é uma linguagem de descrição de hardware de circuito integrado de altíssima velocidade).

Para este projeto, iremos:

  • Escreva um programa VHDL para construir um circuito flip-flop D
  • Verifique a forma de onda de saída do programa (circuito digital) com a tabela verdade deste circuito flip-flop

O circuito flip-flop D

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 projetar adequadamente o projeto, bem como editar e compilar o programa e o arquivo de forma de onda, incluindo a saída final.

Para este tutorial, usamos um estilo de modelagem comportamental para escrever o programa VHDL que construirá o circuito flip-flop. Este é o estilo de modelagem preferido para circuitos digitais sequenciais.

Programa VHDL

biblioteca ieee;
use ieee.std_logic_1164.all;
entidade D_flip_flop é
porta (clk,Din: em std_logic;
P: fora std_logic;
Qnot: fora std_logic);
fim D_flip_flop;
arquitetura DFF_arch de D_flip_flop é
começar
processo (clk,Din)
começar
if(clk'evento e clk='1′) então
Q <= Ruído;
Qnot <= (não Din);
fim se;
fim do processo;
fim DFF_arch;

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

A seguir, compile o programa acima, criando um arquivo de forma de onda com todas as entradas e saídas necessárias listadas, e simule o projeto. Você deve obter o seguinte resultado…

Forma de onda de simulação

Conforme mostrado nesta figura, há dois casos destacados em vermelho e azul.

  • Caso 1: quando clk=1 e Din=1 -> Q = 1 e Qnot = 0
  • Caso 2: quando clk=1 e Din = 0 -> Q=0 e Qnot = 1

Este programa para o circuito flip-flop D parece bastante simples. Então, vamos complicar um pouco mais adicionando mais dois sinais de entrada:

1. Redefinir: a entrada de reinicialização alta ativa, portanto, quando a entrada for '1', o flip-flop será redefinido e Q = 0, Qnot = 1

2. Habilitar: ativa a entrada para o circuito flip-flop, portanto, se estiver definido como '0', o flip-flop será desabilitado e ambas as saídas estarão em alta impedância (onde '1' é quando o flip-flop opera normalmente)

Tabela verdade para o flip-flop D

Agora, aqui está o programa do flip-flop D com as entradas enable e active high reset.

biblioteca ieee;
usar ieee.std_logic_1164.all;
entidade D_flip_flop é
porta (clk,Din,rst,en : em std_logic;
P: fora std_logic;
Qnot: fora std_logic);
fim D_flip_flop;
arquitetura DFF_arch de D_flip_flop é
começar
processo (clk,en,Din,rest)
começar
se(pt='0′) então
Q <='z';
Qnot <= 'z';
elsif(rst='1′) então
Q <='0′;
Qnot <='1′;
elsif(clk'event e clk='1′) então
Q <=Din;
Qnot <= não Din;
fim se;
fim do processo;
fim DFF_arch;

Ao compilar e simular o programa acima, você obterá a seguinte saída em forma de onda…

Formas de onda de simulação

Conforme mostrado nesta figura, há três casos destacados em vermelho, azul e verde.

  • Caso 1: quando en = 0, ambas as saídas Q e Qnot são de alta impedância (z)
  • Caso 2: quando en=1 e rst=1 -> Q=0 e Qnot=1 (o flip-flop é redefinido)
  • Caso 3: quando en=1, rst=0 e Din=1 -> Q=1 e Qnot=0

No próximo tutorial construiremos um circuito flip-flop JK usando VHDL.

Related Content

Back to blog

Leave a comment

Please note, comments need to be approved before they are published.