Design Digital Utilizando FPGA

Juliana Amâncio Malagoni Marco Aurélio França Rafael Rodrigues Vieira Neto Wanderley Silmário Júnior Thomás Bessa Ferreira

26-04-2009

1

Faculdade de Engenharia Elétrica Universidade Federal de Uberlândia Campus Santa Mônica Av. João Naves de Ávila, 2121, Bairro: Santa Mônica CEP 38408-100 , Uberlândia - MG, Brasil

Sumário
1 Introdução
1.1 1.2 1.3 1.4 1.5 Linha do Tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Design Digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aplicações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introdução ao Kit de Desenvolvimento UP2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 Dispositivo EPF10K70 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dispositivo EPM7128S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oscilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4
4 6 6 7 8 9 9 9 9 10

Jumpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dispositivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Design Digital
2.1 Linguagem de Descrição de Hardware 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11
11 11 11 12 12 12 12 12 13 13 14 15 17 17 19 23 24 25 25 25 26 26 30 30 35 38

Breve Histórico

O que é VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que signica VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que é uma linguagem de descrição de hardware . . . . . . . . . . . . . . . . . . . . . . . . . . .

Vantagens e Desvantagens de se utilizar VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Componentes de um projeto VHDL 2.1.7.1 2.1.7.2 2.1.7.3 2.1.7.4 PACKAGE (Pacotes) ENTITY (Entidade) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ARCHITECTURE (Arquitetura)

CONFIGURATION (Conguração)

2.1.8

Semântica da linguagem VHDL 2.1.8.1 2.1.8.2 Elementos Léxicos

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Comandos Seqüenciais

2.1.9

Descrição de Comportamento (Process )

2.1.10 Controle da Seqüência 2.1.10.1 2.1.10.2 2.1.10.3 2.1.10.4 2.1.10.5 2.2

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Comando if then

Comando if then else Comando Case

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Comando For Loop Comando Next

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Tutorial Quartus II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Criação do projeto de um circuito lógico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1.1 2.2.1.2 Utilização de Blocos Lógicos Existentes . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Criação de blocos lógicos a partir de código VHDL . . . . . . . . . . . . . . . . . . . . . . 2

. . . . . . . . . . . . . . . . . . . . . . .3. . .5 2. . . . . . . . . . . . . . . . . . . . . . . .4 3. . . . . . . . .2 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. . . . . . . . . . . . . . . . . . . .4 Carregando Seu design do Computador para UP2 . . . . . . . . 54 54 57 57 62 65 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preparando para Carregar Passos nais para Carregar . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 Prática 1 Prática 2 Prática 3 Prática 4 Prática 5 . . . . . . . .4 2. . . . .2. Atribuição de Pinos . . 42 49 50 50 51 51 52 52 53 Compilação . . . . . . .3. . . . . . . . . . . . . . . . . . . . . . . . . . Etapas de Gravação . . . . . . . . . . . . . . . . . . . . . . .2 2.3 3. . .1 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 Simulação . . . . . .1 2. . . . . . . . . . . . . . . . . . . . . . . Testando Seu design . . . . . . . . . . . .2.2 3. . . 3 Aplicações e Prática 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. . . . . . . . .2. . . . . . . . . . . . . . . . . . . .SUMÁRIO 3 2. . . . . . . . . . . . . . . . . . . . . . . . . . . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testando Seu Design em um Kit FPGA 2. . . . .

