Apostila VHDL

23
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. 1

Transcript of Apostila VHDL

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

17

--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

20