Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Prototipação Rápida de Sistemas Digitais usando VHDL e FPGAs Professor Edward David Moreno edwdavid@gmail.com Ciência da Computação 2 Objetivos deste Módulo � Divulgação de uma nova tecnologia (FPGA-VHDL). � Dar continuidade nas pesquisas desenvolvidas até hoje. � Encontrar pessoas que tenham verdadeira afinidade com a área. � Aprender a projetar sistemas digitais � Se possível, fazer a prototipação em FPGAs. 3 Alguns projetos Desenvolvidos ou em desenvolvimento. � Projeto turbina � Projeto de processadores (HC05 - HC11) � Projeto GLT � Projeto de Criptografia � Projeto do robô � Projeto Alarme Visual � Projeto processamento de imagens � Arquiteturas para Aplicações Específicas – REDE, Criptoprocessadores, etc. � Outros... 4 LAS - Laboratório de Arquitetura de Sistemas Equipamentos: � Fonte � Osciloscópio � Microcontroladores � FPGAS � Multímetro � Gerador de Sinal � Kits Didáticos � e outros... 5 Conteúdo (Resumo por fases) � Teoria básica de VHDL e FPGA � Descrição e simulação de circuitos digitais. � Descrição, simulação e implementação de circuitos digitais básicos (combinacionais, sequenciais) � Circuitos básicos � Divisor de clock � Decodificador � ULA � Somadores, Multiplicadores, Divisores � Relógio Simplificado � Comunicação Serial � Processadores � Outros Circuitos* *depende do andamento do curso 6 Sistemas Embebidos “Embedded systems” � Sistemas de Computação Embebidos – Em dispositivos eletrônicos – Díficil definir. Em principio qualquer outro sistema computacional diferente a um computador de mesa (desktop computer) – Bilhões de unidades produzidas a cada ano, versus milhões de unidades de desktop Computadores Estão em … e em ... E ainda em ... Comparação CUSTO 7 Uma “Pequena Lista” de Sistemas Embarcados E a lista continua em crescimento Anti-lock brakes Auto-focus cameras Automatic teller machines Automatic toll systems Automatic transmission Avionic systems Battery chargers Camcorders Cell phones Cell-phone base stations Cordless phones Cruise control Curbside check-in systems Digital cameras Disk drives Electronic card readers Electronic instruments Electronic toys/games Factory control Fax machines Fingerprint identifiers Home security systems Life-support systems Medical testing systems Modems MPEG decoders Network cards Network switches/routers On-board navigation Pagers Photocopiers Point-of-sale systems Portable video games Printers Satellite phones Scanners Smart ovens/dishwashers Speech recognizers Stereo systems Teleconferencing systems Televisions Temperature controllers Theft tracking systems TV set-top boxes VCR’s, DVD players Video game consoles Video phones Washers and dryers 8 Some common characteristics of embedded systems � Single-functioned – Executes a single program, repeatedly � Tightly-constrained – Low cost, low power, small, fast, etc. � Reactive and real-time – Continually reacts to changes in the system’s environment – Must compute certain results in real-time without delay 9 Um Exemplo de SE - Uma camera digital Microcontroller CCD preprocessor Pixel coprocessor A2D D2A JPEG codec DMA controller Memory controller ISA bus interface UART LCD ctrl Display ctrl Multiplier/Accum Digital camera chip lens CCD � Funcionamento Simples – sempre uma camera digital � Fortes Limitações: Baixo custo, baixa potência, pequeno, rápido � Reativo e tempo-real: aceitam pequenas extensões 10 Parte 2 - Conceitos de FPGAs � Definição � Estrutura Interna � Roteamento � Reconfiguração � Áreas de Aplicação 11 Definição FPGA - Field Programmable Gate Array � Conjunto de Portas Programáveis � Prototipação, validação da lógica e desenvolvimento do hardware. � Permite desenvolver circuitos de lógica digital complexa, � Dispositivos FPGA não possuem registradores, ULA, Unidade de Controle ou periféricos convencionais. � Um FPGA é constituído por milhares de portas lógicas desconexas, as quais serão “interligadas” para formar a lógica necessária. 12 XilinxXilinx AlteraAltera Kits de PrototipaçãoKits de Prototipação http://www.xilinx.com http://www.altera.com 13 FPGAFPGA 14 Estrutura Interna CLB Figura 1 : Estutura interna FPGA família 4000 D Q Slew Rate Control Passive Pull-Up, Pull-Down Delay Vcc Output Buffer Input Buffer Q D Pad D Q SD RD EC S/R Control D Q SD RD EC S/R Control 1 1 F' G' H' DIN F' G' H' DIN F' G' H' H' HFunc.Gen. GFunc.Gen. FFunc.Gen. G4 G3 G2 G1 F4 F3 F2 F1 C4C1C2 C3 K Y X H1 DIN S/R EC IOB Um FPGA típico , é constituído por inúmeras células básicas (CLB’s), que serão interligadas com base no roteamento. 15 Configurable Logic Block (CLB) 16 I/O Block 17 Roteamento É a forma com que as Unidades Básicas serão interligadas, gerando a lógica correspondente ao circuito descrito. O software de síntese é responsável por configurar as linhas de roteamento. O roteamento das células (CLBs) influência diretamente no desempenho geral do circuito descrito. 18 Reconfiguração Alguns FPGAs são reconfiguráveis (Virtex), ou seja, tem capacidade de alterar sua lógica interna. � Reconfiguração parcial � Reconfiguração total 19 Áreas de Aplicação • Consumo: Decodificador de áudio digital, arcade games, video games, sistemas de karaokê. • Industrial: Equipamentos de teste e medidas, equipamentos médicos, controle remoto, robótica, emulador ASIC, sistemas de visão. • Comunicação de Dados: Multiplexadores, roteadores, vídeo conferencia, criptografia, conectores, modems, compressão de dados, LAN HUBs, FDDI, Wireless LANS. • Telecomunicação: Interfaces SONET, interfaces de fibras ópticas, ATM, interfaces ISDN, controlador de voice-mail, equipamentos PBX, multiplexadores T1, compressão de dados. • Militar: Sistemas de computadores e comunicação, Controle de Fogo. • Computadores: Interfaces de memória, controladores DMA, controladores de cache, co-processadores SSP, multimídia, gráficos. • Periféricos: Controladores de disco, controladores de vídeo, FAX, máquinas de caixa, modems, sistemas POS, cartões de aquisição de dados, terminais, impressoras, scanners, copiadoras. 20 Parte 1 - Conceitos da Linguagem VHDL � Definição � Vantagens da linguagem VHDL � Breve Histórico � Padrão IEEE � Fluxo Concorrente 21 Definição VHDL : V ery High Speed Integrated Circuit H ardware D escription L anguage � VHDL é uma linguagem padronizada para descrever componentes digitais permitindo a transferência de componentes ou projetos para qualquer tecnologia em construção de hardware existente ou que ainda será desenvolvida. 22 Vantagens da linguagem VHDL: • Reduz tempo/custo de desenvolvimento. •Maior nível de abstração. • Projetos independentes da tecnologia. • Facilidade de atualização dos projetos. • Grande número de usuários (internacional). 23 Breve Histórico � Começou em 1980 (DoD). � Em 1987, todos os circuitos eletrônicos digitais descritos em VHDL e � O Institute of Electrical and Electronics Engineers (IEEE), ratificou o VHDL como IEEE Padrão 1076. � F22 � Em 1993 a linguagem VHDL foi revisada � Em 1996, as ferramentas de simulação e de síntese foram incorporadas pelo padrão IEEE 1076’93 24 Padrão IEEE � O padrão nada mais é do que uma biblioteca que define os tipos da linguagem VHDL e que implementam operações lógicas básicas. � Padrão IEEE 1164 - Atualmente as ferramentas CADs (Xilinx Foundation, Altera - Max Plus)utilizam este padrão que possibilita a utilização de tipos variados e comandos próprios que facilitam a implementação dos circuitos. Library IEEE; Use IEEE.std_logic_1164.all; 25 Fluxo Concorrente A linguagem VHDL é uma linguagem concorrente, ou seja, permite a construção de “trechos de códigos” concorrentes entre si. Trechos seqüenciais também são permitido. Processo1 trecho sequencial Processo2 trecho sequencial Execução Execução A execução entre os processos são concorrentes 26 Parte 3 - Introdução aos Elementos da Linguagem VHDL � Entidade � Arquitetura � Componente � Tipos da Linguagem VHDL � Processo � Variável e Sinal � Comandos Seqüenciais 27 Entidade - Entity entity nome_entidade is <direção>: in, out, inout; <tipo>: std_logic, std_logic_vector, integer Declara as interfaces do projeto ( pinos de entrada e saída ) port ( pino_0: <direção> <tipo>; pino_1: <direção> <tipo>); end nome_entidade; 28 Entidade - Exemplo entity exemplo is a b cin in out port ( a : in std_logic; b : in std_logic; c : out std_logic); end exemplo; 29 Arquitetura - Architecture architecture nome_arquitetura of nome_entidade is <declarações> <declarações>: sinais, componente, tipos, constantes, funções Define a implementação do projeto begin <comandos> end nome_arquitetura ; 30 Arquitetura - Exemplo architecture comportamento of exemplo is c <= a and b; a b c Implementação do projeto begin c <= a and b; end comportamento ; 31 Componentes - Component O componente é uma estrutura que referência diretamente uma entidade, e possibilita a instanciação e replicação da mesma sem a necessidade de descreve-la novamente. A forma geral para declarar um componente é: COMPONENT nome [PORT (lista de portas);] END COMPONENT [nome]; 32 Componente -Exemplo component ula port (op: in std_logic_vector(3 downto 0); A: in std_logic; B: in std_logic; Saida: out std_logic); end component; 33 Tipos da Linguagem VHDL � integer variable teste1 : integer; � boolean variable teste4:boolean; � bit variable teste2 : bit; � bit_vector variable teste3 : bit_vector(7 downto 0); � std_logic; variable teste5:std_logic; � std_logic_vector variable teste6: std_logic_vector(7 downto 0) 34 Processo - Process � Dá características de paralelismo (concorrência) � Execução entre processos é paralela; � Dentro dos processos as ações são seqüenciais, executadas passo a passo; Process begin < comandos seqüenciais... > end; end process; < lista sensitiva> 35 Comando ´Event O comando ´Event é utilizado para sincronização de processos em relação a mudança de estado de um signal ou uma porta de entrada do circuito. O processo fica monitorando o signal/porta e entra em execução no momento definido em ´Event Clock´Event and Clock = ‘1’ Clock´Event and Clock = ‘0’ 36 Variable X Signal � Variable : São variáveis locais ao processo onde foram declaradas. São atualizadas de acordo com a execução do processo a:=10; � Signal : São variáveis globais e tem seu valor atualizado ao final do processo. Só pode ocorrer uma única atribuição em todo o código a<=10; Na atribuição de variáveis usaNa atribuição de variáveis usa--se se :=:= Na atribuição de sinais usaNa atribuição de sinais usa--se se <=<= 37 Exemplo de uso : Variable Process Variable a,b : std_logic; Variable c : integer; begin a:=‘1’; b:= not (a); c:= 15; end; end process; a := ‘0’; NÃO EXISTE !!! 38 Exemplo de uso : Signal signal a : std_logic; P1: Process begin a<=‘1’; end; end process; P2: Process begin case a is when ‘0’ =>................... < comandos > when ‘1’ =>....................< comandos > end; end process; Um sinal pode ser utilizado por vários processos 39 Exemplo de uso : Signal signal a , b : std_logic; P1: Process begin a<=‘1’; end; end process; P2: Process begin a<=´0’; end; end process; Não pode ocorrer mais de uma atribucão para um mesmo signal !!! 40 Comandos Seqüenciais � Comando IF � Comando CASE � Comando WHILE � Comando FOR 41 Comando IF if condição then <comandos> else <comandos> end if ; if condição then <comandos> elsif condição then <comandos> else <comandos> end if ; 42 Comando IF - Exemplos if a < b then c <= ´1´; else c <= ´0´; end if; if a < b then c <= ´1´; elsif b < d e <=´0´; else e<= ´1´; end if; ? 43 Comando CASE case <expressão> is when <condição> => <comandos> [when others => <comandos>] end case ; 44 Comando Case - Exemplo case entrada is when "0000" => saida <="1111011"; when "1101" => saida <="1111100"; when "1110" => saida <="0110111"; when "1111" => saida <="0010111"; when others => saida<="0000000"; end case; 45 Comando WHILE e FOR while <condição> loop <comandos> end loop; for item in primeiro_item to último_item loop <comandos> end loop; Comando While Comando FOR 46 Comando While e For - Exemplos While a>b loop a<= a-1; end loop; Comando While Comando For For i in 0 to 100 loop c<=a; end loop; 47 Parte 4 - Descrição e Simulação de Circuitos Digitais Básicos � Uso da Ferramenta Foundation � Portas Lógicas Básicas � Circuitos Multiplexadores � Circuitos Aritméticos � Somadores e Subtratores � Discussão de Circuitos Multiplicadores e Somadores � Decodificadores e Codificadores 48 Uso da Ferramenta Foundation 49 Portas Lógicas Básicas Portas implementadas pelo padrão 1164: � AND � OR � XOR � NOR � NAND � XNOR � NOT 50 Implementação e Simulação de uma porta lógica básica AND library ieee; use ieee.std_logic_1164.all; entity exe_and is port ( a : in std_logic; b : in std_logic; c : out std_logic); end exe_and; 51 Implementação e Simulação de uma porta lógica básica AND architecture comportamento of exe_and is begin process (a,b ) begin c <= a and b; end process; end comportamento; a b c 1 1 1 0 0 a b c 0 0 0 0 1 0 1 0 0 1 1 1 (a) ( b) (c) 52 Circuitos Multiplexadores library ieee; use ieee.std_logic_1164.all; entity mult2x1 is port ( op1,op2,sel: in std_logic; s: out std_logic); endmult2x1; architecturemult2x1_arch of mult2x1 is begin process (op1,op2,sel) begin if sel =´1´ then s <= op1; else s <= op2; end if; end process; endmult2x1_arch; E1 E2 SEL S E1 E2 SEL S Sel S 0 E1 1 E2 (a) (b) (c) 53 VHDL x SCHEMATIC s(0) s(1) s(2) s(3) s(4) s(5) s(6) s(7) x(2)x(1)x(0) case x is when "000" => s <= "00000001"; when "001" => s <= "00000010"; when "010" => s <= "00000100"; when "011" => s <= "00001000"; when "100" => s <= "00010000"; when "101" => s <= "00100000"; when "110" => s <= "01000000"; when "111" => s <= "10000000"; end case; Decodificador 3X8 54 VHDL x SCHEMATIC Estatísticas Espacial Estatísticas Temporal Decodificado 3x8 55 Circuitos Aritméticos � Somadores e Subtratores library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity ULA is port ( OP1: in std_logic_vector (3 downto 0); OP2: in std_logic_vector (3 downto 0); SEL: in STD_LOGIC; RESUL: out std_logic_vector (3 downto 0)); end ULA; architecture ULA_archof ULA is begin process (OP1,OP2,SEL) begin if SEL ='1' then RESUL <= OP1 + OP2; else RESUL <= OP1 - OP2; end if; end process; end ULA_arch; 56 Multiplicadores e Divisores Obtém-se uma multiplicação através de somas consecutivas de um mesmo número De forma semelhante, a divisão é obtida através de subtrações consecutivas Os operadores para multiplicação e divisão em VHDL são : * (asterístico) para a multiplicação / (barra) para a divisão Exemplo : RESULTADO <= A * B; RESULTADO <= A / B; 57 Decodificadores e Codificadores library IEEE; use IEEE.std_logic_1164.all; entity decode is port ( num: in std_logic_vector (1 downto 0); led: out std_logic_vector (6 downto 0)); end decode; 58 Decodificadores e Codificadores architecture decode_arch of decode is begin process (num) case num is when "00" => led <= "0000000"; when "01" => led <= "0000001"; when "10" => led <= "0000010"; when "11" => led <= "0000011"; when others => null; end case; end process; end decode_arch; 59 Parte 5 - Descrição, simulação e implementação em FPGAs � Implementação Real em FPGAs � Circuito pisca LED � Circuito Mostra “OLA” � Circuito Relógio � CPU de 4 bits Simplificada � Comunicação Serial 60 Implementação Real em FPGAs � Kit de Prototipação � Pinagem � Arquivos UCF e BIT 61 Kit de Prototipação � LEDs � Memória � Saída VGA � Microcontrolador � Porta Paralela � Discussão sobre EPROM 62 Parte 3 - Implementação � Como acender um LED do Display ? � Como Fazer um Contador ? � Como Fazer um Divisor de Clock ? � Como Fazer um Decodificador ? � Implementação de um Relógio 63 Como acender um LED do Display ? O que é preciso para acender um LED ? � Precisamos conhecer o display da placa �Agora é só colocar “1” na sua saída e seta-la em um dos pinos da sua placa P18 P19 P20 P23 P24 P25 P26 64 Acende LED library IEEE; use IEEE.std_logic_1164.all; entity led is port ( a: out std_logic ); end led; 65 Acende LED architecture led_arch of led is signal aux : std_logic; begin aux <= '1'; process ( aux ) begin if aux='1' then a <= '1'; end if; end process; end led_arch; 66 Alocando Pinos Para alocar pinos: � Entre no diretório do projeto � Localize o arquivo nome_projeto.ucf � No final do arquivo digite os pinos e seus respectivos valores. Sintaxe: NET <nome_pino> LOC=P<num_pino>; 67 Implementação para acender um LED � Editar o arquivo .UCF com o seguinte formato : NET saida LOC=P20; 68 Locando Pinos P18 P19 P20 P23 P24 P25 P26 P13 - Pino do clock da FPGA - 12MHz P18, P19, P20, P23, P24, P25, P26 - Pinos do Display Pinos Importantes: 69 Como fazer um divisor de clock ? Para o nosso exemplo iremos gerar um clock a cada 1 segundo. O que é preciso para gerar um clock a cada 1 segundo ? � Primeiro é preciso conhecer o clock do FPGA, neste caso o clock é de 12Mhz 1 Hz = 1 pulso/seg 1 Mhz = 1.000.000 pulsos/seg 12 Mhz = 12.000.000 pulsos/seg � E necessário também criar um sinal do tipo inteiro para servir como um contador de tempo. 70 Implementação do clock divisor de 1 segundo library ieee; use ieee.std_logic_1164.all; entity clock_1s is port ( clk_12Mhz : in std_logic; -- clock de 12Mz da placa saida : out std_logic); -- clock gerado de 1 segundo end clock_1s; architecture comportamento of clock_1s is signal cont : integer; begin Process(clock_12Mhz) Begin if clock_12Mhz'Event and clock_12Mhz = '1' then cont <= cont + 1; --se ocorrer a transição positiva do clock 71 end if; end process; end comportamento; if cont = 6000000 then saida <= '1'; -- saída recebe “1” quando cont igual 6000000 end if; if cont = 12000000 then saida<=‘0’; -- saída recebe “0” quando cont igual 12000000 cont <= 0; -- contador é zerado, para iniciar novo ciclo end if; 72 Implementação do clock divisor de 1 segundo � Editar o arquivo .UCF com o seguinte formato : NET clk_12Mhz LOC=P13; NET saida LOC=P20; 73 Como fazer um Decodificador ? Para o nosso exemplo iremos decodificar para aparecer no Display SIC-2003 A decodificação vai ser realizada de acordo com o nosso display S - 1100111 I - 0010001 C - 0110011 - - 0000100 2 - 0111110 0 - 1111011 0 - 1111011 3 - 1101110 P20 P19 P25 P18 P23 P24 P26 74 Implementação do Decodificador library ieee; use eee.std_logic_1164.all; entity decodifica is port (clock_12Mhz : in std_logic; saida : out std_logic_vector ( 6 downto 0)); end decodifica; architecture comportamento of decodifica is signal cont : integer; begin process ( clock_12Mhz) variable conta : integer; 75 Implementação do Decodificador begin if clock_12Mhz'EVENT and clock_12Mhz='1' then cont <= cont+1; if cont = 6000000 then conta := conta +1; end if; if cont = 12000000 then cont <= 0; end if; if conta = 12 then conta := 0; end if; 76 Implementação do Decodificador case conta is when 0 =>saida <="1100111"; when 1 =>saida <="0010001"; when 2 =>saida <="0110011"; when 3 =>saida <="0000100"; when 4 =>saida <="0111110"; when 5 =>saida <="0000000"; when 6 =>saida <="1111011"; when 7 =>saida <="0000000"; when 8 =>saida <="1111011"; when 9 =>saida <="0000000"; when 10 =>saida <=" 1101110"; when others => saida <= "0000000"; end case; end if; end process; end comportamento; 77 Implementação do Decoficador Locando os Pinos Editar o arquivo .UCF com o seguinte formato : NET clock_12Mhz LOC=P13; NET saida<0> LOC=P18; NET saida<1> LOC=P19; NET saida<2> LOC=P20; NET saida<3> LOC=P23; NET saida<4> LOC=P24; NET saida<5> LOC=P25; NET saida<6> LOC=P26; 78 Implementação de um Relógio entity relogio is port ( clock_12Mhz : in std_logic; -- clock da placa 12Mz segundo : out std_logic; -- saida de1 segundo num: out std_logic_vector(0 to 5)); -- números end relogio; clock_12Mz segundo num in out out library ieee; use ieee.std_logic_1164.all; 79 if cont_clk = 12000000 then cont_clk <= 0; segundo<='0'; cont_seg <= cont_seg+1; end if; architecture comportamento of relogio is signal cont_clk, cont_seg, cont_min : integer; begin Process(clock_12Mhz) Begin if clock_12Mhz'EVENT and clock_12Mhz = '1' then cont_clk <= cont_clk + 1; if cont_clk = 6000000 then segundo <= '1'; end if; 80 when 0 => num <="111111"; when 1 => num <="100100"; when 2 => num <="011110"; when 3 => num <="110110"; when 4 => num <="100101"; when 5 => num <="110011"; when 6 => num <="111011"; if cont_seg = 60 then cont_seg <= 0; cont_min <= cont_min+1; end if; if cont_min = 10 then cont_min <= 0; end if; 81 end if; end process; end comportamento; when 7 => num <="100110"; when 8 => num <="111111"; when 9 => num <="110111"; when others => num <="ZZZZZZ"; end case; 82 Implementação de um Relógio � Editar o arquivo .UCF com o seguinte formato : NET clock_12Mhz LOC=P13; NET segundo LOC=P20; NET num<0> LOC=P18; NET num<1> LOC=P19; NET num<2> LOC=P23; NET num<3> LOC=P24; NET num<4> LOC=P25; NET num<5> LOC=P26; 83 Comunicação Serial Cabo serial Cabo Serial Conector RS232 84 Comunicação Serial A comunicação serial é feita com somente um canal de comunicação. Os dados são enviados em uma freqüência conhecida TxD RxD Transmissor Receptor 0 1 1 0 1 0 1 0 85 Comunicação Serial START BIT 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 DADO STOP BIT O dado enviado é de4 bits e corresponde o “A” em hexadecimal, composto pela seqüência binária 1010 86 Comunicação Serial O receptor deve estar configurado para palavra de 4 bits e a freqüência de recepção 87 Arquitetura proposta Divisor de Clock (300Hz) Monta e Envia Palavra 12Mhz Serial_out300Hz
Compartilhar