que oferecem uma forma exível de arranjo destes componentes a nível de hardware. mas os preços de produtos nais que utilizam FPGAs são pouco competitivos 1. Em sua essência uma CPLD é um conjunto de múltiplas DLPs. ca disponível em portas lógicas e ip-ops até a próxima borda de clock. abastecendo o meio acadêmico e industrial.1 Linha do Tempo Abaixo são apresentados alguns fatos marcantes na linha do tempo das FPGAs. produzindo uma saída que. 1983 1984 . o seu uso nas fases preliminares de projeto possibilita uma grande economia de tempo e dinheiro. não há problemas em se distribuir FPGAs em produtos nais. No entanto. Dentro de cada DLP existe um conjunto de macrocélulas conectadas entre si. se comparados à ASICs com alta escala de produção. À medida que os DLPs se tornam cada vez mais densos e rápidos. o seu potencial de uso é muito mais variável. Com a densidade dos chips aumentando a cada dia os fabricantes passaram também a produzir componentes com características semelhantes aos DLPs mas cada vez mais robustas (em termos de lógica). mas que gera componentes de custo bastante reduzidos se produzidos em larga escala. É possível utilizá-las para simples aplicações como decodicação de endereços. A idéia em geral é essa. uma vez que o desenvolvimento de um ASIC é um processo bastante caro e inexível. tornou possível o aparecimento de Dispositivos Lógicos Programáveis (DLP). Em outras palavras. tanto na área de processos quanto na área de Computer Aided Design (CAD). Estas macrocélulas tipicamente compreendem alguma quantidade de portas lógicas (AND e OR. Futuramente esta viria a ser a líder FPGA no meio industrial. O desenvolvimento dos Field Programmable Gate Array (FPGA) é fruto de uma evolução do conceito de PLDs e CPLDs e da indústria de memórias programáveis somente de leitura (PROM). Os FPGAs por sua vez possuem baixo custo de prototipação e alta exibilidade. A densidade destes componentes permite o desenvolvimento de circuitos muito mais complexos. serão o alvo desta apostila e portanto maiores detalhes virão a seguir. usufruindo de todas as vantagens disso. você poderia substituir diversos componentes como portas E. Esta decisão requer basicamente uma análise de custo. Tendo em vista que grande parte destes circuitos podem ser reprogramados. o processo de design eletrônico se benecia destes circuitos fazendo com que o tempo de projeto seja reduzido. o fato de ser recongurável permite alterar o circuito lógico sem mudanças na placa. apesar das particularidades envolvendo fabricantes e família de produtos. Estes componentes receberam o nome de Complex Programmable Logic Devices (CPLD). FPGAs podem ser utilizados para a implementação de praticamente qualquer dispositivo de hardware. OU e NÃO por um único chip. como um menor consumo. mas também é possível fazer uso das mesmas em lógicas de controle de alta performance ou complexas máquinas de estado nito. circuitos integrados prontos feitos especicamente para uma aplicação). 4 . Além disso. . As FPGAs.A empresa Altera é fundada. ip-ops e registradores. se necessário. Devido ao fato das CPLDs serem mais robustas que as DLPs. por exemplo) e ip-ops. Um dos usos mais comuns é a prototipação de componentes que serão um dia Application Specic Integrated Circuits (ASIC. DLPs são dispositivos que possuem em seu interior diversas portas lógicas. e particularmente desenvolvimento para o Kit Educacional UP2 da Altera. uma pequena equação lógica Booleana pode ser resolvida em cada macrocélula.A empresa Xilinx é fundada. Esta equação combina o estado de algumas entradas. Em outras palavras. A primeira utilização destes circuitos é naturalmente nos projetos de prototipagem. Esta empresa futuramente se torna uma grande produtora no ramo de FPGAs. uma menor área utilizada na placa e a eliminação de interconexões entre componentes.Capítulo 1 Introdução O rápido desenvolvimento dos recursos de concepção de circuitos integrados.

no nal dos anos 80.A família Cyclone é lançada pela Altera.Xilinx promete introduzir duas novas famílias de FPGAs representantes de uma nova geração que permitiram a superação de novos desaos em design lógico. A tecnologia surge despontando. . . .Altera introduz no mercado os kits de desenvolvimento voltados para o público acadêmico.Os co-fundadores da Xilinx. alta funcionalidade e preço acessível.Cyclone ® III é lançada pela Altera. . 1985 1988 1988 1990 1991 1991 1992 1992 1993 1997 1999 2000 2001 2002 2003 2006 2006 2006 2007 2008 2009 2009 2009 .MAX 5000 CPLD é lançado pela Altera. Ross Freeman e Bernard Vonderschmitt. Combinando baixo consumo. Page e Luverne R. . menor consumo e a mais alta largura de banda para transceptores. nanciou um experimento proposto por Steve Casselman para desenvolver um computador que implementaria milhares de portas reprogramáveis. . porém seu custo ainda é elevado. portas e lógica fundada em blocos. .13µm. FPGAs foram utilizados principalmente em telecomunicações e redes.No nal da década de 90 as FPGAs encontraram seu caminho para o mercado automotivo. seu nome era XC2064. Casselman foi bem sucedido em seu experimento para a NSWD.Concorrentes aparecem.Patentes são concedidas a David W. Esta é a plataforma de mais alta performance na indústria FPGA. . . Este é o primeiro CPLD do mundo.CAPÍTULO 1. Esta é uma homenagem póstuma. . tanto na sosticação quanto no volume de produção. A empresa Actel assumiria cerca de 18% do mercado neste ano. quando Adrian Thompson fundiu técnicas de algoritmo genético e FPGAs para criar um dispositivo de reconhecimento de som.A década de 1990 foi denitiva para a explosão dos FPGAs. Este é o primeiro dispositivo de 40nm da indústria. .As FPGAs tem sua fama elevada ao auge. de consumo e de aplicações industriais. . Esta família representa um salto nas tecnologias FPGA. Primeira família de FPGAs a ser largamente utilizada. . inventaram o primeiro Field Programmable Gate Array (FPGA) comercialmente viável.FPGAs educacionais atingem a marca de 1 milhão de portas. co-fundador da Xilinx. Peterson por alguns dos conceitos fundamentais da indústria FPGA e das tecnologias de vetores de lógica programável. com um par lookup tables (LUTs) de três entradas. .Altera lança sua primeira família de FPGAs conhecida como FLEX ® 8000. Com a mais alta densidade. Última família lançada pela Altera. . e o sistema gera patente em 1992.Quartus ® II sofre upgrades signicativos.Ross Freeman.Stratix ® IV é lançado pela Altera. . entra para o  National Inventor's Hall of Fame  por sua invenção. a mais alta performance. . .Xilinx lança sua linha Spartan ®-3. O algoritmo de Thompson permitiu que uma matriz de 64 x 64 células em um chip FPGA da Xilinx realizasse uma boa tarefa de reconhecimento. O XC2064 possuia meros 64 blocos de lógica congurável.Altera lança a versão windows-based do MAX+PLUS II. . . Ele possuia portas programáveis e interligações programáveis entre estas portas. Esta família é a primeira com tecnologia 65nm de baixo custo. . Esta família possui baixo custo e utiliza a tecnologia . este era o início de uma nova tecnologia e de um novo mercado. A tecnologia parece promissora. Este viria a ser um CAD e software de design para FPGAs largamente utilizado. Oferece várias melhorias em relação às demais tecnologias de custo otimizado do mercado.Xilinx revela o primeiro FPGA de 65nm com a família Virtex -5. .Altera lança seu software de desenvolvimento MAX+PLUS II. .O software Quartu s® II da Altera é introduzido no mercado.Naval Surface Warfare Departament (NSWD). INTRODUÇÃO 5 1985 .Xilinx Introduz a família XC4000.Arria® II GX. No início da década de 1990. Primeiro FPGA de 90nm do mundo.

Além dos LEs. na forma de Elementos Lógicos (Logic Elements .1 são selecionadas pelo software de design a partir das escolhas do projetista e outras opções de design.1: Arquitetura de FPGAs modernas 1. cuja disposição e uso são denidas pela escolha do usuário. assegurando que os requerimentos de hardware para um design em particular serão conectados corretamente e de tal forma que atinjam todas as metas de desenvolvimento. que podem ser o melhor desempenho possível ou usar a menor quantidade de energia. Figura 1. como ip-ops. Este recurso pode variar tanto na capacidade quanto na disposição (série ou paralelo). Trataremos mais especicamente do design digital envolvendo FPGAs. Estas rotas são extremamente exíveis. INTRODUÇÃO 6 1. A arquitetura de um FPGA é predominantemente lógica. . e registros que podem implementar lógica síncrona. As FPGAs contam com elementos de entrada e saída (User-selectable I/O elements ).DSP) eles podem ser cascateados de tal sorte a facilitar o processamento digital de sinais (PDS).EM). A maioria dos dispositivos contém Loops de Fase Fixa (Phase Locked Loops . Estes elementos podem ser posicionados e congurados para comunicar o FPGA com outros dispositivos externos presentes no circuito impresso. LEs possuem duas partes: Look -Up Tables (LUT). dispostos em malhas ao longo do dispositivo. Todos estes elementos estão conectados através de uma planta contendo rotas reconguráveis e registros de conguração (Congurable routing and Conguration registers ). de construção de FPGAs. Multiplicadores embutidos (Embedded Multipliers ou Digital Signal Processor .3 Design Digital Design digital é o processo de criação de uma nova estrutura lógica utilizando DLP.CAPÍTULO 1. outras estruturas de hardware dedicadas estão presentes para auxiliar na implementação de funções denidas pelo usuário e aumentar a performance. que podem implementar funções comuns de lógica.PLL) para implementar instruções de clock mais renadas (ou complicadas se o leitor preferir). O software para design seleciona as estruturas apropriadas para atingir as metas do projetista. famílias de FPGA e dispositivos dentro destas famílias são construídos com diferentes combinações destes blocos básicos As estruturas de hardware destacadas na Figura 1.1. Todas as estruturas citadas neste tópico e sua disposição podem ser melhor visualizadas na gura 1. Um dos tipos de recursos dedicados são as memórias embutidas (Embedded Memory .2 Arquitetura Diferentes Nesta sessão serão apresentados alguns dos conceitos chaves acerca da arquitetura das FGPAs modernas.LE). tais como portas E ou OU. Estes recursos estão geralmente dispostos em colunas ao longo da FPGA. com a nalidade de obter memórias mais robustas. auxiliando na implementação de funções avançadas de PDS.

2. Contudo. P&R: Escolhe a posição atual das estruturas físicas e as conecta usando a planta de rotas conguráveis (Figura 1. Como podemos notar este processo torna fácil a correção de problemas e mudanças de design num curto período de tempo. em muitos casos. redução de tamanho de placas e agilidade em colocar novos produtos. Este download é feito diretamente no hardware. Naturalmente. Se houver qualquer problema ou alteração no design basta voltar ao código de descrição ou às congurações do software de design realizar as mudanças. principais Síntese e Place and Route (P&R): 1. O processo todo pode ser visto na gura 1. em design digital. A programação ocorre através de uma memória FLASH ou através de uma A compilação. O software gera um programa binário que contém todas as informações necessárias para programar uma FPGA com o design. Esta idéia é geralmente documentada em um formulário para especicar as características do que a FPGA deveria fazer e a forma como ela deveria trabalhar.HDL). é composta de 2 (dois) passos Figura 1.CAPÍTULO 1. recompilar o design e reprogramar o novo binário na FPGA. muitas vezes sem precisar alterar a placa de circuito impresso. 2. de tamanho e peso reduzidos no mercado. Síntese: Traduz o código de descrição nas estruturas de hardware disponíveis dentro do dispositivo. Agora utilizamos um programa de design de FPGAs (trataremos do Quartus II no capítulo 2) para pegar este código e realizar um processo conhecido como compilação. Dois itens são necessários para que esta etapa ocorra: o programa binário e as funcionalidades do depurador de design (este último faz parte do software de design). O próximo passo seria descrever esta idéia utilizando um formulário digital que possa ser entendido pelo programa de design de FPGAs e que possa ser traduzido para as estruturas físicas encontradas no dispositivo alvo. aliada à minimização dos custos pela redução de número de componentes físicos. Por último o usuário faz um download do programa no dispositivo. INTRODUÇÃO 7 O processo de design digital começa com a idéia.1) No processo de compilação ainda está inserida a checagem de erros no design. Seja ela em nível de sistema ou em nível de design especíco para uma FPGA. fazem deste tipo de dispositivo a escolha . os FPGAs não serão competitivos em termos de custo (como no caso de placas em que seriam usados um ou dois circuitos lógicos) ou facilidade (em montagens onde não seja recomendável o uso de encapsulamento SMD). Não entraremos em detalhes de processos e formulários para especicação de idéias em design digital. Esta descrição é normalmente feita em uma linguagem de alto nível para descrição de hardware (Hardware Description Language . a facilidade de implementação ou modicação de um circuito utilizando FPGA. além de ser bem mais exível que a fabricação de um ASIC. conexão direta entre um computador e uma FPGA.2: Processo de Design Digital 1. esta etapa assegura que o design se encaixa corretamente no FPGA alvo e garante que o design opera na performance especicada pelo usuário.4 Aplicações Os FPGAs são aplicáveis em qualquer circuito que empregue lógica digital. Verilog HDL e VHDL são as liguagens mais popularmente utilizadas na criação de designs para FPGAs (veja o capítulo2). embora eles existam.

Geralmente a parte de lógica xa é dedicada à comunicação periférica ou a algumas rotinas comuns. ˆ Núcleos Embutidos: Núcleos de processamento especializados em uma tarefa. 1.5 Introdução ao Kit de Desenvolvimento UP2 O University Program Educatoin Kit (UP2). Robótica. O dispositivo EPM7128S pode ser programado em um sistema de cabo byteBlaster II. Quando usado com o software Quartus II. está baseada em um dispositivo FLEX 10K e em um dispositivo Max 7000.CAPÍTULO 1. Várias áreas da engenharia são ans à utilização de circuitos lógicos. INTRODUÇÃO 8 Figura 1. O kit é projetado para satisfazer as necessidades de instrutores e estudantes em um ambiente de laborátorio. que tinha como princípio a alteração do design interno das aplicações de maneira on-the-y. exibilidade já conhecida da FPGA. capazes de realizar as operações em tempo real visto que as mesmas são efetuadas em hardware. militares e de comunicação são desenvolvidas utilizando-se o conceito de computação recongurável e as FPGAs. Arquitetura e Organização de Computadores. Este papel pode ser tanto didático. tornando-os versáteis. proposta no nal da década de 60. Controle Digital. principalmente embarcados ou especializados. certa para a implantação de novos circuitos. reconguráveis. Portanto as aplicações de FPGA podem ser descritas nas seguintes grandes áreas: ˆ Protótipos: Pela sua recongurabilidade FPGAs são utilizados em prototipagens de sistemas.3: ALTERA UP2 board. para experiências e já vem pronta pra uso. ou com o cabo de download ByteBlaster II. Aplicações High-End de sistemas inteligentes. este board provem de uma plataforma superior para aprender o desenho da lógica digital e usa ferramentas . e os locais dos LEDs. Núcleos Embutidos utilizando FPGA são inclusive ˆ Chips Híbridos: Combinam partes de lógica xa e partes de lógica programável. Eletrônica de Potência. ou com a conguração dispositivo EPC 1. jumpers. Ensino de Tecnologias e Conceitos: A FPGA pode ter um importante papel em várias disciplinas da engenharia. Aliado ao design digital é possível obter protótipos de circuitos lógicos simples à arquitetura de ASICs ou até de processadores mais ˆ ˆ Design Digital: Criação de qualquer circuito lógico a partir de design digital. avançados. a qual pode ser decisiva no estabelecimento de um produto ou no aumento da lucratividade de um negócio. Por sua vez a parte programável possuirá a ˆ Computação Recongurável: A sonhada computação recongurável. quanto no auxílio de implementações nestes tópicos. torna-se mais tangível com o surgimento dos DLPs. O dispositivo EPF10K70 pode ser congurado em um sistema (referindo-se ao processo de programar diretamente com o dispositivo conectado a um PC com o Quartus II). de desenvolvimento padrão industrial e PLDs. PB2. Processamento Digital de Sinais. Inteligência Articial. Dentre as disciplinas podemos citar: Eletrônica Digital. é uma placa ou também chamada board. PB1.

4 Jumpers O UP2 Education Board tem 4 jumpers (TDI. do alto da famíllia MAX7000S. .1: Diagrama dos jumpers dos dispositivos TDI C1 C2 C3 TOD C1 C2 C3 DEVICE C1 C2 C3 BOARD C1 C2 C3 Tabela 1.5. A saída do oscilador dirige uma distribuição de relógio global no dispositivo EPM7128S. máquina-de-estados. Cada EAB provê 2. O último Board no conector deve estar xado para conguração simples (congure somente um dispositivo do Board ) e o último Board não deve ser conectado junto a outros Boards. comunicações. um registro congurável com relógio de programação independente. o dispositvo EPM7128S é ideal para desenhos introdutórios como também maiores combinações e funções de lógica sequencial.5. e funções Digital Signal Processing (DSP). para cursos de desenhos digitais avançados. A tabela 1.744 elementos lógicos (LEs) e 9 embedded array blocks (EABs). INTRODUÇÃO 9 Tabela 1. Com 70. e funções preset. 1.2 apresenta a conguração para os pinos do jumper JTAG apresentados na tabela 1. 1. ROM. O dispositivo EPMF7128S se caracteriza por um encapsulado plástico de 84 pinos (PLCC  Plastic J-Lead Chip Carrier ) e tem 128 macro células.5. está baseado nos elementos (EEPROM  Erase Programmable Read Only Memory ). Cada macro células tem um (AND/xed  OR) programável bem como. Com uma capacidade de 2500 gates e uma arquitetura simples.2: Descrição dos pinos do conector JTAG AÇÃO DESEJADA Programar somente o dispositivo EPM7128S Programar somente o dispositivo FLEX10K Programar e congurar ambos os dispositivos (1) Conectar múltiplas UP2 juntas (2) TDI C1 e C2 C2 e C3 C2 e C3 C2 e C3 TODO C1 e C2 C2 e C3 C1 e C2 ABERTO DEVICE C1 e C2 C2 e C3 C2 e C3 C2 e C3 BOARD C1 e C2 C2 e C3 C1 e C2 C2 e C3 1. C2 e C3) em cada um dos quatro jumpers. Notas: (1) O primeiro dispositivo conectado no JTAG é o FLEX10K e o segundo é o EPM7128S. clock enable. inclusive arquitetura de computador. consiste em 4 entradas LUT. EABs também podem implementar funções lógicas. um ipop programável.1 mostra as conexões dos 3 conectores (C1.3 Oscilador O UP2 Education Board contém um cristal oscilador de 25. microcontroladores. A tabela 1. clear. e os mesmos servem para as várias congurações apresentadas anteriormente. ou funções rst-in rst-out (FIFO).1 Dispositivo EPF10K70 O dispositivo EPF10K70 está baseado na tecnologia SRAM (Static Random Acess Mem ory ).078 localidades de memória que pode ser usada para criar RAM. congurar e programar ambos os dispositivos.175 Mhz. e aplicações DSP. que pode ser xada para uma variedade de congurações (programar só o dispositivo EPM7128S. um membro de alta densidade. Está disponível em um Cada LE encapsulado RQFP de 241 pinos e tem 3.000 gates típicos. e caminhos dedicados para funções de carry-and-cascade.2 Dispositivo EPM7128S O dispositivo de EPM7128S.CAPÍTULO 1. pino 91.5. ou conectar múltipllos UP2 Education Board ). congurar só o dispositvo FLEX10K. DEVICE e BOARD) para xar a conguração do conector JTAG. (2) Idem (1). 1.1. TODO. pino 83 e uma contribuição de relógio global no dispositivo FLEX10K. como multiplicadores. o dispositivo EPF10K70 é ideal para intermediários.

Socket para a conguração de um dispositvo EPC1. Socket para a conguração de um dispositivo EPC1. Dois switches push button (este botão quando pressionado gera um sinal baixo (bit zero). Os pinos para estes dispositivos já estão pré-assinados para switches e LED's da placa Board.175 Mhz.5 Dispositivo FLEX O UP2 dispõe dos seguintes recursos para o dispositvo FLEX10K. ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ Conector JTAG para o cabo ByteBlaster II. Oscilador on-board 25. ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ Conector JTAG para o cabo ByteBlaster II. Dois displays de 7 segmentos. em seu estado normal está em alto ) momentâneos. Porto VGA. Um switch octal com encapsulado DIP. em seu estado normal está em alto ) momentâneos. Porto Mouse. Dois switches push button (este botão quando pressionado gera um sinal baixo (bit zero). Um switch octal com encapsulado DIP. cada uma vom 42 pinos I/O e 7 pinos globais. Três portas de expansão. INTRODUÇÃO 10 Dispositivo FLEX: O UP2 dispões dos seguintes recursos para o dispositivo FLEX10K.175 Mhz. Dois displays de 7 segmentos. Porto Mouse. 1. Três portas de expansão. cada uma vom 42 pinos I/O e 7 pinos globais. Porto VGA.5.CAPÍTULO 1. . Os pinos para estes dispositvos já estão préassinados para switches e LED's da placa Board. Oscilador on-board 25.

reponsáveis pela particularidade de uso do produto. o que permitiria. Um mesmo microprocessador seria utilizado em várias aplicações.2 Breve Histórico Nas décadas de 70 e 80 foi posto em prática um programa do Departamento de Defesa (DoD) americano. b) As novas tecnologias de fabricação (abaixo de 2mm. em paralelo algumas outras linguagens criadas pela indústria. inicialmente de pequena densidade. uma alternativa também expressiva no mercado de projetos de hardware. como o UML. que eram os mais complexos. que exija boa documentação e que busque independência de tecnologia de implementação.1. praticamente todas as ferramentas de desenvolvimento de hardware computadorizadas aceitam essas linguagens como entrada. seria reproduzido e testado aos milhões. 2. CIs de uso especíco para certas aplicações. visavam na maior parte dos casos o uso geral.1 Objetivo Este tópico tem como objetivo introduzir conceitos básicos de VHDL. para especicação e projeto de software orientado a objetos. A evolução da metodologia de projeto de software foi então natural. para o programa VHSIC americano. para alunos de Engenharia. A criação de uma linguagem de descrição de hardware patrocinada pelo programa e. muito parecido com o mercado de projetos de software. com conseqüente aumento de complexidade. em conjunto com o desenvolvimento de tecnologias de fabricação menos custosas. na época) permitiam um aumento de densidade dos CIs. Hoje. Isso signicava que o investimento em um único projeto poderia ser muito maior. Desde o princípio. em função dos argumentos sustentados pela crise. de forma que um projeto baseado em VHDL ou Verilog pode ser implementado com qualquer tecnologia. já havia no mercado de computação a chamada crise do software. especialmente para o hardware digital. todas as atividades relativas à sua criação e uso). ao lado do Verilog. Hoje ainda é grande o desenvolvimento de novos métodos e a busca por uma linguagem descritiva universal. um grande mercado de projetos de pequena escala e aplicações especícas.1. caracterizada pela diculdade de gestão. tornando-se um padrão mundial. A questão preocupante quanto ao hardware. em geral. inclusive em termos de especicação e testes. O problema surgiu inicialmente no software porque era neste componente que se desenvolviam as aplicações. Em 1987. pois os projetos eram. envolvidos em atividades de projeto de hardware digital de alguma complexidade. documentação e sistematização do ciclo de vida do software (que envolve. o VHDL foi normalizado pelo IEEE. Nesta mesma época.Capítulo 2 Design Digital 2. denominado VHSIC e originado da preocupação de domínio das tecnologias envolvidas. No hardware a questão era mais bem controlada. c) Surgiam componentes de lógica programável (PLDs e PALs). foi então uma decorrência natural. Tais componentes poderiam criar. mais genéricos. anteviu-se o problema de representação dos projetos segundo uma linguagem que fosse comum às várias empresas envolvidas e que permitisse uma documentação fechada e clara para projetos de complexidade crescente. mas que poderiam evoluir para densidades muito maiores rapidamente. para desenvolvimento de circuitos integrados de alta velocidade. era que alguns fatos indicavam para uma evolução do mercado que faria surgirem problemas semelhantes aos apresentados pela crise de software. como de fato ocorreu posteriormente. Entre estes fatos pode-se citar os seguintes: a) A fabricação de circuitos integrados deixava de ser exclusiva de alguns poucos fabricantes. Isso fazia com que um grande volume de projetos fossem conduzidos.1 Linguagem de Descrição de Hardware 2. quase sempre com muita complexidade e pouco método. a criação de 11 . Os projetos de microprocessadores. Surgiam empresas especializadas na fabricação de projetos de terceiros. em termos gerais.

ENTITY declaração dos pinos de entrada e saída. Esta descrição é um modelo do sistema hardware.1. Linguagem de Descrição de Hardware com ênfase em Circuitos Integrados de 2.4 O que signica VHDL Very Hight Speed Intregrated Circuit Hardware Description Languagem Traduzindo para o português temos: Altíssima Velocidade.1: Estrutura de um programa VHDL PACKAGE são declarados as constantes. tendo a grande vantagem da alteração do código a qualquer momento. sub-programas. que será executado em um software chamado simulador. tais como: ˆ ˆ ˆ ˆ ˆ ˆ Intercâmbio de projetos entre grupos de pesquisa sem a necessidade de alteração. isto passa a ser muito menor. . através de um programa.CAPÍTULO 2.1.2. Quanto as desvantagens.3 O que é VHDL VHDL é uma forma de se descrever.1. DESIGN DIGITAL 12 2. o comportamento de um circuito ou componente digital. 2. Os projetos são fáceis de serem modicados. apenas uma é relevante: ˆ VHDL não gera um hardware otimizado. CONFIGURATION dene as arquiteturas que serão utilizadas. Um sistema descrito em linguagem de hardware pode ser implementado em um dispositivo programável (FPGA  Field Program Gate Array ). Figura 2. ou seja. enquanto que usando VHDL e Dispositivos Programáveis.7 Componentes de um projeto VHDL A estrutura de um programa VHDL. permitindo assim o uso em campo do seu sistema.1. Veja as guras 2.1. baseia-se em 4 blocos. ARCHITECTURE dene as implementações do projeto. tipos de dados. O custo de produção de um circuito dedicado é elevado.6 Vantagens e Desvantagens de se utilizar VHDL A descrição de um sistema em VHDL apresenta inúmeras vantagens. Permite ao projetista considerar no seu projeto os delay´s comuns aos circuitos digitais.1 e 2.5 O que é uma linguagem de descrição de hardware Uma linguagem de descrição de hardware descreve o que um sistema faz e como ele o faz. 2. A linguagem independe da tecnologia atual. 2. Reduz consideravelmente o tempo de projeto e implementação. você pode desenvolver um sistema hoje e implementá-lo depois.

all Observação: .all deve-se especicar os elementos que serão utilizados.7.all signica que todos os elementos da bibliotecas devem ser utilizados.2 ENTITY (Entidade) Tipo de Portas: IN = Porta de Entrada. Um exemplo pode ser visto na gura 2.1 PACKAGE (Pacotes) Os pacotes (biblioteca) contém uma coleção de elementos incluindo descrição dos tipos de dados (similares aos includes da Linguagem C). std_logic.1. 2.CAPÍTULO 2.1.5): <tipo> => bit. Figura 2. caso não seja acrescentado . . 1 2 INOUT= Porta de entrada e saída. Pacotes normalmente usados podem ser vistos na gura 2.3: Pacotes mais usuais Como utilizá-los: LIBRARY <nome_da_biblioteca> e/ou USE <nome_da_biblioteca>. OUT = Porta de Saída.2: Representação de uma descrição feita utilizando VHDL 2.3. 2. bit_vetor. LINKAGE = O valor da porta pode ser lido e atualizado. boolean. 1 Não 2 Não pode receber atribuição de valor dentro do programa. real. pode ser utilizada como entrada para o outro circuito.4: Tipos de Sinais (g. DESIGN DIGITAL 13 Figura 2.7. std_logic_vector. BUFFER = Porta de saída que pode ser atualizada por mais de uma fonte.

DESIGN DIGITAL 14 Figura 2. Figura 2. B ou C) tiver seu estado alterado. considere que a interface entre o chip e o meio externo seja idêntica. 2. Arquitetura Concorrente: A arquitetura concorrente é uma forma mais complexa de descrever um sistema.1.3 ARCHITECTURE (Arquitetura) Arquitetura pode ser denida como sendo a implementação do projeto. Nos programa 1 e 2. tais como: . temos uma arquitetura com três processos.5: Tipos de sinais 2. por exemplo.8. ou seja.7.CAPÍTULO 2.4: Entidade Figura 2.6: a) Placa Mãe b)Placa Mãe e FPGA com Arquitetura de Projeto Arquitetura Simples: A arquitetura simples contém apenas um processo. Na gura 2. Estes processos são executados em paralelo. onde está faltando o chip. na gura2. porem os processos só serão executados se algum sinal (A. O código na gura 2. Novamente tem-se um ganho de processamento. apenas um bloco(g.9.6-a.7). temos uma placa mãe de um PC. podendo ser independentes ou não.6-b. foi colocado um chip. Na gura 2. com toda a arquitetura do projeto. apresenta algumas características. geralmente apresenta vários processos dentro de uma arquitetura.

DESIGN DIGITAL 15 Figura 2.7: Arquitetura Simples Figura 2. Execução Paralela.1. que serão executados. mas isto não inuência no processamento.CAPÍTULO 2. 2. Uma arquitetura com dois processos. 3. 2.7. Os dois processos possuem variáveis com mesmo nome.4 CONFIGURATION (Conguração) Uma mesma entidade pode ter varias arquiteturas. Veja gura 2. .10.8: Arquiteturas Concorrentes 1.

CAPÍTULO 2.9: Exemplo de Execução Paralela Figura 2.10: Conguração . DESIGN DIGITAL 16 Figura 2.

11 são apresentados alguns identicadores válidos e inválidos.3E+2 5 . Representam valores reais 4 . ms. -349 Tipos pré-denidos: ps.Ex: 3. Exemplo 1:  a linha que você colocar como comentário. 6. com os identicadores. Ex: 4 Sempre com ponto decimal 5 Não é possível realizar conversão sobre . Ex: -3. Figura 2.  esta operação realiza a and de B com C e o resultado é colocado em A Comentários em VHDL são iniciados por dois hífens adjacentes (). podendo ser estentido até o nal da linha. um. min. DESIGN DIGITAL 17 2.8 Semântica da linguagem VHDL 2.1. -2. tempo. séc. 546. ns. Intervalos: Permite determinar um intervalo de utilização dentro de um determinado tipo.CAPÍTULO 2.  010001 inteiros. 3 bit_vector é um conjunto de bits. range <valor_menor> to <valor_maior> range <valor_maior> downto <valor_menor> Array: em VHDL um array é denido como uma coleção de elementos do mesmo tipo.56.1 Elementos Léxicos Comentários Exemplo 2: A<=B and C.2. Abaixo são listados alguns tipos de dados não lógicos: 3 Boolean: Integer: Assume valores true ou false. Representam valores interiros Physical: Representam uma medida física: voltagem.0. deve-se tomar certos cuidados. capacitância.1.11: Identicadores Tipos de dados não lógicos BIT: Real: Assume valores `0' e `1' . hr. 4.8. deverá conter dois hífens adjacentes no início Identicadores Quando se escreve um programa em VHDL. na gura2.

: 6 rem 4 = 2). Os operadores numéricos são: soma (+).CAPÍTULO 2. others => `t') Record: semelhante a  struct da Linguagem C. `e') (1 => 't'. 3 => `s'.14: . gura 2. type string is array (positive range < >) of character type b is array (1 to 5) of character. ou seja. `e'. multiplicação (*). veja a gura 2. remanescente (rem  ex. 5 => 'e'. DESIGN DIGITAL 18 type word is array (31 downto 0) of bit.12: Record Expressões e Operadores Operadores Numéricos: Operadores Lógicos: Os operadores lógicos são: and. xnor e not. or.13: Operadores de Deslocamento Operadores de concatenação: Esta operação consiste em criar um novo vetor a partir de dois vetores já existentes. valor absoluto (abs). 2 => `e'. 5 => `e'. divisão (/). Figura 2. Operadores de deslocamento. expoente (**). (`t'.13: Figura 2. `t'. type transform is array (1 to 4. xor. `s'. type memory is array (address) of word. 2 => `e'. subtração (-). nand. type vector is array (integer range < >) of real. nor. 1 to 4) of real. 4 => `t' ) (3 => `s'. é uma coleção de elementos de tipos diferentes. módulo (mod).

Na linha 21. Na linha 22. DATA será todo preenchido com 0's. OBS.14: Operadores de Concatenação 2. o bit menos signicativo do vetor D será igual a  0 enquanto que o outro  1 . o vetor W teria os seguintes valores após a operação: [1G00]. OBS. .2: ela poderá assumir os mesmos tipos descritos anteriormente. OBS. veja a gura 2.2 Comandos Seqüenciais Nesta seção serão apresentados alguns comandos seqüenciais que o VHDL dispõe.1. A função de uma variável dentro de um processo serve para intermediar valores. Na linha 20. Nas linhas 18 e 19.3: sempre que for passado algum parâmetro para uma variável. acompanhe cada bloco (horizontalmente).1: a variável (VARIBLE) só pode ser utilizada dentro do processo em que foi criada. onde G é o valor dele mesmo.15: Comandos Sequênciais Atribuição de Variáveis Note que a passagem de parâmetros é realizada utilizando-se :=. estes devem ser do mesmo tipo.8. Interpretação do programa: Na linha 15 o bit menos signicativo do vetor C receberá  um e o outro  zero .15: Figura 2. Atribuição de Sinais A passagem de parâmetros para sinais se dá com o uso de <=. DESIGN DIGITAL 19 Figura 2. Nas linhas 16 e 17 foram utilizados operadores booleanos.CAPÍTULO 2.17): Note que a atualização da variável é automática.4: note que a passagem de valores para uma variável é através de := e para pinos de saída a atribuição é feita com <= Exemplo (Figura 2. utilizou-se o operador & para realizar a concatenação (vide semântica de linguagem). Este exemplo apresenta as etapas de simulação de um programa em VHDL. OBS.

o processo é semelhante ao da linha 11. a atualização da variável é imediata. ou seja. acompanhe a Qual a diferença entre o SIGNAL e a VARIABLE ? O signal pode ser utilizado por qualquer processo pertencente aquela arquitetura. enquanto que a variável é atualizada sempre que usada. ou seja. após 20ns o valor de A é alterado para 1 e após Na linha 12 e linha 13. enquanto que a variável é interna ao processo e. .16: Atribuição de Variáveis Interpretação do programa: 40ns. enquanto que o signal só é atualizado no nal do processo. entretanto os dados agora são do tipo inteiro. ca bem claro a diferença entre uma variável e um sinal. retorna a ser 0.CAPÍTULO 2. como mostra o exemplo. são operações lógicas. Outro exemplo: Na gura2.19. mas não poderá receber uma atribuição de valores. todos os sinais só serão atualizados no nal do processo. Novamente. 3: O signal deve ser passado ao processo. OBS. isto não implica em dizer que em outro processo eu possa utilizá-lo atribuindo outro valor. DESIGN DIGITAL 20 Figura 2. OBS. Na linha 11. 1: Note que a atribuição a um sinal é feita através de <= OBS. simulação do programa passo-a-passo (horizontalmente). 2: Houve uma atribuição ao SIGNAL dentro do processo. ele poderá ser utilizado por outro processo. Na linha 14. inicialmente A vale 0.

DESIGN DIGITAL 21 Figura 2.18: Atribuição de Sinais .CAPÍTULO 2.17: Exemplo apresentando etapas de simulação Figura 2.

19: Exemplo de atribuição de sinais .CAPÍTULO 2. DESIGN DIGITAL 22 Figura 2.

Na forma wait on o processo é suspenso até que um evento da lista de sinais ocorra. suspendendo as atividades quando se completa o serviço. que ca posicionado após o nome e os dois pontos. B e Sel foram colocados na sensitivity list. todos os comandos anteriores ao wait serão executados. Da mesma forma este nome deve ser colocado após a declaração end of process. o process não pode conter nenhum wait.21: Utilização da Sensitivity List .1.9 Descrição de Comportamento (Process ) O comportamento. ou funcionalidade. Observe que se não houver mudança nos sinais.21que os sinais A. Como os comandos de um process são executados constantemente e ciclicamente. Existem algumas regras para se fazer uma descrição process. Inicialmente. que não faz diferença de onde se coloca um wait. nada ocorre até que as condições do wait sejam satisfeitas. Figura 2. DESIGN DIGITAL 23 2. como exemplicado na gura2. Para separar as operações seqüenciais de comandos tais como variable ou constant. Se uma instrução wait for colocada no inicio de um process. Ao contrario de linguagens de programação convencionais. executando tarefas. Ao invés de se utilizar o wait on no nal de um process.CAPÍTULO 2. que consiste simplesmente em colocar as condições do wait on ao lado do comando process (entre parênteses). a declaração begin é usada para marcar o inicio da listagem das operações seqüenciais. processos descritos em VHDL não terminam. pode parecer. é de vital importância o seu posicionamento adequado.20. e novamente retomando o serviço na ocorrência de certas condições de entrada. o processo continua suspenso. ou apresentar uma lista de condições a serem satisfeitas para se retomar a operação normal. de um sistema corresponde a uma lista de operações a serem executadas para se obter um determinado resultado. Circuitos eletrônicos em geral operam em modo continuo. Figura 2.20: Comando Wait Na forma wait for o processo é suspenso por um intervalo de tempo. Na verdade. A listagem a seguir ilustra o uso de process para se implementar um multiplixador 2x1. Neste caso. Após a execução do último comando. O comando wait pode aparecer em três formas distintas. pode-se usar o conceito de sensitivity list. deve-se especicar que a listagem corresponde a um process. e tem um formato estruturado. Em VHDL suspende-se um processo pelo comando wait. Observe na gura 2. aguardando ocorrência de certas condições de entrada. ou lista de sensitividade. portanto. Se este mesmo wait for colocado no nal de um process. Process é o modo formal de se fazer uma lista seqüencial dessas operações. Na forma wait until o processo é suspenso até que a condição seja válida. e isto é feito pelo comando process. process é executado novamente desde o primeiro comando. Este comando pode suspender o processo incondicionalmente.

o processo é suspenso. pode-se ver que o Sinal2 recebe o valor de Sinal1 acrescido de 5.23: Suspensão de processo Neste caso os valores nais são: A=3. E=2. Ao haver mudança em qualquer uma das variáveis.C=1. e o processo ca suspenso. como não há variação em nenhuma variável (Sinal2 continua com o valor de Sinal1 acrescido de 5). Considere o exemplo da gura2. na gura 2. 2. Quando D mudar para 2. Estas mudanças externas podem ser modeladas em VHDL pelos comandos condicionais. DESIGN DIGITAL 24 Deve-se ressaltar que neste caso. qualquer variação de saída é tido como variação de sinal e novamente o processo é executado.CAPÍTULO 2. A listagem a seguir ilustra como se declara e utiliza as variables.24. Figura 2. Quais seriam os valores quando o processo for suspenso? Veja a gura2. C=1. e pode receber várias atribuições no mesmo process. Esta limitação do process é eliminada com o uso de variables.22: Re-execução de processo Uma vez iniciado o processo. estão sujeitos a constantes mudanças externas e assim.1. e somente a última atribuição a uma variável é válida. D=2. E=6. Para um melhor entendimento. Considere os mesmos valores iniciais do exemplo anterior e veja o código mostrado na gura 2. os comandos do process são executados uma vez. O valor atribuído a uma variable é valido imediatamente após a sua atribuição. observe a tabela a seguir que ilustra suas semelhanças e diferenças. Como houve uma variação em Sinal2. Neste caso. Considere o valor inicial de todos os sinais como sendo  1 . o processo é iniciado. Qualquer valor atribuído a uma variável só passa a valer efetivamente quando o processo é suspenso. D=2. o processo é executado novamente.25 apresenta-se uma comparação entre signal e variable. Neste momento Sinal2 efetivamente recebe o novo valor. Como entradas e saídas são sinais. normalmente não executam todas as instruções.22. Figura 2.10 Controle da Seqüência Como os processes representam sistemas reais. Desta vez.23. os valores nais das variáveis são: A=3. que podem ser declaradas dentro do process. B=2. . Esse conceito pode ser entendido pela listagem apresentada a seguir.B=3. o process é executado mais uma vez.

Ao término destas operações deve ser colocado o end if.1. com linha de reset ativa por  1 . verdade.27 ilustra como exemplo o process de um ip-op tipo D ativo por rampa de subida.10. então a lista de operações é executada. As operações desta lista devem estar separadas por ponto-e-vírgula. Ao invés de se avaliar uma expressão booleana.2 Comando if then else O comando if then pode ser modicado para se obter maior exibilidade através do comando if then else. Para esta situação utiliza-se o comando case.3 Comando Case O uso do comando if then else com outros if  aninhados serve para selecionar uma ramicação. a primeira operação é executada. que apresenta três entradas de seleção (Modo).28.24: Continuação de Suspensão de Processo Figura 2.25: Signal versus Variable 2. Considere como exemplo a gura 2. caso contrario. este comando pode incluir novos testes através do elsif.1. mas pode car complicado se o número de opções se tornar maior que três. duas entradas de dados (In1 .CAPÍTULO 2. A listagem da gura 2. cada condição podem ser varias operações separadas por ponto-e-vírgula.10. Na 2. DESIGN DIGITAL 25 Figura 2. Se a condição for verdadeira. o comando case verica as condições de uma expressão discreta ou um array. e são chamadas de operações condicionais. a segunda operação é executada.1.26.1 Comando if then Algumas operações são executadas somente se certas condições forem satisfeitas. 2. Para uma maior exibilidade ainda. Considere como exemplo o process de um ip-op D ativo por rampa de subida mostrado na gura 2. Se a condição for verdadeira.10.

o contador é atualizado.1. Pode-se observar o uso do recurso when others. Esta situação pode ser obtida pelo comando next. para situações não previstas pelas demais opções.4 Comando For Loop O comando for loop se repete por um número especico de vezes. diferentes operações são executadas nos dados.26: Comando if-else Figura 2. Alguns exemplos ilustrativos são mostrados nas guras 2.10.30.27: Comando If-Then-Else e In2) e uma saída Out.CAPÍTULO 2.29 ilustra um exemplo de uso deste comando. 2. DESIGN DIGITAL 26 Figura 2.10. O contador não precisa ser declarado e é tratado como uma constante. 2. como exemplicado pela gura 2. dependendo dos valores presentes nas entradas de seleção.1. A listagem da gura 2. e só existe dentro do loop. Ao término de cada execução do loop. o loop é executado. .32. e desde que o valor do contador esteja em uma certa faixa. Este comando usa um contador.31e2.5 Comando Next Algumas vezes se torna necessário pular alguns comandos do loop e ir diretamente para a próxima interação.

DESIGN DIGITAL 27 Figura 2.29: Comando For-Loop .CAPÍTULO 2.28: Comando Case Figura 2.

31: Exemplo 1 .30: Comando Next Figura 2.CAPÍTULO 2. DESIGN DIGITAL 28 Figura 2.

DESIGN DIGITAL 29 Figura 2.32: Exemplo 2 .CAPÍTULO 2.

6 . Assume-se que o leitor já tenha instalado o software em seu computador e saiba abrí-lo. Isto faria com que a janela de introdução não aparecesse mais .33: Janela Introdução Esta caixa de diálogo nos mostra quantos são e quais serão os passos do Wizard de Projetos. A janela de Introdução (gura 2. Compilação. Esta seção serve como guia para princípios básicos necessários ao design digital.CAPÍTULO 2. 2.Clique no botão Next para continuar.34.altera.jsp>. ◦ ◦ ˆ ˆ ˆ ˆ Utilização de blocos lógicos existentes. no canto superior direito do site.com/literature/lit-qts. que seria o próximo passo de um projeto será abordado no próximo tópico. Simulação.2. Serão abordados os seguintes tópicos: ˆ Criação do projeto de um circuito lógico. Criação de blocos lógicos a partir de Código VHDL.2 Tutorial Quartus II O software Quartus II é uma ferramenta importante no design digital. Desde então ele vêm sendo atualizado e este tutorial aborda a vesão Quartus II 7. Para informações acerca do Quartus II que vão além deste tutorial recomenda-se fazer o download do material de literatura gratuito disponível em <http://www.2. DESIGN DIGITAL 30 2. A próxima janela é a New Project Wizard: Directory.altera.1 desta apostila). ele foi lançado em 2001 pela Altera (veja a seção 1. Name. O teste em hardware.com/> e procure pela seção Download Center.1 Criação do projeto de um circuito lógico Com o software Quartus II aberto. para criar um novo projeto basta acessar o menu FILE e escolher a opção NEW PROJECT WIZARD. Top Level Entity e pode ser vista na gura2. Têm-se a opção de marcar o checkbox ao lado da frase Don't show me this introduction again . Atribuição de Pinos.33) será mostrada: Figura 2. Etapas de Gravação. Para download do softwar e e maiores informações sobre como instalá-lo visite o site <http://www.

Para os casos ilustrados nesta apostila deve-se escolher a família FLEX10K no campo Family e o dispositivo EPF10K70RC2404 no campo Avaiable Devices (Como mostrado na gura 2. Pin Count e Speed Grade.34: New Project Wizard: Directory. Nela selecionamos qual dispositivo está vinculado ao projeto. onde o primeiro corresponde ao caminho (URL) onde o projeto será salvo. o segundo corresponde ao nome do projeto e o terceiro campo ao nome entidade de nível mais alto (sistema). Após o preenchimento dos três campos. vamos simplesmente clicar em Next. Figura 2. Name. Top Level Entity A tela nos mostra três campos. A tela seguinte (gura 2. click em next para continuar. 6 Atenção: Se você é um inciante não é recomendável que você marque esta opção até se familiarizar com o Wizard de Projetos .CAPÍTULO 2.36). DESIGN DIGITAL 31 Figura 2.35: New Project Wizard: Add File Estamos agora na tela New Project Wizard: Family & Device Settings. É possível ltrar a lista de dispositivos usando os campos Package.35) é para casos em que o usuário deseja adicionar arquivos ou bibliotecas ao projeto. Uma vez que não precisaremos disto neste projeto.

Bastando portanto. Uma janela como a da gura 2.36: New Project Wizard: Family & Device Settings Seguindo teremos que especicar uma lista de dispositivos que conguram a etapa de compilação. . Na aba de nome Device Design File uma lista de opções lhe será mostrada. Figura 2. a lista padrão será suciente. Para tanto acesse o menu FILE e escolha a opção NEW.38. a próxima etapa é a criação de um arquivo Diagrama de Blocos (. Este passo é mostrado na gura 2. clicar em Next sem alterar qualquer campo (gura 2. DESIGN DIGITAL 32 Figura 2.CAPÍTULO 2. Clique em OK. Escolha a opção Block Diagram/Schematic File. o qual servirá de base para a criação do circuito lógico.37).gdf ). No nosso caso.39 aparecerá. Após a criação do projeto.37: New Project Wizard: EDA Tools Settings Finalmente a próxima tela nos diz que o 'New Project Wizard' está acabado e o novo projeto com as congurações mostradas foi criado.

Nela.CAPÍTULO 2. em breve.40será aberta no ambiente do Quartus II. . Por hora apenas acesse o menu FILE e a opção SAVE. utilize preferencialmente o mesmo nome do projeto para o arquivo de Design.38: New Project Wizard: Summary Figura 2. construíremos um circuito utilizando diversos tipos de elementos. DESIGN DIGITAL 33 Figura 2.39: Janela New A tela da gura 2.

CAPÍTULO 2.Quartus II. .40: Tela Diagrama de Blocos . DESIGN DIGITAL 34 Figura 2.

Ficando o circuito como mostrado na gura 2.2.43.44.41. Figura 2. escolhendo então a porta lógica a ser inserida.41: Botão Symbol Tool Com a abertura da tela. temos que expandir o diretório primitives. Dentro deste expandiremos o diretório logic. Como exemplo posicionaremos apenas uma porta AND.42: Diretório Logic do Quartus II A porta lógica utilizada é uma porta AND com 2 entradas.1. .42. No diagrama de blocos. como mostrado na gura 2. Veja a gura 2. Em agora no diretório PIN em PRIMITIVES você pode selecionar input para adicionar ao seu projeto duas entradas lógicas e depois output para congurar uma saída. ao posicionar a quantidade de componentes desejados.1 Utilização de Blocos Lógicos Existentes Para utilizar Blocos Lógicos Existentes clique no botão Symbol Tool como mostrado na gura 2. basta apertar a tecla ESC do teclado para cancelar este modo. DESIGN DIGITAL 35 2.CAPÍTULO 2. Clicando mais uma vez no botão Symbol Tool. A opção Repeat Insert Mode (logo abaixo dos diretórios). Neste caso exemplo usaremos a porta AND2. quando marcada permite a inserção repetida de um mesmo componente. Figura 2.

basta clicar no nó de origem e depois no nó de destino.44: Pinos Input e OutPut Para fazer ligações utilize a ferramenta Orthogonal Node Tool (gura 2. . clique duas vezes sobre ele. No campo Instance Name e de seu novo nome.45).43: Porta AND no Diagrama de Blocos Figura 2. Após criar o circuito salve o seu projeto em FILE.Uma janela como a da gura 2. Com a ferramenta selecionada. DESIGN DIGITAL 36 Figura 2.CAPÍTULO 2. Para nomear um pino tanto de entrada quanto de saída. Geralmente utiliza-se letras do alfabeto maiúsculas em projetos simples.46. opção SAVE ou utilize as teclas de atalho <Ctrl+S>.

45: Orthogonal Node Tool Figura 2.CAPÍTULO 2. DESIGN DIGITAL 37 Figura 2.46: Pin Properties .

47: Novo arquivo VHDL Agora o código referente à uma porta lógica OR deve ser incluido na janela aberta (gura 2. Aguarde a conclusão e depois feche a aba COMPILATION REPORT que 7 Em grandes projetos é necessário a utilização de caixas pretas. Esse procedimento aumenta a inteligibilidade do sistema total e permite ao projetista analisar o circuito em pequenas partes.CAPÍTULO 2. pois aqui o usuário cará livre para criar o componente especíco necessário à sua aplicação.bdf ).2 Criação de blocos lógicos a partir de código VHDL Para criar blocos lógicos próprios utilizando códigos em VHDL. unidades menores as quais serão utilizadas em circuitos maiores. Geralmente escolhe-se o mesmo nome da entidade Agora vá ao menu FILE. Este comando pode ser utilizado em quase todos os tipos de arquivos. você deve realizar os passos que se seguem. Figura 2. Figura 2. incluindo diagramas de blocos (.50). ou seja. O primeiro passo é acessar o menu FILE e a opção NEW.2. Como na gura 2. .1. Nela escolha a opção VHDL File na aba Device Design File. DESIGN DIGITAL 38 2. Esta ferramenta é muito importante.49). aparecerá (gura 2. selecione CREATE/UPDATE e CREATE SYMBOL FILE FOR CURRENTE FILE (gura 2.48: Janela com código OR em VHDL Salve o arquivo.48). A janela NEW (já apresentada) se abrirá. 7 Um processo de compilação se iniciará.47.

feche-a também.51.49: Menu CREATE/UPDATE A aba do código fonte em VHDL não será mais necessária.52).54. Na aba do arquivo de diagrama de blocos clique mais uma vez no botão Symbol Tools.53) e posicione o bloco vhdl_or no arquivo de diagrama de blocos como indicado na gura 2.CAPÍTULO 2. para procurar o diretório onde o símbolo da porta OR feita em VHDL foi salvo. Clique em OK (gura 2. Escolha o diretório e o arquivo e clique em abrir (gura 2. O símbolo referente ao código que o usuário criou aparecerá imediatamente do lado direito da janela Symbol. . Clique no botão mostrado na gura 2. Uma janela de procura de diretórios se abrirá. DESIGN DIGITAL 39 Figura 2.

52: Abrir símbolo criado por código VHDL .51: Diretório Symbol Tools Figura 2. DESIGN DIGITAL 40 Figura 2.50: Aba Compilation Report Figura 2.CAPÍTULO 2.

DESIGN DIGITAL 41 Figura 2.53: Bloco vhdl_or Figura 2.CAPÍTULO 2.54: vhdl_or no diagrama de blocos .

Para tal vá ao menu PROCESSING e escolha a opção START COMPILATION (gura 2. 10ms.4)e se tudo estiver correto 8 você pode prosseguir. Antes de prosseguir criando o VECTOR WAVEFORM FILE precisamos realizar uma etapa de compilação parcial do diagrama de blocos. Agora acesse o menu FILE.56). opção NEW.CAPÍTULO 2. clique na aba OTHER FILES e selecione VECTOR WAVEFORM FILE (gura 2.2. Clique em OK e retorne à janela de simulação.57 aparecerá. Para isso vá ao menu EDIT e acesse a ooção END TIME (gura 2.55: Compilar Algumas janelas aparecerão (para entendê-las melhor vá à sessão 2.59 aparecerá. No Quartus II é preciso criar um arquivo do tipo VECTOR WAVEFORM FILE (.2. utilize as teclas de atalho Ctrl+L . DESIGN DIGITAL 42 2.2 Simulação Precisamos saber se o circuito está funcionando antes de gravá-lo na FPGA.55) ou. Figura 2. A janela da gura 2. Para isso precisamos simular o circuito criado. microsegundos. Há um campo para digitar o valor e uma caixa de seleção para escolher a unidade (segundos.vwf ) para realizar simulações.58). Antes de prosseguir salve este arquivo com o mesmo nome do projeto (o nome sugerido serve apenas para facilitar a identicação). milisegundo. Na janela que se abrir. Como exemplo conguraremos o tempo nal de simulação como e picosegundos). nanosegundos . A tela da gura 2. Agora precisamos congurar o tempo máximo de simulação para indicarmos ao Quartus II como ele deve proceder.

Clique em LIST e a janela da gura 2.. Na opção FILTERS selecione a opção PINS: ALL. pré-compilação anterior a este processo. No campo NAMED coloque um asterisco caso esteja preenchido de outra forma ou vazio. um menu de contexto aparecerá.CAPÍTULO 2. . Para a nossa simulação incluiremos todos os nós. Acesse a opção INSERT e no submenu a opção INSERT NODE OR BUS . Você pode utilizar o botão circulado em vermelho para incluir os nós um a um ou o botão circulado em verde para incluir todos os nós.61aparecerá. A janela do gura 2.56: Criando Vector Waveform FILE Clicando com o botão direito na campo NAME. 9 8 Erros 9 Se na comuns nesta etapa são: os mal conectados e ausência de entradas ou saídas. isso fará com que o NODE FINDER não se restrinja ao nome do nó.60).62 aparecerá. ocorrerão erros nesta etapa também. A janela da gura 2. (gura 2.63 aparecerá .. DESIGN DIGITAL 43 Figura 2. você não obteve sucesso por algum motivo. Clique no botão NODE FINDER.

DESIGN DIGITAL 44 Figura 2.57: Vector Waveform File .CAPÍTULO 2.

58: Menu EDIT. opção END TIME Figura 2.59: Janela END TIME . DESIGN DIGITAL 45 Figura 2.CAPÍTULO 2.

61: Janela Insert Node or Bus . DESIGN DIGITAL 46 Figura 2.60: Insert Node or Bus ... Figura 2.CAPÍTULO 2.

62: NODE FINDER Figura 2. DESIGN DIGITAL 47 Figura 2.CAPÍTULO 2.63: Seleção na Janela NODE FINDER .

. Por enquanto não exploraremos o recurso OFFSET..66se abrirá. .65). Você aprenderá a congurar as suas agora. Se o radial button TIME PERIOD não estiver selecionado. Basta clicar no botão OVERWRITE CLOCK do menu de simulação (marcado em vermelho na gura 2. OFFSET e DUTY CYCLE. DESIGN DIGITAL 48 Após realizadas estas operações clique em OK nas janelas NODE FINDER e INSERT NODE OR BUS. Em PERIOD você determina o ciclo de repetição do DUTY CYCLE. O campo START TIME indicará quando o ciclo começa a ser executado (no nosso caso no tempo 0 em qualquer unidade). Isto te dára acesso aos campos PERIOD. O campo END TIME indica quando o ciclo se encerrará (no nosso caso tempo 10 ms pois desejamos que o ciclo se repita ao longo de todo o tempo de simulação 10 ).64: Grid de Simulação com entradas denidas Figura 2.64 está com as variáveis de entrada já conguradas. Você retornará à tela do VECTOR WAVEFORM FILE. Figura 2. Com as teclas de atalho Ctrl+Shift+Space ou Ctrl+Space podemos aproximar e afastar o grid de simulação para melhor ver os sinais de entrada (e futuramente saída). Nela especicaremos os padrões de sinais de entrada que se alteram ciclicamente. ele desloca o ínicio do ciclo que seria igual ao 10 O tempo total de simulação foi estabelecido no menu EDIT opção END TIME. selecione-o.65: Menu e OVERWRITE CLOCK A janela da gura2. O grid da gura 2.CAPÍTULO 2.

2.5 ms para as portas A.64 temos ciclos de 10 ms. Como dica para a criação de uma tabela verdade sugere-se que a cada nova entrada. 2. Figura 2. B e C respectivamente.CAPÍTULO 2. seja usado como período um valor correspondente à metade do anterior. Ele pode ser aberto escolhendo-se a opção PIN PLANNER no menu ASSIGNMETS. 5 ms e 2. E hora de partir para a implementação em hardware. Figura 2. porém não é possível alterar os formatos de entrada e/ou saída.3 Atribuição de Pinos Para atribuir pinos a cada entrada e/ou saída do seu diagrama de blocos você precisa acessar um módulo chamado PIN PLANNER. podem ser fechadas e agora temos certeza que a parte de código do projeto funcionára.67 ou usando as teclas de atalho Ctrl+I. (Figura 2. Por m DUTY CYCLE corresponde à porcentagem do período no qual a onda cará em nível lógico alto.68) Figura 2. A janela da gura 2. C e S presentes no seu circuito. Por m realizaremos a simualção clicando no botão indicado na gura 2. que é muito similar à de simulação.68: Resultados de Simulação Podemos constatar que o circuito funciona conforme o esperado.67: Botão de Início de simulação Você obeterá uma janela de resultados. Note que no canto inferior esquerdo você encontra os pinos A.69 aparecerá. Após tal constatação as janelas de resultado e do VECTOR WAVEFORM FILE. . DESIGN DIGITAL 49 START TIME para o valor indicado no campo. B.66: Janela CLOCK Realizaremos agora mais uma etapa de compilação parcial (Ctrl + L). Na gura 2.

DESIGN DIGITAL 50 Figura 2. É possível acompanhar o progresso da compilação e os erros nas janelas mostradas na gura 2. Por hora não as alteraremos.72. A compilação que gerará o arquivo que pode ser carregado na FPGA só pode ocorrer depois da atribuição de pinos.69: PIN PLANNER As designações de entrada e saída podem ser encontradas na segunda coluna da tabela. Para isso clique no botão indicado na gura 2.4 Compilação Compilar é traduzir de informações visuais ou linguagem de programação para linguagem de máquina 12 . 2. 40 e 41 para as entradas (A. Figura 2. Uma janela como a da gura 2.2. B e C respectivamente). Após todos os passos executados e concluídos com sucesso as janelas de resultados de compilação e PIN ASSIGNMENT podem ser fechadas. Quaisquer outras compilações parciais realizadas geram binários. 2.70 se desdobrará e nela você pode escolher qual pino será atribuido a cada um dos elementos do seu circuito 11 .2.CAPÍTULO 2.71.70: Location Para esta aplicação utilizaremos o pino 6 para a saída e os pinos 39. Os comandos são os mesmos Ctrl+L ou menu PROCESSING opção START COMPILATION. Clique no campo Location da tabela. mas não estão apatas a irem para a FPGA.5 Etapas de Gravação Para carregar o programa na FPGA você precisará acessar o PROGRAMMER. .

Estando todas as opções corretas e o hardware conectado. Basta clicar nele. o botão START se habilitará (gura 2.73: Janela PROGRAMMER 2.CAPÍTULO 2. O checkbox mostrado na gura deve estar marcado. . Para o Kit UP2 verique se a opção JTAG está selecionada na janela MODE. plugue o cabo ByteBlaster na porta paralela de um PC. DESIGN DIGITAL 51 Figura 2. LEDs etc.1 Carregando Seu design do Computador para UP2 Para testar seu design em Kit UP2.73 se abrirá. Usando um 9V AC a DC parede transformador ou outra 7 a 9V DC fonte.3. Quando corretamente um do LEDs verde na board deveria iluminar. Para a placa UP2 verique o capítulo gerados os famosos arquivos binários ?? desta apostila. VGA. Figura 2.73). Se você já não fez. ps2 etc.72: Botão PROGRAMMER A janela da gura 2.71: PROGRESS Figura 2.3 Testando Seu Design em um Kit FPGA 2.) e quais são próprios para saída (displays de 7 segmentos. Quaisquer alterações de hardware devem ser indicadas no botão HARDWARE SETUP. conecte (DC_IN) situado no canto à esquerda superior da board de UP2. tem certeza que o settting de BIOS do PC para o porto de impressora é ECP ou modo de EPP. 11 Verique 12 São o datasheet da sua placa para saber quais pinos são próprios para entrada (pushbuttons.).

feche a janela Programmer e reabre isto. o cabo ByteBlasterII em LPT1. um mensagem verde de operação de programador próspera exibe na janela de sistema. . selecione o próprio hardware. Se isto não corrigir o problema. 2. os pinos de jumper são todo o jogo à posição de topo como indicado em tabela 1. Clique no botão Start para carregar à UP2 board.CAPÍTULO 2. e o ponto decimal do LED em Figura 1. Clique em Hardware Setup.) Os locais do pushbuttons. e LEDs. Selecione Tools/Programmer.) O USB ByteBlaster novo também pode ser usado. PB2. Tenha certeza você também nomeou Logo. (Nota que porque o MAX Figura 2. recompile. O botão Start na janela de programação deveria ser realçado agora. PB2. " No Hardware" à direita do botão de Hardware Setup. nomeie o dispositivo correto primeiro e então o pino certo.1). então há qualquer outra coisa errado com a organização ou conexão de cabo. 2. DESIGN DIGITAL 52 Figura 2. então devolva seu esquemático. (Se uma janela surge isso exibe. Se carregar com êxito. EPM7128 do chip. o pino para uma board de UP2 (veja tabela 1. Conrme as colocações e clique OK.3. também são realçados PB1 e PB2.2. Se uma JTAG erro mensagem vermelha se aparece ou o botão de começo não está trabalhando.3 Passos nais para Carregar Tenha certeza que o Device Name mudou para EPF10K70RC240 para o UP2. (Se o botão Start não é realçado. use o botão Hardware Setup para mudar o hardware atualmente selecionado de " No Hardware " para " ByteBlaster II ".3. Verique que os jumpers de dispositivo são xos para a fatia de CABO como mostrado na tabela 1.2 Preparando para Carregar Depois de conferir para ter certeza que os cabos e jumpers estão corretamente pronto para carregar o circuito compilado à UP2 board. São exigidos alguns segundos carregar. conra a caixa de Se não exibir o dispositivo correto. e tente novamente. Volte para o começo desta seção e conra cada passo e conexão cuidadosamente.74: ALTERA UP2 board com colocações de jumpers e PB1.75: ALTERA UP2 board com colocações de jumpers e PB1.18.2. Program/Congure. e LEDs. clique Hardware Setup da janela programmer.

Vcc é 5V no UP2. Todos estes LEDs são pre-telegrafados ao chip da FPGA com um pull-up resistor como ilustrado mais cedo em Figura 1. Como a produção do portão de BNOR2 está dirigindo o decimal do LED sinal no dígito esquerdo das duas exibições de sete-segmento. porém. DESIGN DIGITAL 53 2. um do display sete segmento são usados para Figura 2.4 Testando Seu design Os locais de PB1. Os estudantes esquecem deste ponto regularmente e têm um projeto completamente trabalhando com um padrão invertido no LEDs. e vericou sua operação. Esta conguração permite o resistor externo para controlar a quantia de corrente pelos LEDs.. monitorar a produção CONDUZIDA. e o portão de BNOR2 também tem baixas contribuições ativas e produção.e.3. e o LED é indicado em Figura 1. Depois de carregar seu programa UP2 board. No UP2. deveria ser out (i. simulou. enquanto batendo qualquer botão os LEDs deveriam conduzir. Desde que os botões são ativos em sinal baixo. localize as duas exibições de sete-segmento de rightmost.19. PB2.CAPÍTULO 2. Parabéns! Você há pouco entrou. Estado CONDUZIDO é invertido em UP2 board).19 UP2 FPGA xam conexão para sete-segmentar ponto decimal de exibição. . e carregou um design a um dispositivo de FPGA.6.76: CABO de 1. compilou.

tabelas-verdade e diagramas de tempo. acenda a luz de advertência. Descrever o circuito usando álgebra booleana. a m de acionar um indicador de alerta de cinto de segurança em um carro.Capítulo 3 Aplicações e Prática 3. diagramas de símbolos lógicos. Solução: Expressão Booleana: luz _de_advertˆncia = motorista_presente • cinto_em_uso • ignicao_ligada e Ver Tutorial Quartus II (seção 2. ENTÃO.2). Se o motorista estiver presente E NÃO estiver usando cinto. NÃO.1 Prática 1 Esta experiência tem por objetivo a familiarização com portas lógicas E. 54 . E a ignição estiver acionada.

1: Código em VHDL 1 motorista_presente 0 0 0 0 1 1 1 1 cinto_em_uso 0 0 1 1 0 0 1 1 ignicao_ligada 0 1 0 1 0 1 0 1 luz_de_advertencia 0 0 0 0 0 1 0 0 Tabela 3.CAPÍTULO 3.1: Tabela Verdade . APLICAÇÕES E PRÁTICA 55 Figura 3.

CAPÍTULO 3.3: Diagrama de Tempo 1 Nas Figuras 3. mas é . Como um exemplo. Há muitas outras formas de representar a lógica dessa decisão.1 . poderíamos imaginar um conjunto inteiramente novo de símbolos grácos. ou utilizar o francês ou o japonês para declarar a relação lógica.2. É óbvio que não há como cobrirmos todas as formas possíveis de descrever um circuito lógico.3. 3.1 mostra quatro formas diferentes de representar o circuito lógico que foi descrito em linguagem normal nas guras citadas.2: Diagrama Esquemático 1 Figura 3. APLICAÇÕES E PRÁTICA 56 Figura 3.3 e a tabela3.

CAPÍTULO 3.

APLICAÇÕES E PRÁTICA

57

preciso entender os métodos mais comuns para podermos nos comunicar com os outros em nossa prossão. Além disso, certas situações são mais fáceis de descrever por meio de um método do que por outro. Em alguns casos, uma gura vale mil palavras, e em outros, as palavras são concisas o bastante e mais facilmente comunicáveis aos outros. O importante é que precisamos saber descrever e comunicar a operação de sistemas digitais.

3.2

Prática 2

Esta experiência tem por objetivo a familiarização com os códigos IF, ELSIF e ELSE, a m de controlar a temperatura. Denir as entradas como um integer de 4 bits. As saídas são 3 bits individuais que acionam três indicadores de intervalo. Essa prática usa um sinal intermediário que nos permite atribuir um padrão de bit que representa todas as três condições frio_demais, ideal e quente_demais. O código usa IF, ELSIF e ELSE para identicar o intervalo em que a temperatura está e atribuir o padrão de bit correto a status. Nas três últimas declarações, todos os bits de status são conectados ao bit da porta de saída correto.

Solução:
Ver Tutorial Quartus II (seção 2.2).

Para denir o nome do pino de entrada do barramento não podemos esquecer de adicionar [3..0]3.6 após o nome, pois a entrada é de 4 bits.

3.3

Prática 3

Um detector de moedas em uma máquina automática aceita quarters, dimes e nickels e ativa o sinal correspondente (Q, D, N) apenas quando a moeda correta está presente. É sicamente impossível múltiplas moedas estarem presentes ao mesmo tempo. Um circuito digital precisa usar os sinais Q, D e N como entradas e produzir um número binário

representando o valor da moeda. Escreva o código VHDL, fazer o diagrama esquemático e o diagrama de tempo.

Solução:
Esta é uma aplicação ideal da construção CASE para descrever a operação correta. As saídas devem ser declaradas como número de 5 bits em ordem para representar os valores até 25 centavos. A gura3.9 mostra a solução em VHDL. Ver Tutorial Quartus II (seção 2.2).

CAPÍTULO 3.

APLICAÇÕES E PRÁTICA

58

Figura 3.4: Código em VHDL 2

CAPÍTULO 3.

APLICAÇÕES E PRÁTICA

59

Figura 3.5: Diagrama Esquemático 2

Figura 3.6: Dene Pino do Barramento

7: Count Value da Simulação Figura 3.8: Diagrama de Tempo 2 .CAPÍTULO 3. APLICAÇÕES E PRÁTICA 60 Figura 3.

9: Código Fonte em VHDL 3 Figura 3.CAPÍTULO 3. APLICAÇÕES E PRÁTICA 61 Figura 3.10: Diagrama Esquemático 3 .

Escreva o código VHDL. ele possui cinco entradas e uma saída. Em sua forma mais comum.15. . fazer o diagrama esquemático e o diagrama de tempo.CAPÍTULO 3. Solução: Ver Tutorial Quartus II (seção 2. A parte mais importante e desaadora da vericação com um simulador é criar um conjunto de condições de entrada hipotéticas que prove que o circuito faz tudo aquilo para que foi projetado. O funcionamento adequado do circuito pode ser vericado por meio de um simulador.2). APLICAÇÕES E PRÁTICA 62 Figura 3.14.4 Prática 4 O ip-op J-K é um bloco de construção padrão de circuitos lógicos (sequenciais) com clock conhecido como um bloco primitivo lógico. O VHDL permite ao projetista descrever o funcionamento do circuito lógico com clock explicitamente no código. e cabe ao projetista escolher a melhor. Vamos denir cada linha de tempo das entradas do bloco criado utilizando as ferramentas selecionadas de vermelho na gura3.11: Diagrama de Tempo 3 3. Simulou-se o diagrama de tempo. Há muitas formas des se fazer isso. Os nomes de entradas/saídas podem ser padronizados para permitir que nos reramos às conexões desse circuito primitivo ou fundamental. O resultado será como mostra a gura3.

12: Código Fonte em VHDL 4 Figura 3.CAPÍTULO 3.13: Diagrama Esquemático 4 . APLICAÇÕES E PRÁTICA 63 Figura 3.

CAPÍTULO 3. APLICAÇÕES E PRÁTICA 64 Figura 3.15: Diagrama de Tempo 4 .14: Denir cada linha de Tempo Figura 3.

A borda do clock é detectada na linha 14. garantimos que o código dentro do PROCESS será avaliado assim que qualquer dessas entradas mude de estado. Para fazer a função carga operar sincronamente. Solução: Ver Tutorial Quartus II (seção 2. e o circuito verica de imediato se load está ativa. APLICAÇÕES E PRÁTICA 65 3. O próximo passo é detectar a contagem terminal. A saída será zero. respectivamente).2).5 Prática 5 O código na gura3. Leia as entradas e saídas nas linhas 3-6 para ter certeza de que entendeu o que cada uma deve fazer. A declaração PROCESS na linha 10 é a chave para todos os circuitos com clock descritos em VHDL. clear ou down. A entrada clear recebe precedência ao ser avaliada com o primeiro comando IF na linha 13. independentemente de o processo de tomada de decisão ter sido invocado por clock. e a linha 27 conecta efetivamente o registrador aos pinos de saída. Se estiver ativa. mas pode ser facilmente expandido. count deve ter o valor correto no registrador. ela deve ser avaliada após a detecção da borda do clock. Depois que todas essas decisões são tomadas. A variável count é denida na linha 11 como INTEGER de modo que pode ser incrementado e decrementado com facilidade. fazer o diagrama esquemático e o diagrama de tempo. mas é avaliada para cada sinal na lista de sensibilidade após a limpeza ou contagem ter ocorrido. Variáveis são declaradas dentro do PROCESS e podem ser usadas apenas dentro de PROCESS. independentemente de o contador estar habilitado ou não. count será incrementada ou decrementada (linhas 17 e 18. count é carregada a partir de din. Queremos que esse circuito responda imediatamente a transições nas entradas clock.CAPÍTULO 3. Com esses sinais na lista de sensibilidade. Em consequencia. As linhas 22-25 decidem se a contagem terminal máxima ou mínima foi atingida e colocam a saída no nível apropriado. Trata-se de um contador de quatro bits. as outras condições não importarão.16implementa todos os recursos a que nos referimos. Escreva o código VHDL. Se estiver. clear e down. . A estrutura de tomada de decisão é muito importante aqui porque queremos avaliar essa situação. mas também desempenha um importante papel em determinar se o circuito responde de modo síncrono ou assíncrono a suas entradas. Observe que essa decisãop não é outro ramo ELSE das decisões IF anteriores. Se clear está ativa. a decisão condicional (IF) na linha 15 avalia a entrada de carga. Só se esta estiver inativa a linha 16 será avaliada e vericará se o contador está habilitado.

16: Código Fonte em VHDL 5 . APLICAÇÕES E PRÁTICA 66 Figura 3.CAPÍTULO 3.

17: Diagrama Esquemático 5 . APLICAÇÕES E PRÁTICA 67 Figura 3.CAPÍTULO 3.

18: Diagrama de Tempo 5 . APLICAÇÕES E PRÁTICA 68 Figura 3.CAPÍTULO 3.