Baixe o app para aproveitar ainda mais
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;
Compartilhar