Skip to content. Skip to navigation

Eletronica.org

Sections
Personal tools
You are here: Home Artigos Eletrônica Digital e Sistemas Embarcados Dispositivos Programáveis: Como Funcionam?

AVISO: NOVO SITE JÁ ESTÁ NO AR em www.eletronica.org. Novos usuários não devem ser criados aqui.
Esta versão do site continuará disponível para acesso por tempo indeterminado.

Document Actions

Dispositivos Programáveis: Como Funcionam?

Dispositivos como FPGAs e CPLDs passaram a fazer parte do dia a dia de engenheiros e projetistas de hardware nos últimos anos. Este artigo tem como objetivo explanar um pouco sobre estes dispositivos e como eles podem afetar o desenvolvimento de sistemas embarcados.

Introdução

O desenvolvimento dos circuitos digitais programáveis vem crescendo assustadoramente nos últimos anos. Hoje já é possível encontrar soluções de FPGA com alta densidade e custos relativamente baixos para os padrões industriais [3], E estes custos tendem a continuar diminuindo a medida que a densidade aumenta. E os designers já estão vendo isso; alguns estão desenvolvendo ou comprando (ou apenas utilizando) cores (núcleos) de processadores e incorporando-os a outros periféricos, criando sistemas em uma única pastilha (system-on-a-chip). Outros estão eliminando o processador e o software juntos, criando alternativas baseadas apenas em hardware.

Tipo de de dispositivos lógico programáveis.

PLD

Programmable Logic Device (também referenciados por Programmable Logic Array (PLA), Programmable Array Logic (PAL), e Generic Array Logic (GAL)) são dispositivos que possuem em seu interior diversas portas lógicas, flip-flops e registradores, que oferecem uma forma flexível de arranjo destes componentes a nível de hardware. Em outras palavras, você poderia substituir diversos componentes como portas AND, OR e NOT por um único chip, usufruindo de todas as vantagens disso, como um menor consumo, uma menor área utilizada na placa e a eliminação de interconexões entre componentes. Além disso, o fato de ser reconfigurável permite alterar o circuito lógico sem mudanças na placa.

Dentro de uma cada PLD existe um conjunto de macrocélulas conectadas entre si. Estas macrocélulas tipicamente compreendem alguma quantidade de portas lógicas (AND e OR, por exemplo) e flip-flop. Em outras palavras, uma pequena equação lógica Booleana pode ser feita em cada macrocélula. Esta equação combina o estado de algumas entradas, produzindo uma saída que, se necessário, fica disponível em portas lógicas e flip-flops até a próxima borda de clock. A idéia em geral é essa, apesar das particularidades envolvendo fabricantes e família de produtos.

CPLD

Com a densidade dos chips aumentando a cada dia os fabricantes passaram também a produzir componentes com características semelhantes às PLDs mas cada vez maiores (não fisicamente, mas logicamente). A estes componentes foi dado o nome de CPLD (Complex Programmable Logic Devices). Basicamente uma CPLD é um conjunto de múltiplas PLDs e um barramento configurável de interconexão em um único chip. A densidade destes componentes permite o desenvolvimento de circuitos muito mais complexos. De fato, uma única CPLD pode facilmente substituir centenas de componentes da série 74xx (portas lógicas).


Figura 1: Estrutura Interna de uma CPLD

A figura 1 contêm um diagrama de blocos de uma CPLD hipotética. Cada um dos quatro blocos lógicos mostra o equivalente à uma PLD. No entanto, os atuais CPLDs podem possuir mais (ou menos) blocos lógicos. Note que estes blocos possuem eles mesmos as suas macrocélulas e conexões, exatamente como uma PLD.

Diferente das interconexões configuráveis de uma PLD, a matriz de conexões de uma CPLD pode não ser totalmente conectável. Em outras palavras, algumas das teoricamente possíveis conexões entre a saída de blocos lógicos e a entrada de outros, podem não ser suportados na CPLD. O efeito prático disto é que o uso de 100% das macrocélulas é difícil de ser atingido.

