Buscar

Aula VHDL - Circuitos Digitais com Comandos Sequenciais

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

ANOTAÇÕES DE AULA
VHDL – Circuitos Digitais com 
Comandos Sequenciais
• Estrutura, tipos, objetos e operadores 
• Comandos sequenciais
02/10/2018 UFAM / prof. MgN 1
Referências bibliográficas
02/10/2018 UFAM / prof. MgN 2
Estrutura de Código e 
Síntese em VHDL
Diálogo sobre a estrutura de código e síntese de 
circuito em VHDL
02/10/2018 UFAM / prof. MgN 3
Linguagem de descrição de hardware (VHDL)
• Linguagem de especificações de chips de forma não 
ambígua, padronizada pelo IEEE
• Facilita o projeto (síntese e simulação) de sistemas 
digitais que independa de tecnologia e fabricante
• Sintaxe baseada na linguagem ADA (tipada) e permite 
a descrição de códigos concorrentes e sequenciais
02/10/2018 UFAM / prof. MgN 4
Estrutura de código em VHDL
LIBRARY 
(Biblioteca)
ENTITY 
(Entidade)
ARCHITECTURE
(Arquitetura)
Descreve as bibliotecas e pacotes 
necessário para o projeto
02/10/2018 UFAM / prof. MgN 5
Descreve a lógica de operação do 
circuito que está dentro do bloco
Descreve as portas (pinos) de 
entradas e saídas do circuito
Exemplo de programa em VHDL
Descreva o circuito do diagrama 
lógico em pseudoVHDL
1 -- acesso a biblioteca IEEE
2 library IEEE;
3 use IEEE.STD_LOGIC_1164.all; 
4 entity ckt_e is
5 port( a, b, c : in bit;
6 x : out bit );
7 end ckt_e;
8 architecture ckt of ckt_e is
9 begin
10 x <= (a and b) or c;
11 end ckt;
02/10/2018 UFAM / prof. MgN 6
Pinos de
entrada
Pino de
saída
Operação do 
diagrama lógico
a
b
c
x
Relação entre entidade e arquitetura
1 entity e1_e is
2 port( a, b : in bit;
3 s : out bit );
4 end coinc;
5 architecture a1 of e1_e is
6 begin
7 s <= not (a xor b);
8 end a1;
9 architecture a2 of e1_e is
0 begin
1 s <= a xnor b;
2 end a2;
02/10/2018 UFAM / prof. MgN 7
Instância 1 Instância 2
As arquiteturas a1 e a2 alocam células lógicas do FPGA quando embarcadas, 
sendo as entradas a e b e a saída s com os tipos definidos na entidade e1_e
Tipos de Dados
em VHDL
Diálogo sobre os tipos de dados em VHDL
02/10/2018 UFAM / prof. MgN 8
Modos de uma porta
• Modos possíveis: IN, OUT, BUFFER e INOUT
02/10/2018 UFAM / prof. MgN 9
1 entity modo_e is
2 port( x0, x1 : in bit;
3 y0, y1 : out bit;
4 y2 : buffer bit;
5 z0, z1 : inout bit);
6 end modo_e;
x0
x1
y0
y2
z1
y1
z0
out
out
buffer
inout
in
in
inout
• in e out operam exclusivamente como Entrada e Saída, respectivamente
• buffer opera como saída e pode ser referenciada dentro da arquitetura
• inout opera como Entrada/Saída, usada em barramento de dados
Arquitetura
Tipos de dados da biblioteca STD
Tipo Valor Exemplos
boolean Verdadeiro, falso true, false
bit Um, zero '1','0'
bit_vector 1, 0 "1010", B"10_10", O"12", X"A"
integer -231-1 ≤ x ≤ 231-1
123, 2#11_11_011#, 8#173#, 16#7B#
obs.: o “_” é para tornar mais legível
natural 0 ≤ x ≤ 231-1
positive 1 ≤ x ≤ 231-1
character Caracteres ASCII a, b, 0, 1, C, D, ?, ), *
string Tipo character "teste", ""com aspas"" 
time ps, ns, us, ms, sec, min, hr 1 ms, 100 us, 1 ns, 1 sec
02/10/2018 UFAM / prof. MgN 10
Tipos de dados da biblioteca IEEE
Tipo Valor Exemplos
*std_logic (tabela ao lado) '1', '0', 'Z'
*std_logic
_vector
(tabela ao lado) "ZZ01", B"10_10", O"12"
02/10/2018 UFAM / prof. MgN 11
Valores possíveis
(std_logic e std_logic_vector)
Valor Descrição
'1' Nível lógico 1 (tipo Bit)
'0' Nível lógico 0 (tipo Bit)
'Z' Alta impedância
'–' Irrelevante
'U' Não Inicializado
'X' Desconhecido
'W' Fraco, desconhecido
'L' Fraco '0'
'H' Fraco '1'
Existem dois pacotes que não podem ser 
usados conjuntamente
• numeric_bit possui os tipos bit e bit_vector
• numeric_std possui os tipos std_logic e 
std_logic_vector
Vetores unidimensionais
02/10/2018 UFAM / prof. MgN 12
1 -- definições de vetores
2 s : string(1 to 4) := "mesa";
3 d : bit_vector(3 downto 0):="1011";
4 -- atribuições de vetores
5 -- "1011" na notação posicional
6 d <= ('1','0','1','1');
7 -- "1011" com associação por nomes
8 d <= (2 => '0', others => '1');
'a''s''e''m'
s(4)s(3)s(2)s(1)
'1''1''0''1'
d(0)d(1)d(2)d(3)
Inicialização de sinais e variáveis
1 entity tp_e is
2 port(
3 -- sinais de 8 bits
4 p: in bit_vector(0 to 7);
5 ad: buffer bit_vector(0 to 7));
6 end tp_e;
7 architecture tp of tp_e is
8 begin
9 -– porta 8 bits <= saída A/D
10 p <= ad;
11 end tp;
Exemplo de transferência paralela
Descreva a transferência do 
conversar A/D para a porta 
paralela em pseudoVHDL
02/10/2018 UFAM / prof. MgN 13
Conversor 
A/D
Porta
Paralela8
pad
P 
[7]
P 
[6]
P 
[5]
P 
[4]
P 
[3]
P 
[2]
P 
[1]
P 
[0]
(MSB) Conversor A/D (LSB)
Tipos de dados definidos pelo usuário
02/10/2018 UFAM / prof. MgN 14
1 -- tipo vetor de 4 x 1 bit
2 type vetor4x1 is array (0 to 3) 
3 of bit;
4 –- tipo vetor de 8 x 4 bits
5 type vetor8x4 is array (0 to 7) 
6 of bit_vector (3 downto 0);
7 -- tipo enumerado
8 type cores is (vd, am, vm);
1
Conteúdo
0
0
0
1
2
13
Índice
1000
0100
0010
0001 
1000
0100
0
1
2
3
4
5
ConteúdoÍndice
0010
0001
6
7
Vetor 4x1 bit
Vetor 8x4 bits
Operadores e
Atributos em VHDL
Diálogo sobre os principais operadores e 
atributos usados em VHDL
02/10/2018 UFAM / prof. MgN 15
Operadores de atribuição
Operador Operação
:=
• Atribuir valor a
variável e constante
• Inicializar constante,
sinal e variável
<= • Atribuir valor a sinal
=>
• Atribuir valor ou 
valores com a cláusula 
others em vetores
02/10/2018 UFAM / prof. MgN 16
1 –- atrib. de variáveis “:=”
2 variable x : natural
3 range 0 to 15 := 9;
4 x := x + 2;
5 –- atrib. de sinais “<=”
6 signal s1 : bit;
7 s1 <= '1';
8 –- atrib. de sinais “=>”
9 s2: bit_vector(7 downto 0);
10 s2 <= (0=>'1', others=>'0')
Operador de concatenação
Operador Operação
&
Agrupamento
de objetos e 
valores
1 –- concatenação de bits
2 x1 <= 'Z' & '0' & '1' & '1';
3 -- concatenação de cadeias de bits
4 x2 <= "Z0" & "11";
5 -- concatenação com vírgula
6 x4 <= ('Z', '0', '1', '1');
7 -- concatenação com “others”
8 x5 <= ('Z', '0', others => '1');
02/10/2018 UFAM / prof. MgN 17
As quatro expressões são equivalentes e 
ambas atribuem o valor Z011
Operadores lógicos, aritméticos e de comparações
• Lógicos
• And, Or, Not, Nand, 
Nor, Xor e Xnor
• Aritméticos
• +, –, *, / e **
• Comparações
• =, /=, >, <, >= e <=
02/10/2018 UFAM / prof. MgN 18
1 entity som_e is
2 port(
3 a,b : in natural range 0 to 15;
4 s : out natural range 0 to 15);
5 end som_e;
6 architecture som of som_e is
7 begin
8 s <= a + b;
9 end som;
a[3..0]
b[3..0]
s[3..0]Somador 
de 4 bits
Descreva um somador de 4 bits em 
pseudoVHDL
Atributos e funções de sinais
02/10/2018 UFAM / prof. MgN 19
Discriminação Operação
Atributo 
s‘event
Retorna true se
ocorreu transição
em ‘s’
Função IEEE 
rising_edge(s)
Retorna true se 
ocorreu a transição 
de subida em ‘s’
Função IEEE 
falling_edge(s)
Retorna true se 
ocorreu a transição 
de descida em ‘s’
1 –- exemplo com atributo
2 b : bit; -- Tipo STD
3 -- bordas de subida/descida
4 if b'event and b='1' then
5 if b'event and b='0' then
6 -- exemplo com função IEEE
7 s : std_logic; -- Tipo IEEE
8 -- bordas de subida/descida
9 if rising_edge(s) then
10 if falling_edge(s) then
Operadores de deslocamento
02/10/2018 UFAM / prof. MgN 20
1 entity deslo_e Is
2 port(
3 p : out bit_vector(3 to 0);
4 q : out bit_vector(3 downto 0)
5 );6 end deslo_e;
7 architecture deslo of deslo_e is
8 begin
9 p <= q ror 1; -- giro horário
10 q <= q sll 2; -- realiza 4*q
11 end deslo;
B3 B2 B1 B0
B3 B2 B1 B0
B3 B2 B1 B0
B3 B2 B1 B0
0
0
sll – Shift Left Logical
srl – Shift Right Logical
ror – Rotate Right
rol – Rotate Left
Circuitos Sequenciais com 
Comandos PROCESS e IF
Diálogo sobre os conceitos de comandos 
sequenciais básicos de VHDL
02/10/2018 UFAM / prof. MgN 21
Comandos sequenciais básicos
•Descrição de circuitos combinacionais e sequenciais
•Principais comandos:
• Process – construção de código sequencial
• If – semelhante ao if da linguagem C
• Wait – espera uma condição ser satisfeita
• Case – seleciona uma opção dentre várias (switch de C)
• Loop – laço com For, While, Exit e Next
• Escritas dentro de processo, procedimento ou função
02/10/2018 UFAM / prof. MgN 22
Somador com o comando PROCESS
• Usada na construção de 
código sequencial
• São permitidos os comandos 
if, case, loop e wait no 
trecho de código sequencial
1 –- soma/subtração sequencial
2 entity seq_e is
3 port( a, b : in integer;
4 sum, carry : out integer);
5 end seq_e;
6 architecture seq of seq_e is
7 begin
8 process (a, b) 
9 begin
10 sum <= a xor b;
11 carry <= a and b;
12 end process;
13 end proc;
• O código será reavaliado sempre 
que os sinais a e/ou b mudarem
• As declarações internas ao 
process são processadas 
sequencialmente
02/10/2018 UFAM / prof. MgN 23
Flip-flop tipo D com o comando IF
• É um dos comandos 
sequencias mais usados
• Descreva o flip-flop tipo 
D em pseudoVHDL
02/10/2018 UFAM / prof. MgN 24
1 entity ffd_e is
2 port( clk, d : in std_logic;
3 q : out std_logic );
4 end ffd_e;
5 architecture ffd of ffd_e is
6 begin
7 process (clk)
8 begin
9 if rising_edge(clk) then
10 q <= d;
11 end if; -- memória implícita
12 end process;
13 end ffd;
q
d
clk FF D
O process é executado quando 
a entrada clk é alterada
Flip-flop D com reset prioritário e comando IF
• Descreva o flip-flop D com 
entrada reset assíncrona 
prioritária em pseudoVHDL
02/10/2018 UFAM / prof. MgN 25
1 entity ffd_e is
2 port( q : out std_logic; 
3 clk, d, rst : in std_logic);
4 end ffd_e;
5 architecture ffd of ffd_e is
6 begin
7 process (clk, rst) 
8 begin
9 if rst = '1' then q <= '0’;
10 elsif rising_edge(clk) then
11 q <= d;
12 end if; -- memória implícita
13 end process;
14 end ffd;
q
d
clk
rst
FF D
O rst (assíncrono) é prioritário 
com relação ao clk (síncrono)
Circuitos Sequenciais com 
Comandos CASE e WAIT
Diálogo sobre os conceitos de comandos 
sequenciais básicos de VHDL
02/10/2018 UFAM / prof. MgN 26
Contador com 
comando CASE
• Seleciona uma opção dentre 
várias existentes p/ executar
• Permite a criação fácil de 
circuitos combinacionais
• Descreva o contador da 
máquina de estados a seguir 
em pseudoVHDL
02/10/2018 UFAM / prof. MgN 27
1 entity cont_e is
2 port( clk : in std_logic;
3 q: buffer bit_vector(1 downto 0));
4 end cont_e;
5 architecture cont of cont_e is
6 begin
7 process (clk) begin
8 if rising_edge(clk) then
9 case q is
10 when "00" => q <= "01";
11 when "01" => q <= "10";
12 when others => q <= "00";
13 end case;
14 end if;
15 end process;
16 end cont;
00
0110
11
Tabela da Verdade 
com comando CASE
• Descreva o circuito lógico do 
bloco e TV em pseudoVHDL
02/10/2018 UFAM / prof. MgN 28
1 entity tv_e is
2 port( a, b : in bit;
3 s : out bit );
4 end tv_e;
5 architecture tv of tv_e is
6 begin
7 process (a, b) 
8 begin
9 case a & b is
10 when "00" => s <= '0’;
11 when "01" => s <= '1’;
12 when "10" => s <= '1’;
13 when others=> s <='0’;
14 end case;
15 end process;
16 end tv;
Condição 
do sinal de 
entrada
Operação 
simbólica
ab = "00" s '0'
ab = "01" s '1'
ab = "10" s '1'
ab = "11" s '0'
s
a
b
Circuito 
Lógico
Bloco funcional Tabela funcional
Exemplo com contador síncrono módulo 10
02/10/2018 UFAM / prof. MgN 29
Descreva um contador 
crescente, síncrono de 
módulo 10 em 
pseudoVHDL
cout
q[3..0]cin
aclear
Contador 
Crescente
Módulo 10
clk
Sinal de dados Descrição do sinal
q[3..0] Saída de dados
Condição dos sinais 
de entrada
Operação simbólica Prior
aclear='0'
q '0‘ (modo reset)
0
cout '0'
cin='1' e clk='↑'
qq+1 se q<9 cc0 (modo 
contagem)
1
cout '1' se q=9 cc '0'
cin='0' e clk='↑' Nenhuma (modo memória)
Tabela funcional
Bloco funcional
Entidade do contador síncrono
02/10/2018 UFAM / prof. MgN 30
1 entity count_e is
2 type count_t is natural
3 range 0 to 9;
4 port(
5 q : out count_t;
6 aclear : in bit;
7 cin : in bit;
8 cout : out bit;
9 clk : in bit
10 );
11 end count_e;
cout
q[3..0]cin
aclear Contador 
Crescente
Módulo 10
clk
Bloco funcional
Arquitetura do 
contador síncrono
02/10/2018 UFAM / prof. MgN 31
12 architecture count of count_e is
13 begin
14 process (aclear, clk, cin)
15 variable cont : count_t:=0;
16 begin
17 if aclear = '0' then cont:=0;
18 elseif rising_edge (clk) then
19 if cin = '1' then
20 if cont = 9 then cont := 0;
21 else cont := cont+1; end if;
22 if cont = 9 then cout <= '1';
23 else cout <= '0'; end if;
24 end if;
25 end if;
26 q <= cont;
27 end process;
28 end count;
Sinal de dados Descrição do sinal
q[3..0] Saída de dados
Condição dos 
sinais de entrada
Operação 
simbólica
Pri
or
aclear='0'
q '0'
0
cout '0'
cin='1' e clk='↑'
qq+1 se q<9, cc
0
1cout '1' se q=9, 
cc '0'
cin='0' e clk='↑' Nenhuma
Tabela funcional
Delays com o 
comando WAIT
• O processo ou subprograma 
suspenda a execução até 
situação externa ocorrer
• Descreva as esperas em 
pseudoVHDL:
• Expiração de 10 ms
• Transição de subida de clk
• Mudança em rst
1 entity esp_e is
2 port( clk,rst : in std_logic);
3 end esp_e;
4 architecture esp of esp_e is
5 begin -- processo não pode ter 
6 -- lista de sensibilidade
7 process
8 begin
9 -- espera subida de clk
10 wait for 10 ms;
11 -- espera rst mudar
12 wait until rising_edge(clk);
13 -- espera rst ser igual a 1
14 wait on rst;
15 end process;
16 end esp;
02/10/2018 UFAM / prof. MgN 32
Principais aprendizados de VHDL
– Comandos Sequenciais –
Aprendizados conceituais
(Comandos sequenciais)
• Estrutura de código
• Tipos de dados
• Operadores atribuição, 
concatenação, lógico, 
aritmético, comparação e 
deslocamento
• Atributos e operadores de sinais
• Comandos IF, CASE, LOOP e 
WAIT
Aprendizados de negócios
(Circuitos digitais síncronos)
• Flip-flops e registradores
• Contadores
• Circuitos em máquinas de 
estados
• Circuitos em Tabelas da 
Verdade (TV)
• Circuitos de temporização com 
espera
02/10/2018 UFAM / prof. MgN 33

Outros materiais