1) O documento descreve um laboratório sobre sistemas digitais que inclui o estudo de circuitos sequenciais, latches, flip-flops e registradores em VHDL.
2) Os objetivos do laboratório são entender esses conceitos e implementá-los em VHDL, incluindo um estudo de caso com uma calculadora.
3) É apresentada a descrição de circuitos sequenciais, latches, flip-flops e registradores em VHDL usando processos sensíveis.
Sistemas Digitais - Circuitos sequenciais, latches e flip-flops
1. Universidade Federal de Santa Catarina
Centro Tecnológico – CTC
Departamento de Engenharia Elétrica
http://gse.ufsc.br
“EEL7020 – Sistemas Digitais”
Prof. Eduardo Augusto Bezerra
Eduardo.Bezerra@eel.ufsc.br
Florianópolis, agosto de 2012.
3. Objetivos do laboratório
1. Entender o conceito de circuitos sequenciais.
2. Entender o conceito e diferença entre flip-flops e latches.
3. Entender o conceito de registradores em VHDL.
4. Implementação de flip-flops, latches e registradores em
VHDL.
5. Estudo de caso: projeto de calculadora personalizada,
com apresentação dos resultados em displays de 7-
segmentos, e uso de registradores como elementos de
“memória”.
EEL7020 – Sistemas Digitais 3/20
4. Uso de “process” na descrição de circuitos sequenciais
EEL7020 – Sistemas Digitais 4/20
5. Descrição de circuitos sequenciais em VHDL
library ieee; Process
use ieee.std_logic_1164.all;
entity Sinais is port ( • Define uma SEQUÊNCIA DE COMANDOS a
C: in std_logic;
ser realizada pelo circuito.
D: in std_logic;
Q: out std_logic
• O processo é acionado, e sua sequência
);
end Sinais;
de comandos é executada, sempre que
ocorrer uma alteração em algum elemento
architecture behv of Sinais is
signal A, B: std_logic; da sua LISTA DE PARÂMETROS (Ex. C ou D).
begin
A <= D; • Um processo nunca termina - CÍCLICO.
Q <= B;
• Dessa forma, após a execução do último
P1: process (C, D)
comando, o primeiro comando da sequência
begin
B <= '0’; é executado, SEMPRE que ocorrer uma
if (C = '1') then nova alteração em algum parâmetro.
B <= D;
end if; • Obs. Comando IF .. THEN .. ELSE é
end process P1; utilizado APENAS dentro de um process.
end behv; EEL7020 – Sistemas Digitais 5/20
6. Descrição de circuitos sequenciais em VHDL
Process
• A lista de parâmetros de um processo
é denominada SENSITIVITY LIST.
process (A, B, C, D) • Os valores atribuídos aos sinais pelos
begin comandos do processo, só serão válidos
A <= '1'; Sequêncial
após a execução do último comando, ou
B <= '1'; seja, após “sair” do processo.
B <= D;
A <= not B; • Se existirem várias atribuições a um
C <= A and '1';
mesmo sinal, APENAS a última atribuição
D <= C;
end process; será válida (ex. sinal B no corpo do
processo).
• Não é permitido declarar sinais dentro de
um processo.
EEL7020 – Sistemas Digitais 6/20
7. Descrição de circuitos sequenciais em VHDL
library ieee;
use ieee.std_logic_1164.all; Resultado da simulação do VHDL
entity Sinais is port (
C: in std_logic;
D: in std_logic;
Q: out std_logic
);
end Sinais;
architecture behv of Sinais is
signal A, B: std_logic; C
begin D
A <= D; Q
Q <= B;
P1: process (C, D)
C foi alterado para ‘0’, logo o processo é
begin
executado novamente, e B receberá ‘0’,
B <= '0';
pois o teste do IF será falso.
if (C = '1') then
Logo, Q será zero (combinacional).
B <= D;
end if;
end process P1;
end behv; EEL7020 – Sistemas Digitais 7/20
9. Latch D
library ieee;
use ieee.std_logic_1164.all; D
D latch
entity D_latch is port ( S
C: in std_logic;
C
D: in std_logic;
Q: out std_logic Q
); R
end D_latch;
architecture behv of D_latch is
begin
process(C, D)
begin
if (C = '1') then
Q <= D;
end if;
end process;
end behv;
EEL7020 – Sistemas Digitais 9/20
10. Latch D
library ieee;
use ieee.std_logic_1164.all;
entity D_latch is port (
C: in std_logic;
D: in std_logic;
Q: out std_logic
);
end D_latch;
1
architecture behv of D_latch is D
0
begin
1
process(C, D) C
0
begin
1
if (C = '1') then S
0
Q <= D;
1
end if; R
0
end process;
1
end behv; Q
0
EEL7020 – Sistemas Digitais 10/20
11. Flip-Flop D D flip-flop
D latch D latch
Q’
library ieee; D
Dm Qm Ds Qs’
use ieee.std_logic_1164.all;
Q
entity D_FF is port ( Cm Cs Qs
CLK: in std_logic;
master servant
D: in std_logic;
Q: out std_logic Clk
);
end D_FF;
architecture behv of D_FF is Clk
begin
process(CLK, D) D/Dm
begin Cm
if (CLK'event and CLK = '1') then
Q <= D; Qm/Ds
end if; Cs
end process;
end behv; Qs
EEL7020 – Sistemas Digitais 11/20
12. Flip-Flop D com RESET assíncrono
library ieee;
use ieee.std_logic_1164.all;
entity D_FF is port (
D Q
CLK: in std_logic;
CLK RST: in std_logic;
RST D: in std_logic;
Q: out std_logic
);
end D_FF;
•Sempre que a entrada RST architecture behv of D_FF is
for Zero, a saída Q será Zero. begin
process (CLK, RST, D)
• Quando RST for diferente begin
de Zero, o valor na saída Q if (RST = '0') then
vai depender da entrada CLK. Q <= '0';
elsif (CLK'event and CLK = '1') then
• Se CLK for ‘1’ E for uma Q <= D;
borda de subida, então Q end if;
receberá a entrada D. end process;
EEL7020behv; Digitais
end – Sistemas 12/20
13. library ieee;
Flip-Flop D com Enable use ieee.std_logic_1164.all;
entity D_FF is port (
CLK: in std_logic;
RST: in std_logic;
D EN: in std_logic;
Q
D: in std_logic;
EN Q: out std_logic
CLK );
RST end D_FF;
architecture behv of D_FF is
begin
process (CLK, RST, D)
• Sempre que a entrada RST begin
for Zero, a saída Q será Zero. if RST = '0' then
Q <= '0';
• Se CLK for ‘1’ E for uma elsif CLK'event and CLK = '1' then
borda de subida E o sinal de if EN = '1' then
Enable (En) estiver em ‘1’, Q <= D;
end if;
então Q receberá a entrada D.
end if;
end process;
end behv;
EEL7020 – Sistemas Digitais 13/20
14. Enquanto não ocorrer um
Registrador de 4 bits novo evento no sinal CLK e
library ieee; enquanto esse evento for
use ieee.std_logic_1164.all; diferente de ‘1’ (borda de
entity D_4FF is port ( subida), então a saída Q do
CLK: in std_logic; flip-flop continuará
D: in std_logic_vector(3 downto 0); armazenando o valor atual.
Q: out std_logic_vector(3 downto 0)
); Ao ocorrer um novo evento
end D_4FF; em CLK, e se esse novo
architecture behv of D_4FF is evento for uma transição
begin de ‘0’ para ‘1’ (borda de
process(CLK, D) subida), então a saída Q
begin receberá o novo valor
if (CLK'event and CLK = '1') then existente na entrada D.
Q <= D;
D(3) D(2) D(1) D(0)
end if; Q(3) Q(2) Q(1) Q(0)
end process;
end behv; D Q D Q D Q D Q
CLK CLK CLK CLK
clock_50
EEL7020 – Sistemas Digitais 14/20
15. Tarefa a ser realizada:
Mini-calculadora com registradores para
armazenamento (memória) de resultados.
EEL7020 – Sistemas Digitais 15/20
16. Uso de registradores na mini-calculadora VHDL
Operando B top_calc
f=A+B
Registrador
SW(15 downto 8) D
8
F(7..4) Decod.
Operando A 8 Q
4 7-seg
SW(7 downto 0) 8 4
EN
f = A or B
HEX1
8
8 F1
00
8
F2 01
F(3..0)
Registrador
F
F3 Mux D
10 8 4
Q Decod.
F4 11 4 7-seg
F = A xor B
EN
8 2
HEX0
sel 8
8
8
F(7..0)
Registrador
D
f = not A
Q
EN
8
Seleção da operação 8 8
(+, or, xor, not)
SW(17 downto 16) LEDR(7 downto 0)
Enter KEY(1)
Clock CLOCK_50
Reset KEY(0) EEL7020 – Sistemas Digitais 16/20
17. Descrição do circuito a ser implementado
• O circuito consiste na mini-calculadora do lab. anterior, porém com a inclusão
de registradores para armazenar os resultados das operações.
o Um registrador de 4 bits para armazenar a parte baixa do resultado a ser
apresentado em HEX0.
o Um registrador de 4 bits para armazenar a parte alta do resultado a ser
apresentado em HEX1.
o Um registrador de 8 bits para armazenar o resultado a ser apresentado, em
binário, nos LEDs vermelhos.
• Ao se pressionar o botão KEY0 (Reset), os flip-flops deverão ser “limpos”,
apagando os LEDs, e apresentando o valor 0 (zero) nos displays de sete
segmentos.
• Ao se pressionar o botão KEY1(Enter), os flip-flops são habilitados para
escrita, armazenando os valores presentes nas suas entradas (“memória”).
• As entradas CLK (clock) dos flip-flops recebem um sinal de relógio gerado
por um cristal presente na placa DE2.
EEL7020 – Sistemas Digitais 17/20
19. Dicas úteis
• No slide 13 é apresentado um flip-flop D D
Q
com Reset e Enable (ver símbolo ao lado). EN
CLK
RST
• No slide 14 é apresentado um registrador
de 4 bits, implementado com 4 flip-flops,
porém sem Reset e sem Enable.
• Utilizar os circuitos dos slides 13 e 14 como base para
para escrever o VHDL dos dois registradores de 4 bits
e do registrador de 8 bits solicitado no exercício, todos
com Reset e Enable.
• O sinal de relógio (Clock ou CLK) do circuito deve ser
obtido diretamente da placa, utilizando o sinal CLOCK_50
(ver o manual da DE2, e o arquivo de pinos).
EEL7020 – Sistemas Digitais 19/20
20. Interface com o usuário (entrada/saída)
HEX1 HEX0 LEDR(7..0)
Usar KEY(0)
para o “Reset”
Usar KEY(1) para o “Enter” (Enable)
Usar SW(7..0) para entrar com operando A
Usar SW(15..8) para entrar com operando B
Usar SW(17..16) para selecionar a operação (F1, F2, F3 ou F4)
EEL7020 – Sistemas Digitais 20/20