Escolar Documentos
Profissional Documentos
Cultura Documentos
vhdl2 PDF
vhdl2 PDF
Description Language
Aula 2
Semântica de VHDL
D
0
S A
MUX
S
D
1
D0, D1 = Entradas
A = Sinal
S = Saída
A
Multiplexador de 1 bit
LIBRARY ieee;
USE ieee.std_logic_1164.all;
D0
8
D1
8 MUX Saída
D2 8
8
D3
8
Sinal 2
Multiplexador de 8 bits
LIBRARY ieee; ARCHITECTURE behavior_ws OF
USE ieee.std_logic_1164.all; Mux_8b IS
BEGIN
ENTITY Mux_8b IS WITH Sinal SELECT
PORT ( Saida <= D0 WHEN “00”,
D0, D1, D2, D3 : IN BIT_VECTOR(7 D1 WHEN “01”,
DOWNTO 0); D2 WHEN “10”,
D3 WHEN “11”;
Sinal : IN
END behavior;
BIT_VECTOR (1 DOWNTO 0);
Saida : OUT
BIT_VECTOR(7 DOWNTO 0) );
END Mux_8b;
Multiplexador de 8 bits
LIBRARY ieee; ARCHITECTURE behavior_ws OF
USE ieee.std_logic_1164.all; Mux_8b IS
BEGIN
ENTITY Mux_8b IS WITH Sinal SELECT
PORT ( Saida <= D0 WHEN “00”,
D0, D1, D2, D3 : IN D1 WHEN “01”,
STD_LOGIC_VECTOR(7 DOWNTO 0); D2 WHEN “10”,
D3 WHEN OTHERS;
Sinal : IN
END behavior;
STD_LOGIC_VECTOR (1 DOWNTO 0);
Saida : OUT
STD_LOGIC_VECTOR(7 DOWNTO 0) );
END Mux_8b;
Decodificador 3-8
LIBRARY ieee; ARCHITECTURE behavior_ws OF decod3to8 IS
USE ieee.std_logic_1164.all; BEGIN
WITH endereco SELECT
ENTITY decod3to8 IS Saida <= “00000001” WHEN “000”,
PORT ( “00000010” WHEN “001”,
endereco : IN BIT_VECTOR(2 DOWNTO 0); “00000100” WHEN “010”,
Saida : OUT BIT_VECTOR(7 DOWNTO 0) ); “00001000” WHEN “011”,
END decod3to8; “00010000” WHEN “100”,
“00100000” WHEN “101”,
“01000000” WHEN “110”,
“10000000” WHEN “111”;
END behavior;
Exercício: Multiplexador Estrutural
• Comando FOR:
__generate_label:
FOR __index_variable IN __range GENERATE
__statement;
__statement;
END GENERATE;
Exemplo Generate
• Comando IF
Sequencia_reset:
IF reset = ‘0’ GENERATE
a <= ‘0’;
b <= ‘0’;
END GENERATE;
• Comando FOR:
Operacao_and:
FOR indice IN (0 to 7) GENERATE
Soma(indice) <= a(indice) and b(indice);
END GENERATE;
Exemplo Somador 1 Bit
A
B S
Vem_1
(CARRY_IN)
Vai_
(CARRY_OUT)
Exemplo Somador 1 Bit
A B CIN SUM COUT
SUM = A XOR B XOR CIN; 0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
COUT = ((A OR B) AND CIN) OR 0 1 1 0 1
(A AND B); 1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
Exemplo Somador 1 Bit
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY onebit_full_adder IS
PORT (Cin, A, B : IN STD_LOGIC;
Sum, Cout : OUT STD_LOGIC);
END onebit_full_adder;
ENTITY eight_bits_adder IS
PORT (Cin : IN STD_LOGIC;
A : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
Sum : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
Cout : OUT STD_LOGIC);
END eight_bits_adder;
Exemplo Somador 8 Bits
utilizando o somador de 1 bit
COUT CIN
ADDER A
SUM
B
COMPONENT onebit_full_adder
PORT (Cin : IN STD_LOGIC;
A : IN STD_LOGIC;
B : IN STD_LOGIC;
Sum : OUT STD_LOGIC;
Cout : OUT STD_LOGIC);
END COMPONENT;
Exemplo Somador 8 Bits
utilizando o somador de 1 bit
BEGIN
ENTITY nbits_adder IS
GENERIC (N : POSITIVE := 8); -- Default value
PORT (Cin : IN STD_LOGIC;
A, B : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
Sum : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);
Cout : OUT STD_LOGIC );
END nbits_adder;
Exemplo Somador Genérico
ARCHITECTURE behavior OF nbits_adder IS
SIGNAL int_carry : STD_LOGIC_VECTOR(N-1 DOWNTO 0);
BEGIN
Sum <= A(N-1 DOWNTO 0) XOR B(N-1 DOWNTO 0) XOR
(int_carry(N-2 DOWNTO 0) & Cin);
int_carry(0) <= ((A(0) OR B(0)) AND Cin) OR (A(0) AND B(0));
CASCADE_CARRY:
FOR I in 1 TO N-1 GENERATE
int_carry(I) <= ((A(I) OR B(I)) AND int_carry(I-1)) OR (A(I) AND B(I));
END GENERATE CASCADE_CARRY;
Cout <= int_carry(N-1);
END behavior;
Exemplo Somador Genérico
• Para interligar componentes genéricos:
COMPONENT nbits_adder IS
GENERIC (N : POSITIVE);
PORT (Cin : IN STD_LOGIC;
A, B : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
Sum : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);
Cout : OUT STD_LOGIC);
END COMPONENT;
Adder : nbits_adder
GENERIC MAP (N => 8)
PORT MAP (cin, A(7 downto 0), B(7 downto 0), Saida(7 downto 0), cout);