Você está na página 1de 20

VHDL

1 – Introdução
2 - Programações de portas
2.1 – Porta NOT
Exemplo - Porta NOT com variável entrada A e variável saída B.

entity nome is
port (A: in bit;
B: out bit);
end nome;
architecture lógica of nome is
begin
B<= not A;
end lógica;

2.2 – Porta AND


Exemplo 1 - Uma porta AND com duas entradas ( a , b ) e saída X.

entity nome_1 is
port (a,b: in bit;
X: out bit);
end nome_1;
architecture lógica of nome_1 is
begin
X<= a and b;
end lógica;

Exemplo 2 - Uma porta AND com três entradas ( a , b , c ) e saída y.

entity nome_2 is
port (a,b,c: in bit;
y: out bit);
end nome_2;
architecture lógica of nome_2 is
begin
y<= a and b and c;
end lógica;

Exemplo 3 - Uma porta AND com quatro entradas ( A , B , C , D ) e saída g.

entity nome_3 is
port (A,B,C,D: in bit;
g: out bit);
end nome_3;
architecture lógica of nome_3 is
begin
g<= A and B and C and D;
end lógica;

2.3 – Porta OR
Exemplo 1 - Uma porta OR com duas entradas ( a , b ) e saída X.

entity nome_1 is
port (a,b: in bit;
X: out bit);
end nome_1;
architecture lógica of nome_1 is
begin
X<= a or b;
end lógica;

Exemplo 2 - Uma porta OR com três entradas ( a , b , c ) e saída y.

entity nome_2 is
port (a,b,c: in bit;
y: out bit);
end nome_2;
architecture lógica of nome_2 is
begin
y<= a or b or c;
end lógica;

2.4 – Porta NAND


Exemplo 1 - Uma porta NAND com duas entradas ( a , b ) e saída X.

entity nome_1 is
port (a,b: in bit;
X: out bit);
end nome_1;
architecture lógica of nome_1 is
begin
X<= a nand b;
end lógica;

Exemplo 2 - Uma porta NAND com três entradas ( a , b , c ) e saída y.

entity nome_2 is
port (a,b,c: in bit;
y: out bit);
end nome_2;
architecture lógica of nome_2 is
begin
y<= a nand b nand c;
end lógica;
2.5 – Porta NOR
Exemplo 1 - Uma porta NOR com duas entradas ( a , b ) e saída X.

entity nome_1 is
port (a,b: in bit;
X: out bit);
end nome_1;
architecture lógica of nome_1 is
begin
X<= a nor b;
end lógica;

Exemplo 2 - Uma porta NOR com três entradas ( a , b , c ) e saída y.

entity nome_2 is
port (a,b,c: in bit;
y: out bit);
end nome_2;
architecture lógica of nome_2 is
begin
X<= a nor b nor c;
end lógica;
2.6 – Porta XOR
Exemplo 1 - Uma porta XOR com duas entradas ( a , b ) e saída X.

entity nome_1 is
port (a,b: in bit;
X: out bit);
end nome_1;
architecture lógica of nome_1 is
begin
X<= a xor b;
end lógica;

2.7 – Porta XNOR


Exemplo 1 - Uma porta XNOR com duas entradas ( a , b ) e saída X.

entity nome_1 is
port (a,b: in bit;
X: out bit);
end nome_1;
architecture lógica of nome_1 is
begin
X<= a xnor b;
end lógica;
3 – Programação de circuitos lógicos através das operações concorrentes e
dos modelos estruturais
3.1 – Comparação entre as operações concorrente e os modelos estruturais
Exemplo 3.1 – Construa a listagem em VHDL que descreve o circuito lógico
mostrado abaixo, usando operações concorrentes.

entity nome_3 is
port (a,b,c: in bit;
f: out bit);
end nome_3;
architecture concorrente of nome_3 is
begin
f<= not a xnor ( b nand c ) ;
end concorrente;

