Buscar

Construção de Portas no VHDL

Prévia do material em texto

1 
 
Construção de uma porta AND 
library ieee; 
use ieee.std_logic_1164.all; 
entity porta_AND is 
port ( 
entrada1 : in std_logic; 
entrada 2 : in std_logic; 
saída : out std_logic 
); end porta_AND; 
architecture arquitetura_porta_AND of porta_AND is 
begin 
saida <= entrada1 and entrada2; 
end arquitetura_porta_AND; 
 
Construção de uma porta OR 
library ieee; 
use ieee.std_logic_1164.all; 
entity porta_OR is 
port ( 
entrada1 : in std_logic; 
entrada 2 : in std_logic; 
saída : out std_logic 
); end porta_OR; 
architecture arquitetura_porta_OR of porta_OR is 
begin 
saida <= entrada1 or entrada2; 
end arquitetura_porta_OR; 
 
 
 
2 
 
Construção de uma porta NOT 
library ieee; 
use ieee.std_logic_1164.all; 
entity porta_NOT is 
port ( 
entrada : in std_logic; 
saida : out std_logic 
); end porta_NOT; 
 
architecture arquitetura_porta_NOT of porta_NOT is 
begin 
saida <= not entrada; 
end arquitetura_porta_OR; 
Construção de um MULTIPLEXADOR: O multiplexador é um circuito que possui n 
entradas, 2n portas de seleção e uma saída. Sua função é selecionar uma porta entre as n 
portas de entrada por meio do se-letor para atribuí-la à porta de saída. Em VHDL, pode-
se descrever um multiplexador 4x1 como segue: 
library ieee; 
use ieee.std_logic_1164.all; 
entity multiplexador is 
port ( 
entrada1 : in std_logic; 
entrada2 : in std_logic; 
entrada3 : in std_logic; 
entrada4 : in : std_logic; 
seletor in: std_logic_vector(1 downto 0); 
saída : out std_logic 
); end multiplexador; 
architecture arquitetura_multiplexador of multiplexador is 
begin 
saida <= entrada1 when seletor = “00” else 
entrada2 when seletor = “01” else 
3 
 
entrada3 when seletor = “10” else 
entrada4; 
end arquitetura_ multiplexador; 
Construção de um DECODIFICADOR - O mais simples dos decodificadores é o 
decodificador binário, cuja função é de-codificar os valores existentes nas n portas de 
entradas em valores para 2n portas de saída. Nesse tipo de decodificador somente uma 
porta por vez será ligada. Em VHDL, pode-se descrever um decodificador 2x4 como 
segue: 
library ieee; 
use ieee.std_logic_1164.all; 
entity decodificador is 
port ( 
entrada: in std_logic_vector (1 downto 0); 
saida: out std_logic_vector (3 downto 0) 
); 
end decodificador; 
architecture arquitetura_decodificador of decodificador is 
begin 
saida <= “0001” when entrada = “00” else 
“0010” when entrada = “01” else 
“0100” when entrada = “10” else 
“1000”; 
end arquitetura_decodificador; 
 
Circuitos Aritméticos: SOMADOR COMPLETO DE 1 BIT 
library ieee; 
use ieee.std_logic_1164.all; 
entity somador_completo is 
port ( 
cin : in std_logic; 
op1: in std_logic; 
op2: in std_logic 
4 
 
soma : out std_logic; 
cout : : out std_logic 
); 
end somador_completo; 
 
architecture 
arquitetura_somador_completo of somador_completo is 
begin 
soma <= op1 xor op2 xor carry_in; 
carry_out <= (op1 and op2) or (cin and op1) or (cin and op2); 
end arquitetura_somador_completo; 
 