Devido ao fato das CPLDs serem mais robustas que as PLDs, o seu potencial de uso é muito mais variável. É possível utilizá-las para simples aplicações como decodificação de endereços, mas também é possível fazer uso das mesmas em lógicas de controle de alta performance ou complexas máquinas de estado finito. Nas aplicações que exigem lógica de alta performance, tradicionalmente as CPLDs são escolhidas ao invés dos FPGAs pois, por serem menos flexíveis internamente, possuem um atraso (delay) interno usualmente menor (medido em nanosegundos).

FPGA

Field Programmable Gate Arrays (FPGAs) podem ser utilizados para a implementação de praticamente qualquer design de hardware. Um dos usos mais comuns é o seu uso para a prototipação de componentes que virão no futuro a transformar-se em ASIC (componentes prontos, em pastilhas de silício). No entanto, não existem problemas em distribuirmos FPGAs em produtos finais. Esta decisão requer basicamente uma análise de custo, uma vez que o desenvolvimento de um ASIC é um processo bastante caro e inflexível, mas que gera componentes de custos bastante reduzidos se produzidos em larga escala. Já os FPGAs possuem flexibilidade e custo baixo de prototipação, mas preços finais pouco competitivos se comparados à ASIC com alta escala de produção.

O desenvolvimento de um FPGA é fruto de uma evolução do conceito das PLD/CPLD, mas a sua arquitetura é um tanto distinta destes. Como você pode ver na Figura 2, a arquitetura de um FPGA é composta de 3 estruturas básicas: blocos lógicos, interconexão e blocos de I/O (Input/Output, Entrada/Saída). Os blocos de I/O formam uma borda ao redor do dispositivo; cada um destes provê entrada, saída ou acesso bi-direcional aos pinos de I/O de uso geral disponíveis na parte exterior do componente. Dentro desta borda de blocos de I/O você pode ver uma região retangular de blocos lógicos e conectando-os você tem as Interconexões Programáveis.


Figura 2: Estrutura Interna de um FPGA

Os blocos lógicos em um FPGA podem ser tão simples e pequenos quanto as macrocélulas do PLD (arquitetura conhecida como fine-grained) ou maiores e mais complexas (coarse-grained). No entanto, um FPGA jamais comporta-se-á, no todo, como um conjunto de PLDs, como acontece em um CPLD. Lembre-se que um bloco lógico de CPLD contêm múltiplas macrocélulas. Mas os blocos lógicos de um FPGA geralmente não contêm mais que algumas portas lógicas (gates) e um flip-flop.

Por causa de todos os flip-flops extras a arquitetura do FPGA é muito mais flexível que a de um CPLD. Isso faz deles melhor para aplicações baseadas em registradores e aplicações sequenciais (pipelined). Usualmente FPGAs são mais densos e possuem um custo menor que os CPLDs, então ele é de fato a melhor escolha para grandes projetos lógicos.

Projeto e Desenvolvimento de Hardware

O processo de criação lógico digital não é muito diferente do desenvolvimento de sistemas embarcados a que muitos estão acostumados. Uma estrutura de descrição de hardware é escrita em uma linguagem de alto nível (usualmente VHDL e Verilog), o código é compilado e copiado para ser executado. Descrever circuito como um esquemático digital é também possível, mas isso é bem menos popular e mais complexo que utilizar ferramentas baseadas em linguagens. Uma visão geral do processo de desenvolvimento de hardware para dispositivos lógico programáveis é mostrado na Figura 3.

Note que a principal diferença entre o design de hardware e software é a maneira que o desenvolvedor precisa pensar para resolver um problema. Desenvolvedores de software tendem a pensar sequencialmente, mesmo quando estão desenvolvendo aplicações multitarefas (multithreaded). As linhas de código sempre são escritas para serem executadas em uma ordem, pelo menos dentro de uma tarefa (thread) em particular. Mesmo havendo um sistema operacional usado para criar a aparência de paralelismo, ainda há um núcleo de execução para o controle disso. Durante o projeto de hardware os designers precisam pensar, e programar, em paralelo. Todos os sinais são processados em paralelo, pois trafegam através de um caminho de execução próprio - cada uma da série de macrocélulas e interconexões - até o destino do sinal de saída. Dessa forma, a descrição do hardware cria estruturas que podem ser "executadas" todas ao mesmo tempo. Note, no entanto, que a transferência entre as macrocélulas são usualmente sincronizadas através de um sinal, como o de clock.