Operações concorrentes – É importante observar, em VHDL, que as regras de


precedência são um pouco diferentes. A operação not tem o nível mais alto de
precedência, ela é executada em primeiro lugar. As funções restantes têm níveis de
precedência menores do que a da operação not, mas são iguais entre si. Em particular, or
e nand têm o mesmo nível. Quando operadores de igual procedência são encontrados
em uma linha de comando VHDL, eles são executados em ordem, da esquerda para a
direita. Parênteses podem ser utilizados para aumentar o nível de precedência de um
grupo de operações.

Exemplo 3.2 – Construa a listagem em VHDL que descreve o circuito lógico do


exemplo 3.1 mostrado acima, usando arquitetura com modelo estrutural. Na figura
abaixo o circuito é repetido mostrando os componentes (component ) pelo referido
nome e os sinais (signal ) usados na estrutura.

entity nome_3 is
port (a,b,c: in bit;
f: out bit);
end nome_3;
architecture estrutural of nome_3 is
--Define a porta NAND de duas entradas como um componente
component ni_2
port (a,b: in bit;
X: out bit);
end component;
--Define a porta XNOR
component xnou_2
port (a,b: in bit;
X: out bit);
end component;
--Define a porta INVERSORA
component não
port (a: in bit;
X: out bit);
end component;
--Declara os sinais internos ao módulo
signal X1,X2:bit;
--O mapeamento das portas especifica a conexão interna
Begin
G1: não port map(a,X1);
G2: ni_2 port map(b,c,X2);
G3: xnou_2 port map(X1,X2,f);
End estrutural
--Os componentes têm que ser declarados como entity e sua architecture
--Define a porta NAND de duas entradas
entity ni_2 is
port (a,b: in bit;
X: out bit);
End ni_2;

architecture lógica of ni_2 is


begin
X<= a nand b;
end lógica;
--Define a porta XNOR de duas entradas
entity xnou_2 is
port (a,b: in bit;
X: out bit);
end xnou_2;

architecture lógica of xnou_2 is


begin
X<= a xnor b;
end lógica;
--Define a porta INVERSORA
entity não is
port (a: in bit;
b: out bit);
end não;

architecture lógica of não is


begin
b<= not a;
end lógica;

3.2 – Programação de circuitos lógicos através das operações concorrentes

Exemplo 1 – Programar o circuito lógico mostrado abaixo:

Sua expressão lógica é dada por:


X=a’b’cd+abc’d
entity nome_1 is
port (a,b,c,d: in bit;
X: out bit);
end nome_1;
architecture lógica of nome_1 is
begin
X<= (not a and not b and c and d) or (a and b and not c and d) ;
end lógica;

Exemplo 2 – Programar em VHDL o circuito lógico mostrado abaixo.


Esse circuito tem a expressão lógica.
X=a’b’cd+abc’d+ab’c’d+abcd’
Programa foi desenvolvido através de operações concorrente da expressão
lógica.
entity nome_1 is
port (a,b,c,d: in bit;
X: out bit);
end nome_1;
architecture lógica of nome_1 is
begin
X<= (not a and not b and c and d) or (a and b and not c and d) or
(a and not b and not c and d) or (a and b and c and not d);
end lógica;
3.3 – Programações em VHDL com arquitetura estrutural
Exemplo 1 – Resolver a expressão do circuito abaixo.
X=ab+cd

--Define a estrutura total que vai ser implementada


