apostila vhdl
TRANSCRIPT
VHDL
1 – Introdução2 - Programações de portas2.1 – Porta NOT
Exemplo - Porta NOT com variável entrada A e variável saída B.
entity nome isport (A: in bit;
B: out bit);end nome;architecture lógica of nome is
beginB<= not A;
end lógica;
2.2 – Porta ANDExemplo 1 - Uma porta AND com duas entradas ( a , b ) e saída X.
entity nome_1 isport (a,b: in bit;
X: out bit);end nome_1;architecture lógica of nome_1 is
beginX<= 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 isport (a,b,c: in bit;
y: out bit);end nome_2;architecture lógica of nome_2 is
begin
1
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 isport (A,B,C,D: in bit;
g: out bit);end nome_3;architecture lógica of nome_3 is
beging<= A and B and C and D;
end lógica;
2.3 – Porta ORExemplo 1 - Uma porta OR com duas entradas ( a , b ) e saída X.
entity nome_1 isport (a,b: in bit;
X: out bit);end nome_1;architecture lógica of nome_1 is
beginX<= 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 isport (a,b,c: in bit;
y: out bit);end nome_2;architecture lógica of nome_2 is
2
beginy<= a or b or c;
end lógica;
2.4 – Porta NANDExemplo 1 - Uma porta NAND com duas entradas ( a , b ) e saída X.
entity nome_1 isport (a,b: in bit;
X: out bit);end nome_1;architecture lógica of nome_1 is
beginX<= 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 isport (a,b,c: in bit;
y: out bit);end nome_2;architecture lógica of nome_2 is
beginy<= 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 isport (a,b: in bit;
X: out bit);end nome_1;architecture lógica of nome_1 is
begin
3
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 isport (a,b,c: in bit;
y: out bit);end nome_2;architecture lógica of nome_2 is
beginX<= 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 isport (a,b: in bit;
X: out bit);end nome_1;architecture lógica of nome_1 is
beginX<= a xor b;
end lógica;
2.7 – Porta XNORExemplo 1 - Uma porta XNOR com duas entradas ( a , b ) e saída X.
entity nome_1 isport (a,b: in bit;
X: out bit);end nome_1;architecture lógica of nome_1 is
beginX<= a xnor b;
end lógica;
4
3 – Programação de circuitos lógicos através das operações concorrentes e dos modelos estruturais3.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 isport (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 isport (a,b,c: in bit;
f: out bit);
5
end nome_3;architecture estrutural of nome_3 is--Define a porta NAND de duas entradas como um componentecomponent ni_2
port (a,b: in bit;X: out bit);
end component;--Define a porta XNORcomponent xnou_2
port (a,b: in bit;X: out bit);
end component;--Define a porta INVERSORAcomponent não
port (a: in bit;X: out bit);
end component;--Declara os sinais internos ao módulosignal X1,X2:bit;
--O mapeamento das portas especifica a conexão internaBegin
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 entradasentity ni_2 is
port (a,b: in bit;X: out bit);
End ni_2;
architecture lógica of ni_2 isbegin
X<= a nand b;end lógica; --Define a porta XNOR de duas entradasentity xnou_2 is
port (a,b: in bit;X: out bit);
end xnou_2;
architecture lógica of xnou_2 isbegin
X<= a xnor b;end lógica; --Define a porta INVERSORAentity não is
port (a: in bit;b: out bit);
6
end não;
architecture lógica of não isbegin
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’dentity 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.
7
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 implementadaentity Exemplo_1 is
8
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 componentecomponent i_2
port (a,b: in bit;X: out bit);
end component;--Define a porta OR de duas entradas como um componentecomponent ou_2
port (a,b: in bit;X: out bit);
end component--Declara os sinais internos ao módulosignal X1,X2:bit;--O mapeamento das portas especifica a conexão internaBegin
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 architectureentity i_2 is
port (a,b: in bit;X: out bit);
end i_2;architecture lógica of i_2 is
beginX<= a and b;
end lógica; --Define a porta OR de duas entradasentity ou_2 is
port (a,b: in bit;X: out bit);
end ou_2;architecture lógica of ou_2 is
beginX<= a or b;
end lógica;
Exemplo 2 – Resolver a expressão abaixo do circuito também mostrado abaixo.X=ab+cd +ef
9
--Define a estrutura total que vai ser implementadaentity 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 componentecomponent i_2
port (a,b: in bit;X: out bit);
end component;--Define a porta OR de três entradas como um componentecomponent ou_3
port (a,b,c: in bit;X: out bit);
end component--Declara os sinais internos ao módulosignal X1,X2,X4:bit;--O mapeamento das portas especifica a conexão internaBegin
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 architectureentity i_2 is
port (a,b: in bit;X: out bit);
end i_2;
architecture lógica of i_2 isbegin
X<= a and b;end lógica; --Define a porta OR de três entradasentity ou_3 is
port (a,b,c: in bit;X: out bit);
10
end ou_2;architecture lógica of ou_3 is
beginX<= a or b or c;
end lógica;
Exemplo 3 – Resolver para um circuito digital com duas saídas.X=ab+cdY=ab+cd +ef
--Define a estrutura total que vai ser implementadaentity 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 componentecomponent i_2
port (a,b: in bit;X: out bit);
end component;--Define a porta OR de três entradas como um componentecomponent ou_3
port (a,b,c: in bit;X: out bit);
end component--Declara os sinais internos ao módulosignal X1,X2,X3:bit;--O mapeamento das portas especifica a conexão internaBegin
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_3G5: ou_3 port map(X1,X2,X3,Y);
End estrutural--Os componentes têm que ser declarados como entity e sua architecture
11
entity i_2 isport (a,b: in bit;
X: out bit);end i_2;
architecture lógica of i_2 isbegin
X<= a and b;end lógica; --Define a porta OR de três entradasentity ou_3 is
port (a,b,c: in bit;X: out bit);
end ou_2;architecture lógica of ou_3 is
beginX<= a or b or c;
end lógica;
3.4 – Programação de Tabela-Verdade3.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 de dados. entity tabela_verdade is
port (A,B,C,D: in bit;X: out bit);
end tabela_verdade;architecture fluxo_dados of tabela_verdade isbeginX<=’1’when(a=’0’ and b=’0’ and c=’1’ and
d=’0’)elseX<=’1’when(a=’0’ and b=’1’ and c=’1’ and
d=’0’)elseX<=’1’when(a=’1’ and b=’0’ and c=’1’ and
d=’0’)elseX<=’1’when(a=’1’ and b=’1’ and c=’0’ and
d=’0’)else ‘0’;
End fluxo_dados;
3.4.2 - Programações de Tabela-Verdade através de expressões na forma soma-de-produtoObs. a’ representa não a, etc.
A B C D X0 0 0 0 00 0 0 1 00 0 1 0 10 0 1 1 00 1 0 0 00 1 0 1 00 1 1 0 10 1 1 1 01 0 0 0 01 0 0 1 01 0 1 0 11 0 1 1 01 1 0 0 11 1 0 1 01 1 1 0 01 1 1 1 0
12
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)
O programa foi desenvolvido através de expressões lógicas.
entity nome_1 isport (a,b,c,d: in bit;
X: out bit);end nome_1;architecture lógica of nome_1 is
begin lógicaX<= (not a or not b or c or d) and (a or b or
not c or d) ;end lógica; Exemplo 2 – Resolver a expressão abaixo:X=(a’+b’+c+d).(a+b+c’+d).(a+b’+c’+d).(a+b+c+d’)
O programa foi desenvolvido através de expressões lógicas.
entity nome_1 isport (a,b,c,d: in bit;
X: out bit);end nome_1;architecture lógica of nome_1 is
begin lógicaX<= (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 VHDL4.1 – Programações de multiplexadores em VHDL
A B C D X0 0 0 0 10 0 0 1 10 0 1 0 10 0 1 1 00 1 0 0 10 1 0 1 10 1 1 0 10 1 1 1 11 0 0 0 11 0 0 1 11 0 1 0 11 0 1 1 11 1 0 0 11 1 0 1 01 1 1 0 11 1 1 1 1
13
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 isport (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 isbeginF<=’P0’when (S=’00’ )elseF<=’P1’when (S=’01’ )elseF<=’P2’when (S=’10’ )elseF<=’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 isport (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)
14
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 isport (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
15
if S=”00” thenP0 <= DP1 <=’0’
P2 <=’0’P3 <=’0’;
Elseif S=”01” thenP0 <=’0’P1 <= DP2 <=’0’P3 <=’0’;
Elseif S=”10” thenP0 <=’0’P1 <=‘0’P2 <= DP3 <=’0’;
Elseif S=”11” thenP0 <=’0’P1 <=’0’P2 <=’0’P3 <= D;
End ifEnd operação;
4.3 – Programações de um codificador com prioridade alta em VHDL
16
--Define a estrutura total que vai ser implementadaentity 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 componentecomponent i_2
port (a,b: in bit;X: out bit);
end component;--Define a porta OR de cinco entradas como um componentecomponent ou_5
port (a,b,c, d, e: in bit;X: out bit);
end componentcomponent não
port (a: in bit;X: out bit);
end component
--Declara os sinais internos ao módulosignal
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 internaBegin
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);
18
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 estruturalentity não is
port (A: in bit;B: out bit);
end não;architecture lógica of não is
beginB<= 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
beginX<= 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
beginy<= a or b or c or d or e;
end lógica;
4.4 – Comparador de magnitude (74LS85)
19