Figura 3: Projeto de Design Lógico Programável

Tipicamente, a etapa de início do projeto é seguida ou compartilhada com períodos de simulação funcional. Este é o momento onde um simulador é utilizado para a execução do projeto para confirmar se as saídas corretas estão sendo produzidas para um conjunto de entradas de teste. Embora problemas como tamanho ou sincronismo possam ainda alterar isto mais tarde, o projetista pode, pelo menos, certificar-se que a sua lógica de funcionamento está correta antes de ir ao estágio seguinte de desenvolvimento.

A compilação somente inicia depois que uma representação funcional correta do hardware existe. Esta compilação consiste em duas etapas. Primeiro uma representação intermediária do projeto do hardware é produzida. Este passo é chamado de síntese (synthesis) e o resultado é uma representação chamada de netlist. O netlist é um dispositivo indepentente, então o seu conteúdo não depende de um FPGA ou CPLD em particular; ele é armazenado geralmente em um formato padrão, conhecido como EDIF (Electronic Design Interchange Format, Formato Intermediário para Intercâmbio de Projeto).

A segunda etapa neste processo de tradução é chamada de "place & route (posicionar e rotear). Este passo envolve traçar as estruturas lógicas descritas na netlist em macrocélulas, interconexões e pinos reais de entrada e saída. Este processo é similar à etapa equivalente no processo de desenvolvimento de um aplaca de circuito impresso, permitindo otimizações manuais ou automáticas das disposições. O resultado deste processo é um bitstream. Este nome é usado genericamente, apesar do fato que cada CPLD ou FPGA (ou família) ter seus próprios, geralmente proprietários, formatos de bitstream. Para nós basta dizer que o bitstream são os dados binários que deverão ser carregados no FPGA ou CPLD para fazer com que o chip execute um projeto em particular.

Cada vez mais existem também depuradores (debuggers) disponíveis que permitem a execução passo a passo da execução em dispositivos lógico programáveis. Obviamente este tipo de intergração específica para componentes requer um conhecimento amplo sobre o funcionamento dos chips, normalmente fornecidos em parceria da empresa desenvolvedora da ferramenta com a produtora do componente.

Programação dos Dispositivos

Uma vez que você criou um bitstream para um FPGA ou um CPLD em particular você necessitará baixa-lo, de algum modo, no dispositivo. Os detalhes deste processo são dependentes do processo de tecnologia de cada chip. Os dispositivos de lógica programáveis são como memórias. De fato, exatamente as mesmas siglas são utilizadas: PROM (para os programáveis apenas uma vez), EPROM, EEPROM, e flash. As tecnologias EEPROM e flash possuem as mesmas vantagens relacionadas à facilidade de programação e re-programação, normalmente incluindo suporte à gravação "in-circuit. Neste ponto estes dispositivos assemelham-se bastante aos microcontroladores que conhecemos, alguns suportanto inclusive as interfaces JTAG.

Em adição às tecnologias de memória permanente, existem também dispositivos baseados na tecnologia SRAM. Nestes casos, os índices de memória são temporários. Isso possui vantagens e desvantagens. A desvantagem óbvia é que todo o bitstream precisa ser recarregados após cada restauração do sistema ou do chip. Isso significa um chip de memória adicional para armazená-lo. Mas isso também significa que o conteúdo deste pode ser manipulado on-the-fly; de fato, nós podemos facilmente imaginar um cenário onde o bitstream é carregado de uma origem remota através de uma rede, de modo que o projeto do hardware pode ser atualizado de forma tão simples quanto acontece com software.