entity Exemplo_1 is
port (a,b,c,d: in bit;
X: out bit);
end Exemplo_1;
architecture estrutural of Exemplo_1 is
--Define a porta AND de duas entradas como um componente
component i_2
port (a,b: in bit;
X: out bit);
end component;
--Define a porta OR de duas entradas como um componente
component ou_2
port (a,b: in bit;
X: out bit);
end component
--Declara os sinais internos ao módulo
signal X1,X2:bit;
--O mapeamento das portas especifica a conexão interna
Begin
G1: i_2 port map(a,b,X1);
G2: i_2 port map(c,d,X2);
G3: ou_2 port map(X1,X2,X);
End estrutural
--Os componentes têm que ser declarados como entity e sua architecture
entity i_2 is
port (a,b: in bit;
X: out bit);
end i_2;
architecture lógica of i_2 is
begin
X<= a and b;
end lógica;
--Define a porta OR de duas entradas
entity ou_2 is
port (a,b: in bit;
X: out bit);
end ou_2;
architecture lógica of ou_2 is
begin
X<= a or b;
end lógica;

Exemplo 2 – Resolver a expressão abaixo do circuito também mostrado abaixo.


X=ab+cd +ef
--Define a estrutura total que vai ser implementada
entity Exemplo_2 is
port (a,b,c,d,e,f: in bit;
X: out bit);
end Exemplo_2;
architecture estrutural of Exemplo_1 is
--Define a porta AND de duas entradas como um componente
component i_2
port (a,b: in bit;
X: out bit);
end component;
--Define a porta OR de três entradas como um componente
component ou_3
port (a,b,c: in bit;
X: out bit);
end component
--Declara os sinais internos ao módulo
signal X1,X2,X4:bit;
--O mapeamento das portas especifica a conexão interna
Begin
G1: i_2 port map(a,b,X1);
G2: i_2 port map(c,d,X2);
G3: i_2 port map(e,f,X4);
G4: ou_3 port map(X1,X2,X4,X);
End estrutural
--Os componentes têm que ser declarados como entity e sua architecture
entity i_2 is
port (a,b: in bit;
X: out bit);
end i_2;

architecture lógica of i_2 is


begin
X<= a and b;
end lógica;
--Define a porta OR de três entradas
entity ou_3 is
port (a,b,c: in bit;
X: out bit);
end ou_2;
architecture lógica of ou_3 is
begin
X<= a or b or c;
end lógica;

Exemplo 3 – Resolver para um circuito digital com duas saídas.


X=ab+cd
Y=ab+cd +ef

--Define a estrutura total que vai ser implementada


entity Exemplo_1 is
port (a,b,c,d,e,f: in bit;
X,Y: out bit);
end Exemplo_1;
architecture estrutural of Exemplo_1 is
--Define a porta AND de duas entradas como um componente
component i_2
port (a,b: in bit;
X: out bit);
end component;
--Define a porta OR de três entradas como um componente
component ou_3
port (a,b,c: in bit;
X: out bit);
end component
--Declara os sinais internos ao módulo
signal X1,X2,X3:bit;
--O mapeamento das portas especifica a conexão interna
Begin
G1: i_2 port map(a,b,X1);
G2: i_2 port map(c,d,X2);
G3: i_2 port map(e,f,X3);
G4: ou_3 port map(X1,X2,X2,X);
-- O sinal X2 foi repetido em duas das três entradas de ou_3
G5: ou_3 port map(X1,X2,X3,Y);
End estrutural
--Os componentes têm que ser declarados como entity e sua architecture
entity i_2 is
port (a,b: in bit;
X: out bit);
end i_2;

architecture lógica of i_2 is


begin
X<= a and b;
end lógica;
--Define a porta OR de três entradas
entity ou_3 is
port (a,b,c: in bit;
X: out bit);
end ou_2;
architecture lógica of ou_3 is
begin
X<= a or b or c;
end lógica;

3.4 – Programação de Tabela-Verdade


3.4.1 – Programação de Tabela-Verdade através de fluxo de dados

Exemplo 1 – Implementar em VHDL a Tabela-Verdade abaixo através de fluxo


A B C D X de dados.
0 0 0 0 0 entity tabela_verdade is
0 0 0 1 0 port (A,B,C,D: in bit;
0 0 1 0 1 X: out bit);
0 0 1 1 0 end tabela_verdade;
0 1 0 0 0 architecture fluxo_dados of tabela_verdade is
begin
0 1 0 1 0
X<=’1’when(a=’0’ and b=’0’ and c=’1’ and
0 1 1 0 1
d=’0’)else
0 1 1 1 0
X<=’1’when(a=’0’ and b=’1’ and c=’1’ and
1 0 0 0 0 d=’0’)else
1 0 0 1 0 X<=’1’when(a=’1’ and b=’0’ and c=’1’ and
1 0 1 0 1 d=’0’)else
1 0 1 1 0 X<=’1’when(a=’1’ and b=’1’ and c=’0’ and
1 1 0 0 1 d=’0’)else
1 1 0 1 0 ‘0’;
1 1 1 0 0 End fluxo_dados;
1 1 1 1 0

3.4.2 - Programações de Tabela-Verdade através de expressões na forma


soma-de-produto
Obs. a’ representa não a, etc.
O programa foi desenvolvido através de expressões lógicas.

3.4.3 - Programações de Tabela-Verdade através de expressões na forma


produto-de-soma.

Exemplo 1 – Resolver a expressão abaixo:


X=(a’+b’+c+d).(a+b+c’+d)
A B C D X
0 0 0 0 1 O programa foi desenvolvido através de expressões
0 0 0 1 1 lógicas.
0 0 1 0 1 entity nome_1 is
0 0 1 1 0 port (a,b,c,d: in bit;
0 1 0 0 1 X: out bit);
end nome_1;
0 1 0 1 1
architecture lógica of nome_1 is
0 1 1 0 1
begin lógica
0 1 1 1 1
X<= (not a or not b or c or d) and (a or b
1 0 0 0 1 or not c or d) ;
1 0 0 1 1 end lógica;
1 0 1 0 1 Exemplo 2 – Resolver a expressão abaixo:
1 0 1 1 1 X=(a’+b’+c+d).(a+b+c’+d).(a+b’+c’+d).(a+b+c+d’)
1 1 0 0 1 O programa foi desenvolvido através de expressões
1 1 0 1 0 lógicas.
1 1 1 0 1
1 1 1 1 1 entity nome_1 is
port (a,b,c,d: in bit;
X: out bit);
end nome_1;
architecture lógica of nome_1 is
begin lógica
X<= (not a or not b or c or d) and (a or b or not c or d) and (a or
not b or not c or d) and (a or b or c or not d);
end lógica;

4. Programações de circuitos MSI em VHDL


4.1 – Programações de multiplexadores em VHDL
Exemplo 1a – Na figura abaixo se tem um multiplexador (Mux_4_1) com 4
entradas de dados (P0, P1, P2 e P3), 2 entradas de seleção (S0 e S1) e uma saída de
dado (F).

entity Mux_4_1 is
port (P0,P1,P2,P3: in bit;
S: in bit_vector (1 downto 0);
F: out bit);
end Mux_4_1;
-- A arquitetura pode ser feita com comandos concorrentes

architecture fluxo_dados of Mux_4_1 is


begin
F<=’P0’when (S=’00’ )else
F<=’P1’when (S=’01’ )else
F<=’P2’when (S=’10’ )else
F<=’P3’when (S=’11’ )else
End fluxo_dados;

Exemplo 1b – Uma forma alternativa de programar o circuito anterior é através


de uma listagem equivalente usando processo seqüencial ( process )

entity Mux_4_1 is
port (P0,P1,P2,P3: in bit;
S: in bit_vector (1 downto 0);
F: out bit);
end Mux_4_1;
architecture básica of Mux_4_1 is
begin

Mux4_para_1: process (P0,P1,P2,P3)


begin

if S = “00” then

F<=P0

elseif S=”01” then

F<=P1

elseif S=”10” then

F<=P2

elseif S=”11” then

F<=P3

endif