Construção de um REGISTRADOR - Um registrador pode ser implementado por meio 
de flip-flops ou latches e, basica-mente, é utilizado para o armazenamento de dados. A 
seguir, é possível observar uma das implementações possíveis para um simples 
registrador de 1 bit. 
library ieee; 
use ieee.std_logic_1164.all; 
entity registrador is 
port( 
clock : in std_logic; 
entrada : in std_logic; 
saída : out std_logic 
); 
end registrador; 
architecture arquitetura_registrador of registrador is 
begin 
process(clock) 
begin 
if (clock’event and clock=’1’) then 
saida <= entrada; 
end if; 
5 
 
end process; 
end arquitetura_registrador; 
 
Construção de um REGISTRADOR DE DESLOCAMENTO - Um registrador de 
deslocamento (shift register) é um circuito sequencial formado por um conjunto de 
registradores posicionados lado a lado, com a saída de um registrador conectada à entrada 
do registrador adjacente. Assim, a cada borda de subida do reló-gio, os dados 
armazenados nos registradores são deslocados em uma posição. A seguir, encontra-se 
uma possível descrição para um registrador de deslocamento de 8 bits. 
library ieee; 
use ieee.std_logic_1164.all; 
entity registrador_deslocamento is 
port( 
clock : in std_logic; 
entrada : in std_logic_vector (7 downto 0); 
 load : in std_logic; 
saída : out std_logic_vector (3 downto 0) 
); 
end registrador_deslocamento; 
architecture arquitetura_reg_desloc of registrador_deslocamento is 
begin 
process (clock) 
variable aux: std_logic_vector(3 downto 0); 
begin 
if clock’event and clock=’1’ then 
if load=’1’ then 
saida <= entrada; 
aux := entrada; 
else 
aux(7) := aux(6); 
aux(6) := aux(5); 
aux(5) := aux(4); 
6 
 
aux(4) := aux(3); 
aux(3) := aux(2); 
aux(2) := aux(1); 
aux(1) := aux(0); 
aux(0) := ‘0’; 
saida <= aux; 
end if; 
end if; 
end process; 
end arquitetura_reg_desloc; 
 
Construção de um CONTADOR - O contador é um circuito sequencial capaz de 
incrementar ou decrementar o valor da sua saída a cada pulso de relógio. A seguir, 
encontra-se uma possível descrição para um contador de 8 bits, capaz de contar de 0 a 
255 na base decimal. 
library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_unsigned.all; 
entity contador is 
port( 
clock : in std_logic;; 
 counter : out std_logic_vector (7 downto 0)); 
end contador; 
architecture arquitetura_contador of contador is 
signal internal_counter: std_logic_vector (7 downto 0); 
begin 
process (clock) 
begin 
if clock ‘event and clock =’1’ then 
internal_counter <= internal_counter + ‘1’; 
end if; 
end process; counter <= internal_counter; 
7 
 
end arquitetura_contador; 
 
Construção de uma Máquina de estados finita - Uma máquina de estados finita pode ser 
descrita em VHDL de diversas formas. Uma delas é implementar a FSM usando dois 
processos: um para determinar as tran-sições de estado e atribuições dos sinais de saída, 
e outro para atualizar o estado atual de máquina de estados. A seguir, é possível observar 
uma possível descrição para uma máquina de estados finita. 
library ieee; 
use ieee.std_logic_1164.all; 
entity fsm is 
port( 
reset : in std_logic; 
entrada : in std_logic; 
clock : in std_logic; 
saída : out std_logic); 
end fsm; 
architecture arquitetura_fsm of fsm is 
type estados is (s0,s1,s2,s3); 
signal atual,prox : estados; 
begin 
process (clock, reset) 
begin 
if reset=’1’ then 
atual<=S0; 
elsif (clock ‘event and clock =’1’) then 
atual<=prox; 
end if; 
end process; 
 
process (atual,prox,entrada) 
begin 
case atual is 
8 
 
when s0 => prox <=s1; 
when s1 => if entrada=’1’ then 
prox<=s2; 
else prox<=s3; 
end if; 
 when s2 => saida<=’0’; 
prox<=s0; 
when s3 => saida<=’1’; prox<=s0; 
end case; 
 end process; 
end arquitetura _fsm;

Continue navegando