Aplicações

Agora que você compreende um pouco sobre a tecnologia provavelmente está querendo saber o que todos estes FPGAs e CPLDs estão fazendo dentro dos sistemas embarcados. Entretando, os seus usos são tão variados que torna-se impossível generalizar. A seguir nós falaremos de algumas tendências emergentes, na esperança de responder as suas perguntas, mesmo que indiretamente.

Prototipagem

Muitas vezes um CPLD ou um FPGA será usado em um sistema protótipo. Um disposivo pequeno atualmente permite que os designers alterem a lógica facilmente durante o desenvolvimento, facilitando etapas como a construção de placas e teste dos produtos. Um dispositivo maior pode ser incluído para permitir a prototipagem de um projeto system-on-chip, que eventualmente pode transformar-se em um ASIC. Seguindo a mesma idéia básica é possível integrar em um único componente grandes quantidades de componentes menores, condição em que o dispositivo programável estará substituindo um bloco mais caro, embora funcionalmente equivalente.

Núcleos Embutidos (Embedded Cores)

Cada vez mais vendedores estão vendendo, ou dando, os seus processadores e periféricos de forma que este esteja pronto para ser integrado em um projeto baseado em lógica programável. Eles reconhecem o potencial que existe para o crescimento na área de sistemas em um chip (system-on-chip) e querem uma parte dos royalties ou promover o uso de seu FPGA ou CPLD em particular, fornecendo blocos de bibliotecas prontos para usar. De uma forma ou de outra você ganhará com os custos mais baixos ou tempo de desenvolvimento mais rápido. Porque desenvolver o seu próprio hardware quando você pode uma comprar um pedaço equivalente em 'silício virtual'? O mercado de Intellectual Property (IP) está crescendo rapidamente. É comum encontrar na internet microprocessadores e microcontroladores a venda, assim como complexos periféricos como controladores PCI. E vários destes blocos são realmente configuráveis. Você deseja um barramento PCI 16 ou 32bit? Você precisa de operações de ponto flutuante no processador? E, naturalmente, você também encontrará todo o suporte a dispositivos mais usuais, como controladores seriais e unidades de temporização e contagem.

Chips Híbridos

Os chips híbridos são componentes que contém em seu interior um núcleo dedidado de processamento (como os processadores usuais) e também uma área de lógica programável. Os fabricantes destes chips estão apostando que um processador encaixado no interior de um dispositivo lógico programável vai necessitar de muito menos portas de saída para aplicações típicas. A "parte fixa" do chip constitui um microprocessador totalmente funcional, e até mesmo alguma memória. Este chip conecta também os pinos dedidados ao barramento de endereço e dados na parte externa do núcleo; então parcela dos periféricos específicos da aplicação podem ser desenvolvidos utilizando a parte lógico programável do chip, com projetos próprios ou núcleos IP.

Computação Reconfigurável

Como mencionado anteriormente, um dispositivo lógico programável baseado em SDRAM possui a capacidade de ter o seu design alterado on-the-fly (em execução). Esta prática é conhecida como computação reconfigurável. Apesar de originalmente proposta em torno de 1960 por pesquisas da UCLA, este ainda é um campo relativamente novo de estudo. Este atraso deve-se, basicamente, pela ausência de hardware reconfigurável aceitável para desenvolvimento. Os chips programáveis on-the-fly tem alcançado apenas recentemente densidade de portas (gates) que lhes fazem apropriados para qualquer coisa em termos de pesquisa. Mas o futuro da computação reconfigurável é brilhante, e já possui um nincho de aplicações em áreas de inteligência artificial, forças armadas e telecomunicações.

Check List para Seleção de um Dispositivo Lógico Programável

Número de Portas

A contagem de número de portas (gates) é praticamente inútil. Os vendedores utilizam medidas diferenciadas, como número de portas disponíveis, número equivalente de portas NAND, número equivalente de portas em um PLD, número equivalente de portas em um ASIC, etc. Você simplesmente não pode comparar estes números entre fabricantes. Uma melhor comparação a este respeito pode ser feita em relação ao número de flip-flops e pinos de I/O.

