Você está na página 1de 20

VHDL

1 Introduo 2 - Programaes de portas


2.1 Porta NOT Exemplo - Porta NOT com varivel entrada A e varivel sada B.

entity nome is port (A: in bit; B: out bit); end nome; architecture lgica of nome is begin B<= not A; end lgica; 2.2 Porta AND Exemplo 1 - Uma porta AND com duas entradas ( a , b ) e sada X.

entity nome_1 is port (a,b: in bit; X: out bit); end nome_1; architecture lgica of nome_1 is begin X<= a and b; end lgica; Exemplo 2 - Uma porta AND com trs entradas ( a , b , c ) e sada y.

entity nome_2 is port (a,b,c: in bit; y: out bit); end nome_2; architecture lgica of nome_2 is begin

y<= a and b and c; end lgica; Exemplo 3 - Uma porta AND com quatro entradas ( A , B , C , D ) e sada g.

entity nome_3 is port (A,B,C,D: in bit; g: out bit); end nome_3; architecture lgica of nome_3 is begin g<= A and B and C and D; end lgica; 2.3 Porta OR Exemplo 1 - Uma porta OR com duas entradas ( a , b ) e sada X.

entity nome_1 is port (a,b: in bit; X: out bit); end nome_1; architecture lgica of nome_1 is begin X<= a or b; end lgica; Exemplo 2 - Uma porta OR com trs entradas ( a , b , c ) e sada y.

entity nome_2 is port (a,b,c: in bit; y: out bit); end nome_2; architecture lgica of nome_2 is 2

begin y<= a or b or c; end lgica; 2.4 Porta NAND Exemplo 1 - Uma porta NAND com duas entradas ( a , b ) e sada X.

entity nome_1 is port (a,b: in bit; X: out bit); end nome_1; architecture lgica of nome_1 is begin X<= a nand b; end lgica; Exemplo 2 - Uma porta NAND com trs entradas ( a , b , c ) e sada y.

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

entity nome_1 is port (a,b: in bit; X: out bit); end nome_1; architecture lgica of nome_1 is begin

X<= a nor b; end lgica; Exemplo 2 - Uma porta NOR com trs entradas ( a , b , c ) e sada y.

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

entity nome_1 is port (a,b: in bit; X: out bit); end nome_1; architecture lgica of nome_1 is begin X<= a xor b; end lgica; 2.7 Porta XNOR Exemplo 1 - Uma porta XNOR com duas entradas ( a , b ) e sada X.

entity nome_1 is port (a,b: in bit; X: out bit); end nome_1; architecture lgica of nome_1 is begin X<= a xnor b; end lgica; 4

3 Programao de circuitos lgicos atravs das operaes concorrentes e dos modelos estruturais 3.1 Comparao entre as operaes concorrente e os modelos estruturais
Exemplo 3.1 Construa a listagem em VHDL que descreve o circuito lgico mostrado abaixo, usando operaes 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; Operaes concorrentes importante observar, em VHDL, que as regras de precedncia so um pouco diferentes. A operao not tem o nvel mais alto de precedncia, ela executada em primeiro lugar. As funes restantes tm nveis de precedncia menores do que a da operao not, mas so iguais entre si. Em particular, or e nand tm o mesmo nvel. Quando operadores de igual procedncia so encontrados em uma linha de comando VHDL, eles so executados em ordem, da esquerda para a direita. Parnteses podem ser utilizados para aumentar o nvel de precedncia de um grupo de operaes. Exemplo 3.2 Construa a listagem em VHDL que descreve o circuito lgico 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); 5

end component; --Define a porta XNOR component xnou_2 port (a,b: in bit; X: out bit); end component; --Define a porta INVERSORA component no port (a: in bit; X: out bit); end component; --Declara os sinais internos ao mdulo signal X1,X2:bit; --O mapeamento das portas especifica a conexo interna Begin G1: no port map(a,X1); G2: ni_2 port map(b,c,X2); G3: xnou_2 port map(X1,X2,f); End estrutural --Os componentes tm 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 lgica of ni_2 is begin X<= a nand b; end lgica; --Define a porta XNOR de duas entradas entity xnou_2 is port (a,b: in bit; X: out bit); end xnou_2; architecture lgica of xnou_2 is begin X<= a xnor b; end lgica; --Define a porta INVERSORA entity no is port (a: in bit; b: out bit); end no; architecture lgica of no is begin b<= not a; end lgica;

3.2 Programao de circuitos lgicos atravs das operaes concorrentes


Exemplo 1 Programar o circuito lgico mostrado abaixo:

Sua expresso lgica dada por: X=abcd+abcd entity nome_1 is port (a,b,c,d: in bit; X: out bit); end nome_1; architecture lgica 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 lgica; Exemplo 2 Programar em VHDL o circuito lgico mostrado abaixo.

Esse circuito tem a expresso lgica. X=abcd+abcd+abcd+abcd Programa foi desenvolvido atravs de operaes concorrente da expresso lgica. entity nome_1 is port (a,b,c,d: in bit; X: out bit); end nome_1; architecture lgica 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 lgica;

3.3 Programaes em VHDL com arquitetura estrutural


Exemplo 1 Resolver a expresso 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 mdulo signal X1,X2:bit; --O mapeamento das portas especifica a conexo 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 tm que ser declarados como entity e sua architecture entity i_2 is port (a,b: in bit; X: out bit); end i_2; architecture lgica of i_2 is begin X<= a and b; end lgica; --Define a porta OR de duas entradas entity ou_2 is port (a,b: in bit; X: out bit); end ou_2; architecture lgica of ou_2 is begin X<= a or b; end lgica; Exemplo 2 Resolver a expresso abaixo do circuito tambm 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 trs entradas como um componente component ou_3 port (a,b,c: in bit; X: out bit); end component --Declara os sinais internos ao mdulo signal X1,X2,X4:bit; --O mapeamento das portas especifica a conexo 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 tm que ser declarados como entity e sua architecture entity i_2 is port (a,b: in bit; X: out bit); end i_2; architecture lgica of i_2 is begin X<= a and b; end lgica; --Define a porta OR de trs entradas entity ou_3 is port (a,b,c: in bit; X: out bit); 10

end ou_2; architecture lgica of ou_3 is begin X<= a or b or c; end lgica; Exemplo 3 Resolver para um circuito digital com duas sadas. 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 trs entradas como um componente component ou_3 port (a,b,c: in bit; X: out bit); end component --Declara os sinais internos ao mdulo signal X1,X2,X3:bit; --O mapeamento das portas especifica a conexo 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 trs entradas de ou_3 G5: ou_3 port map(X1,X2,X3,Y); End estrutural --Os componentes tm que ser declarados como entity e sua architecture 11

entity i_2 is port (a,b: in bit; X: out bit); end i_2; architecture lgica of i_2 is begin X<= a and b; end lgica; --Define a porta OR de trs entradas entity ou_3 is port (a,b,c: in bit; X: out bit); end ou_2; architecture lgica of ou_3 is begin X<= a or b or c; end lgica;

3.4 Programao de Tabela-Verdade 3.4.1 Programao de Tabela-Verdade atravs de fluxo de dados


A 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 B 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 Exemplo 1 Implementar em VHDL a Tabela-Verdade abaixo atravs de fluxo de dados. C D X entity tabela_verdade is 0 0 0 port (A,B,C,D: in bit; 0 1 0 X: out bit); 1 0 1 end tabela_verdade; 1 1 0 architecture fluxo_dados of tabela_verdade is 0 0 0 begin 0 1 0 X<=1when(a=0 and b=0 and c=1 and 1 0 1 d=0)else 1 1 0 X<=1when(a=0 and b=1 and c=1 and 0 0 0 d=0)else 0 1 0 X<=1when(a=1 and b=0 and c=1 and 1 0 1 d=0)else 1 1 0 X<=1when(a=1 and b=1 and c=0 and 0 0 1 d=0)else 0 1 0 0; 1 0 0 End fluxo_dados; 1 1 0

3.4.2 - Programaes de Tabela-Verdade atravs de expresses na forma soma-de-produto


Obs. a representa no a, etc.

12

O programa foi desenvolvido atravs de expresses lgicas.

3.4.3 - Programaes de Tabela-Verdade atravs de expresses na forma produto-de-soma.

A 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

B 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

Exemplo 1 Resolver a expresso abaixo: X=(a+b+c+d).(a+b+c+d) C D X O programa foi desenvolvido atravs de expresses 0 0 1 lgicas. 0 1 1 entity nome_1 is 1 0 1 port (a,b,c,d: in bit; 1 1 0 X: out bit); 0 0 1 end nome_1; 0 1 1 architecture lgica of nome_1 is 1 0 1 begin lgica 1 1 1 X<= (not a or not b or c or d) and (a or b or 0 0 1 not c or d) ; 0 1 1 end lgica; 1 0 1 Exemplo 2 Resolver a expresso abaixo: 1 1 1 X=(a+b+c+d).(a+b+c+d).(a+b+c+d).(a+b+c+d) 0 0 1 O programa foi desenvolvido atravs de expresses 0 1 0 lgicas. 1 0 1 1 1 1 entity nome_1 is port (a,b,c,d: in bit; X: out bit); end nome_1; architecture lgica of nome_1 is begin lgica 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 lgica;

4. Programaes de circuitos MSI em VHDL 4.1 Programaes de multiplexadores em VHDL


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 seleo (S0 e S1) e uma sada 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<=P0when (S=00 )else F<=P1when (S=01 )else F<=P2when (S=10 )else F<=P3when (S=11 )else End fluxo_dados; Exemplo 1b Uma forma alternativa de programar o circuito anterior atravs de uma listagem equivalente usando processo seqencial ( 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 bsica 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 bsica;

4.2 Programaes 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 seleo (S0 e S1) e 4 sadas 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 operao of DeMux_1_4 is begin 15

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

4.3 Programaes de um codificador com prioridade alta em VHDL

16

17

--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 no port (a: in bit; X: out bit); end component --Declara os sinais internos ao mdulo 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 conexo 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: no port map(E2,n2); G21: no port map(E3,n3); G22: no port map(E4,n4); G23: no port map(E5,n5);

18

G24: no port map(E6,n6); G25: no port map(E7,n7); G26: no port map(E8,n8); G27: no port map(E9,n9); End estrutural entity no is port (A: in bit; B: out bit); end no; architecture lgica of no is begin B<= not A; end lgica; entity i_2 is port (a,b: in bit; X: out bit); end i_2; architecture lgica of i_2 is begin X<= a and b; end lgica; entity ou_5 is port (a,b,c,d,e: in bit; y: out bit); end ou_5; architecture lgica of ou_5 is begin y<= a or b or c or d or e; end lgica;

4.4 Comparador de magnitude (74LS85)

19

20

Você também pode gostar