end process Mux4_para_1

end básica;
4.2 – Programações de demultiplexadores em VHDL
Exemplo 1 – Na figura abaixo se tem um demultiplexador (DeMux_1_4) com 1
entradas de dados (D), 2 entradas de seleção (S0 e S1) e 4 saídas de dados (O0, O1, O2
e O3).

entity DeMux_1_4 is
port (D: in bit;
S: in bit_vector (1 downto 0);
P0,P1,P2,P3: out bit);
end Mux_4_1;
architecture operação of DeMux_1_4 is
begin
if S=”00” then
P0 <= D
P1 <=’0’

P2 <=’0’
P3 <=’0’;
Elseif S=”01” then
P0 <=’0’
P1 <= D
P2 <=’0’
P3 <=’0’;
Elseif S=”10” then
P0 <=’0’
P1 <=‘0’
P2 <= D
P3 <=’0’;
Elseif S=”11” then
P0 <=’0’
P1 <=’0’
P2 <=’0’
P3 <= D;
End if
End operação;

4.3 – Programações de um codificador com prioridade alta em VHDL


--Define a estrutura total que vai ser implementada
entity codificadirPH is
port (E0,E1,E2,E3,E4,E5,E6,E7,E8,E9,: in bit;
O0,O1,O2,O3: out bit);
end Exemplo_2;
architecture estrutural of Exemplo_1 is
--Define a porta AND de duas entradas como um componente
component i_2
port (a,b: in bit;
X: out bit);
end component;
--Define a porta OR de cinco entradas como um componente
component ou_5
port (a,b,c, d, e: in bit;
X: out bit);
end component
component não
port (a: in bit;
X: out bit);
end component

--Declara os sinais internos ao módulo


signal
h1,h2,h3,h4,h5,h6,h7,n2,n3,n4,n5,n6,n7,n8,n9,1A,2A,3A,4A,5A,6A,7A,8A:bit;
--O mapeamento das portas especifica a conexão interna
Begin
G1: ou_5 port map(1A,3A,5A,7A,9A,O0);
G2: ou_5 port map(2A,3A,6A,7A,7A,O1);
G3: ou_5 port map(4A,5A,6A,7A,7A,O2);
G4: ou_5 port map(8A,8A,8A,9A,9A,O3);
G5: i_2 port map(E1,h1,1A);
G6: i_2 port map(E2,h2,2A);
G7: i_2 port map(E3,h3,3A);
G8: i_2 port map(E4,h4,4A);
G9: i_2 port map(E5,h5,5A);
G10: i_2 port map(E6,h6,6A);
G11: i_2 port map(E7,h7,7A);
G12: i_2 port map(E8,h9,8A);
G13: i_2 port map(n2,h2,h1);
G14: i_2 port map(n3,h3,h2);
G15: i_2 port map(n4,h4,h3);
G16: i_2 port map(n5,h5,h4);
G17: i_2 port map(n6,h6,h5);
G18: i_2 port map(n7,h7,h6);
G19: i_2 port map(n8,h8,h7);
G20: não port map(E2,n2);
G21: não port map(E3,n3);
G22: não port map(E4,n4);
G23: não port map(E5,n5);
G24: não port map(E6,n6);
G25: não port map(E7,n7);
G26: não port map(E8,n8);
G27: não port map(E9,n9);

End estrutural
entity não is
port (A: in bit;
B: out bit);
end não;
architecture lógica of não is
begin
B<= not A;
end lógica;
entity i_2 is
port (a,b: in bit;
X: out bit);
end i_2;
architecture lógica of i_2 is
begin
X<= a and b;
end lógica;
entity ou_5 is
port (a,b,c,d,e: in bit;
y: out bit);
end ou_5;
architecture lógica of ou_5 is
begin
y<= a or b or c or d or e;
end lógica;

4.4 – Comparador de magnitude (74LS85)

Você também pode gostar