Número de Pinos de I/O

Há suficiente quantidade de pinos de I/O para o seu projeto? Este é frequentemente uma questão feita, e afeta bastante o custo do chip. Consequentemente, muitos fabricantes oferecem o mesmo componente com diferentes quantidade de pinos de I/O.

Custo por Chip

Obviamente o cursto é um fator que precisa ser incluído em um produto final baseado em CPLD ou FPGA. Seria mais barato a longo prazo desenvolver um projeto fixo de ASIC e produzir uma grande quantidade? Se você ficar com o dispositivo programável irá desejar utilizar o menor componente que possua os recursos mínimos para o seu projeto.

Ferramentas Disponíveis

Aa ferramentas mais populares para compilação e simulação VHDL e Verilog são vendidas por terceiros. Estas ferramentas geralmente possuem suporte a uma lista de FPGAs e CPLDs mais comuns. Isso significa que as ferramentas precisam compreender o seu chip em particular e também informações de sincronismo relacionados à sua ferramenta de posicionamento e roteamento (place and route tool).

Desempenho

Geralmente os CPLDs são mais rápidos e adicionam menos atrasos que os FPGAs. No entanto, isso deve-se à sua estrutura interna ser menos flexível. Assim, você paga pela velocidade extra. O que normalmente é perdido é a densidade. Em grandes projetos é provável que você precise utilizar um componente mais lento. Ao utilizar um FPGA o desempenho final só será conhecido no final do processo de roteamento.

Consumo de Energia

O consumo de energia pode ser um fator importante em alguns sistemas. Dispositivos baseados em EEPROM e FLASH tipicamente requerem mais potência que os baseados em PROM, EPROM e SRAM.

Encapsulamento

Dispositivos programáveis estão disponíveis em todos os formatos de encapsulamento. Suas escolha precisa ser direcionada a um deles se você precisa de redução de consumo de energia, redução de dissipação, tamanho e/ou custo.

E agora?

A esperança é que você tenha uma melhor compreenção de como este tipo de tecnologia difere o hardware do software, produzindo hardware "de verdade". Existem inúmeras aplicações onde é melhor utilizar uma lógica dedicada (ASIC), lógica configurável (PLD, CPLD, FPGA) ou lugares onde a melhor opção é utilizar software. Existem razões válidas para qualquer uma destas escolhas e você deve estar atento as necessidades de uma aplicação em particular. Enquanto o software e o hardware continuam a se expandir e integrar-se, nós devemos acompanhar o processo e estar dispostos à aprender coisas novas.

Referências


Este artigo foi baseado, e algumas seções traduzidas, do artigo "How Programmable Logic Works"[1] de Michael Barr. As figuras utilizadas são as mesmas utilizadas neste artigo.

[1] Barr, Michael. "Programmable Logic: What's it to Ya?," Embedded Systems Programming, June 1999, pp. 75-84.
[2] Wikipédia: FPGA
[3]Xilinx
[4]Open Cores


Roberto Alcântara Filho
Eletronica.org





Acesso rápido: Lista Completa de Projetos | Diretório de Artigos | Apostilas & E-Books | Política de Privacidade


Política de Privacidade Eletronica.org
Faça sua pergunta

 
Assine o informativo Eletronica.org Grupos de Usuários O'Reilly

Log in


Forgot your password?
Recent Changes
All recent changes…
Conheça Também
Sites em Português
  - Neoradix
  - DQSoft
  - Gabiarra
  - SafiraTec
  - Feira de Ciências
  - RoboFEI
  - Transistor548
  - Rogercom.com
  - Pise na Grama
  - Electronics.com.br
  - Tecnocientista.info

Listas em Português
  - PicListBrasil
  - SisEembarcados

Sites em Inglês
  - Embedded.com
  - Hack a Day
  - Electr. Design
  - Arch Embedded!



[O que é isso?]
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: