Baixe o app para aproveitar ainda mais
Prévia do material em texto
Portas Lógicas e VHDL II Semana Acadêmia Engenharia Física - Álgebra Booleana: variáveis assumem um entre apenas dois valores. - Conjunto discreto: [0;1] - Operações: OR, AND, NOT, XOR, NAND, NOR… - Cada operação tem a sua representação, porta lógica e tabela verdade; Operação OR - Representação: A + B; A v B Operação AND - Representação: A . B ; A ^ B Operação NOT Representação: A Operação XOR Operação NAND Operação AND seguida de NOT: Operação NOR Operação OR seguida de NOT Circuitos Integrados Protoboard FPGA - Field Programmable Gate Array, hardware reconfigurável. VHDL - Very High Speed Integrated Circuits (V) Hardware Description Language (HDL); - Como o nome diz, é linguagem de descrição de hardware. A programação deve ser pensada em paralelo. VHDL - Não é case-sensitive, “TeStE” equivale à “teste”; - Comentários são iniciados por “--”; - Packages : equivalem às bibliotecas em C/C++; VHDL: Estrutura I) Inclusão dos pacotes: library IEEE; use IEEE.std_logic_1164.all; II) Entity: interface que descreve entradas/saídas entity nome_entidade is port( --declaração I/O …); end nome_entidade; VHDL: Estrutura III) Architecture: corpo do sistema, onde ocorrem atribuições e operações architecture nome_arquitetura of nome_entidade is --declaração dos sinais begin --operações end nome_arquitetura; -> Na arquitetura, paralelismo! VHDL: Estrutura IV) Process: implementado dentro da arquitetura, processamento sequencial process(sinais_de_sensitividade) begin --operações end process; Um processo é “chamado” quando um sinal de sensitividade se altera! VHDL: Tipos de Sinais - std_logic -> assume valores ‘0’ , ‘1’, ‘U’ (não inicializado), ‘Z’ (alta impedância), etc; - std_logic_vector(7 downto 0) -> a ordem é muito importante, pois dita qual o bit menos/mais significativo. É possível (0 to 7), (31 downto 0), etc; - integer range num_mín to num_máx VHDL: Tipos de Sinais Exemplos: entity enti is architecture arc of enti is port( clock : in std_logic; signal A : std_logic; reset : in std_logic; signal cont : integer range 0 to 5; saida : out std_logic); signal B : std_logic_vector(3 end enti; downto 0); begin ... VHDL: Operações e Atribuições begin saida <= A; -- a saída do módulo é o valor do sinal A process(clock, reset) -- quando clock e reset mudam, chama begin if reset = ‘1’ then -- funciona como C/C++ A <= ‘0’; cont <= 0; elsif clock’event and clock=’1’ then -- se transição de clock p/ 1 ... VHDL: Operações e Atribuições elsif clock’event and clock=’1’ then -- se transição de clock p/ 1 if cont < 5 then cont <= cont + 1; A <= ‘0’; else cont <= 0; A <= ‘1’; ... -> Podemos utilizar um std_logic_vector como contador, só é necessário que ele tenha o número de bits suficiente! VHDL: Operações e Atribuições A <= ‘1’; end if; -- termina o if do cont end if; -- termina o if do reset/clock end process; end arc; -- terminou a arquitetura VHDL: Operações e Atribuições - Operação “case” funciona semelhante à C: case C is when 0 => B <= (others=>'0'); when 1 => B <= "0001"; … end case; - Operações lógicas podem ser utilizadas diretamente: var3 <= var1 and var2 / var1 or var2 / var1 xor var2 ... VHDL - Atribuições a um sinal ou saída devem ocorrer em apenas uma parte do código; - Só é possível “testar” sinais ou entradas; - Operações “if” e “case” apenas dentro de process! VHDL -> Operação “when” : funcionamento praticamente idêntico ao “case”, mas fora de processo saida <= ‘1’ when (A and B)=’1’ else ‘0’; VHDL: Links úteis: http://www.quicknet.se/hdc/hdl/index.htm#tut http://www.csee.umbc. edu/portal/help/VHDL/VHDL-Handbook.pdf Máquina de Estados - Modelo de representação de circuitos lógicos. Uma máquina tem estados finitos, pode estar em apenas um estado por vez e possui transições entre os estados. - Muito útil para modelar problemas! - Utilizamos uma variável para estado atual e outra para o próximo estado. Máquina de Estados Diagrama de estados: Máquina de Estados - Em VHDL, é comum utilizar a “função” type para criar os estados, sendo declarada junto com os signals: type estados is (parado, subindo, descendo); signal estado_atual : estados; signal proximo_estado : estados; Simulação - Antes de programar a FPGA ou montar o circuito na protoboard, é interessante saber se a lógica funciona corretamente. - Com isso em mente, é ideal simular o código de VHDL! - Para isso, é necessário criar uma “bancada de teste”: testbench. É esse o nome de um módulo de VHDL que não possui entradas e saídas, apenas passa valores para um módulo mais interno. Simulação - No testbench são gerados os sinais, e através de uma “instanciação” estes são repassados ao módulo a ser testado. - Os valores são repassados através de um mapeamento de portas de entrada. - Assim, podemos analisar o comportamento do circuito através das formas de onda dos sinais. Simulação - Exemplo de testbench: entity testbench is inst: entity work.entidade end testbench; port map(sinal_ent => sinal_tb, …); architecture testbench of testbench is signal sinal_tb : std_logic; … begin sinal_tb <= ‘1’, ‘0’ after 10 ns, ‘1’ after 25 ns; Utilidade da linguagem - Grande abrangência, de circuitos simples à projetos muito complexos. - Um ótimo exemplo é o aparelho de amplificação de sinal da empresa Zurich Instruments: Lock-In Amplifier - Recebe um sinal analógico de um aparelho a ser testado e amplifica a frequência a ser estudada, extraindo uma componente da Série de Fourier do sinal recebido. - Primeiramente, o sinal é analógico é convertido para um sinal digital, e então o seu processamento ocorre em uma FPGA programada com VHDL! Lock-In Amplifier - Utilizações: microscopia de Força Atômica, processamento industrial, Quantum e Nano Física, Astronomia, Teste Não-Destrutivo; http://www.zhinst.com/products/hf2li Considerações finais - Obrigado pelo convite, espero que tenha sido proveitoso! E saibam que VHDL é a linguagem campeã neste quesito:
Compartilhar