GDH Press: Blog » FPGAs: Processadores programáveis
 
RSS

FPGAs: Processadores programáveis

Publicado em 25/11/2009 – 18:50
por Carlos Morimoto

Pergunte a algum amigo quantos computadores ele tem em casa. Provavelmente ele vai responder "tenho só um", ou talvez "tenho dois". Involuntariamente ele estará mentindo, pois na verdade ele tem 10, 20 ou quem sabe 50. Os demais estão escondidos, dentro do celular, TV, aparelho de som, modem ADSL, ponto de acesso, brinquedos, câmeras digitais, mp3players, fornos de microondas e outros aparelhos domésticos, controles remotos e assim por diante. Até mesmo o carro que está na sua garagem inclui vários deles, na forma do sistema de injeção eletrônica, computador de bordo, etc.

Ao contrário de um PC, que pode executar os mais diversos programas e alternar entre eles, desempenhando as mais diversas funções, os sistemas embarcados são dispositivos "invisíveis", que se fundem no nosso cotidiano, de forma que muitas vezes sequer percebemos que eles estão lá. Eles são formados, fundamentalmente, pelos mesmos componentes de um PC: processador, memória, algum dispositivo de armazenamento, interfaces e assim por diante, que podem tanto seguir o design tradicional (um chip para cada função) quanto serem todos agrupados em um único chip, agrupando todos os circuitos.

A principal diferença é que, diferente de um PC ou smartphone, os sistemas embarcados são especializados em executar uma única tarefa, seja ela monitorar sensores no motor para decidir a melhor taxa de queima de combustível, ou tocar arquivos de música colocados em um cartão de memória.

O fato de ser um sistema embarcado, não diz muito sobre o tamanho ou a importância do sistema, pode ser desde um brinquedo como o furby, até uma máquina com centenas de processadores, destinada a criar previsões sobre mercados de capitais, ou controlar o tráfego aéreo. Basicamente, qualquer equipamento autônomo que não é um PC, um Mac ou outro tipo de computador pessoal acaba se enquadrando nessa categoria.

Um bom exemplo são os modems ADSL e pontos de acesso Wi-Fi, que incluem processadores relativamente poderosos (geralmente um chip ARM), com chips de memória RAM, memória Flash para o firmware, processador de sinais e outros componentes. Apesar disso, poucas vezes percebemos a complexidade envolvida, já eles eles funcionam praticamente sozinhos depois de configurados com os parâmetros básicos:

fpgas_html_4c1eee0c

É graças aos sistemas embarcados que o Z80 de 8 bits (em suas inúmeras variações) é até hoje um dos processadores mais produzidos e que os processadores ARM continuam a vender dezenas de vezes mais unidades que chips x86 como o Core i7 ou o Phenom II, mesmo sendo muito menos conhecidos.

Não seria possível incluir um Core Duo ou um Athlon X2 em um controle remoto, por exemplo, mas um Z80 cumpre bem a função, já que é um processador muito barato e que possui um baixíssimo consumo elétrico. Dependendo do clock, eles podem até mesmo desempenhar funções relativamente avançadas. Lembra do GameBoy? Ele era justamente baseado num Z80, acompanhado de um controlador de áudio externo e outros circuitos. Outro exemplo são os S1 Mp3 players, aqueles Mp3 players genéricos em formato de pendrive, fabricados em massa pelos mais diversos fabricantes.

Outro processador muito usado é o Motorola 68000, o mesmo chip de 32 bits utilizado nos primeiros Macintoshs. Naturalmente, não estamos falando exatamente do mesmo chip introduzido em 1979, mas sim de versões modernizadas dele, que conservam o mesmo design básico, mas são produzidas usando tecnologia atual e operam a frequências mais altas. Um exemplo é o chip DragonBall usado nos primeiros Palms, que incluía um processador 68000, controlador de vídeo e outros componentes, tudo no mesmo wafer de silício:

fpgas_html_2b784e26

Para dispositivos que precisam de mais processamento, temos as diversas famílias de processadores ARM, chips RISC de 32 bits, produzidos por diversos fabricantes, que vão da Samsung à Intel.

Embora operem a frequências relativamente baixas, se comparados aos processadores x86, os chips ARM são baratos e possuem um baixo consumo elétrico, por isso são extremamente populares em smartphones, pontos de acesso, modems ADSL, centrais telefônicas, sistemas de automatização em geral, videogames (como o GameBoy Advance) e assim por diante. Cerca de 75% de todos os processadores de 32 bits usados em sistemas embarcados são processadores ARM, contra menos de 1% para os chips x86.

Além da família ARM e Z80, existem inúmeras outras famílias de chips e controladores. Cada uma conta com um conjunto próprio de ferramentas de desenvolvimento (SDK), que incluem compiladores, debuggers, documentação e ferramentas úteis. Em alguns casos o SDK é distribuído gratuitamente, mas em outros precisa ser comprado ou licenciado, o que encarece o projeto.

Normalmente, o desenvolvedor roda as ferramentas de desenvolvimento em um PC e transfere o software para o sistema embarcado que está desenvolvendo apenas nos estágios finais do desenvolvimento. Em alguns casos isso é feito através da porta USB (ou de uma porta serial), mas em outros é necessário gravar um chip de EPROM ou memória Flash com a ajuda do gravador apropriado e transferir o chip para o sistema embarcado para poder testar o software.

Existem no mercado os mais diversos tipos de microcontroladores, cada um com um conjunto próprio de periféricos e funções. Ao invés de desenvolver e fabricar seus próprios chips, as empresas passaram a cada vez mais utilizar componentes disponíveis no mercado, que são fabricados em massa e vendidos a preços incrivelmente baixos. Microcontroladores simples podem custar menos de um dólar, enquanto chips menores chegam a custar apenas alguns centavos.

A maior parte do custo de um processador ou chip qualquer está em seu desenvolvimento. Mesmo um microcontrolador relativamente simples pode consumir vários milhões para ser desenvolvido. Entretanto, o custo de produção por unidade é relativamente baixo, de forma que os chips mais vendidos acabam tendo o custo inicial amortizado e passam a ser cada vez mais baratos.

Muitos microcontroladores podem ser conectados a dispositivos analógicos, permitindo o uso de sensores diversos. Isso permite a criação de dispositivos simples, que monitoram temperatura, umidade, intensidade da luz, aceleração, campos magnéticos e assim por diante, executando ações predefinidas em caso de mudanças, como ligar o ar condicionado, abrir ou fechar as persianas, ou mesmo disparar o airbag do seu carro em caso de colisão.

Para aplicações em que um chip personalizado é essencial, existe ainda a opção de usar chips programáveis, chamados de FPGAs (Field-Programmable Gate Arrays) ou, mais raramente, de LCAs (Logic-Cell Arrays). Como o nome sugere, eles são chips compostos por um enorme número de chaves programáveis, que podem ser configurados para simular o comportamento de qualquer outro circuito. É muito comum encontrá-los em protótipos de periféricos e placas de desenvolvimento, desempenhando a função de algum chip que ainda se encontra em fase de produção:

fpgas_html_m266f7ada

Um único FPGA pode simular não apenas um processador simples, mas também outros circuitos de apoio, como o controlador de vídeo, uma interface serial e assim por diante. Os modelos recentes incluem inclusive uma pequena quantidade de memória RAM e circuitos de apoio, de forma que você pode ter um sistema completo usando apenas um chip FPGA previamente programado, um chip de memória EPROM (ou memória Flash) com o software, a placa de circuito com as trilhas e conectores e uma bateria ou outra fonte de energia.

Os projetos dos chips são desenvolvidos usando ferramentas como o Quartus II que permitem desenvolver e modificar os circuitos através de uma ferramenta gráfica. Com um FPGA de capacidade suficiente e as ferramentas de desenvolvimento, você pode baixar o projeto de um chip, fazer modificações, testar, fazer mais modificações e assim por diante, quase da mesma maneira que com um software.

Assim como no caso dos softwares, existem alguns projetos de hardware aberto, onde você pode obter projetos de livre distribuição. Dois exemplos são o http://www.opencores.org/ (que disponibiliza um grande número de projetos de processadores e controladores dedicados) e o http://www.opensparc.net/ que oferece versões abertas de chips da família Sun SPARC.

Os chips são programados transferindo o projeto para o chip, o que é feito através de um cabo serial ou USB. Assim que recebe o projeto, o FPGA se torna operacional e passa a desempenhar as funções programadas, assim como um chip que acabou de ser ligado.

A programação do FPGA é volátil, por isso ela é perdida sempre que ele é desligado. Para remediar o programa, é usado uma ROM programável, onde o projeto é salvo e transferido para o FPGA sempre que ele é ligado. Como de praxe, é necessário também um chip de memória RAM e interfaces diversas (VGA, rede, etc.) para criar um sistema completo:

fpgas_html_555d5d26

A possibilidade de fazer download de projetos de chips e gravá-los em um FPGA pode parecer tentadora, mas é importante ter em mente que os FPGAs são muito mais caros que chips produzidos em série, pois cada célula lógica é um dispositivo relativamente complexo, que é usado para simular um único componente.

O Altera Cyclone II usado na placa da foto anterior, por exemplo, possui apenas 68 mil elementos programáveis, o que é apenas uma pequena fração do que seria necessário para simular um Phenom II ou Core i7, que são formados por centenas de milhões de transistores. Apesar disso, ele é mais do que suficiente para simular um chip 8088, um ARM7, ou outro projeto moderadamente complexo.

Embora o custo unitário seja relativamente alto, os FPGAs são uma opção muito usada em situações em que são necessárias apenas algumas centenas de unidades de um design exclusivo, uma quantidade que não justificaria a criação das máscaras de litografia e todo o caro processo de produção comercial de um chip. Imagine o caso do ramo da automação industrial, por exemplo.

Eles são também o caminho para projetos artesanais, que são a nova onda entre quem gosta de eletrônica ou está cursando engenharia da computação. Um bom site dedicado ao assunto é o http://www.fpga4fun.com/, que disponibiliza softwares, layouts de placas e até mesmo projetos prontos, como este que reproduz um jogo de paredão, usando um mouse e um monitor CRT:

fpgas_html_18fc95d1

Os componentes necessários para construir os projetos podem ser comprados facilmente pela web, basta ter um cartão internacional ou uma conta no PayPal e a mesma placa de desenvolvimento pode ser usada indefinidamente em diferentes projetos.

Os dois principais fabricantes de FPGAs são a Altera (http://www.altera.com) e a Xilinx (http://www.xilinx.com/). Ambos oferecem tutoriais e cursos de desenvolvimento, que você pode acessar no http://www.altera.com/education/univ/unv-index.html e http://www.xilinx.com/univ/.

» Mais posts

  1. 11 respostas para “FPGAs: Processadores programáveis”

  2. Marcelo em 25 nov, 2009

    Legal é usar eles em projetos de robótica. Até mesmo os micro servo mecanismos usados em aeromodelo estão com preço acessível.

  3. João em 25 nov, 2009

    O que eu mais gosto de VHDL é que ela consegue ser mais baixo nível que Assembly, não que dê pra comparar :)

    Tem umas placas de desenvolvimento da Xilinx muito boas, mas o frete é caro….

  4. vander em 26 nov, 2009

    É complicado. Estive vendo um kit de dsp da texas, importado o ficialmente, custa mais de R$1000,00 (o modelo mais simples de todos). Lá fora é vendido por US$99,00.
    O esquema é cartão de crédito internacional mesmo.

  5. Carlos Morimoto em 26 nov, 2009

    Hoje em dia acaba saindo bem mais barato importar estes equipamentos especializados. Mesmo com envio via EMS e pagando os impostos certinho, ainda acaba saindo bem mais barato. Em alguns casos, sai mais barato até mesmo coisas genéricas como memórias e placas 3D.

  6. Luzemário em 26 nov, 2009

    Esse artigo é a minha cara… :)

    Isso é o que eu chamo de conhecimento banda larga :) o Morimoto é o único que conheço (conheço???) que encara o hardware além do PC. Alguns até tentam seguir a mesma linha, mas cadê o conhecimento?

    Prezado Guru, satisfaça minha vã curiosidade: sua formação é em Eletrônica, em TI ou ambas?

    Pelo que vejo, só alguém com conhecimentos em Eletrônica pode ir além da computação café-com-leite. Esse é o grande porém que vejo nos técnicos de manutenção de PCs de hoje em dia. O pessoal sabe o que é software, tirar vírus e etc, mas quando a coisa pega no hardware, aí é só chutômetro…

  7. Carlos Morimoto em 26 nov, 2009

    Dizem que hoje em dia todo mundo precisa saber um pouco de tudo… :)

  8. Stormrider em 26 nov, 2009

    Em relação ao que o João disse, que eu saiba nao dá pra programar vhdl em um processador porque ele já possui arquitetura pronta, assembly é apenas usar as instruções prontas do processador. As duas nao sao para os mesmos fins e sao do menor nível possível(isso não é um defeito!), menor só escrevendo em bits…Ou eu estou enganado? Morimoto, poderia esclarecer minha dúvida, sou seu fã desde os tempos do kurumin :)

  9. Tonys Admin em 27 nov, 2009

    Sonho meu, sonho meu… Há muitos anos atrás com apenas 7 anos eu desmontava brinquedos à corda com aquelas molas… E consegui a montar de novo com todas a engrenagem no lugar certo. Depois passei a desmontar eletrônicos e até descobri combinações de códigos através de um switch 8 chaves. Tudo era difícil, nada de manual, nada de internet, nada de nada… Hoje está aí tudo na mão ou não, pois depende da grana está na frente… Então quem tem a mente jovem e gosta, vai fundo, bem fundo mesmo… Apesar de eu estar com 43 anos e muito cansado, eu não desisto nunca… O que tudo isto tem a ver com a matéria… Sim tem tudo a ver… São através desta coisas consideradas simples em relação aos sistemas ultra modernos que existem hoje, que temos tais coisas ultra modernas… Devemos olhar sempre para as coisas simples. É como dizia Einstein, se as abelhas em geral sumirem, tudo que o home evolui até hoje, desaparecerá em pelo menos 4 anos..

  10. Ícaro Emannuel S. A. Menezes em 30 nov, 2009

    Stormrider

    Sim, você está certo. VHDL é uma linguagem de descrição de hardware, ou seja, com ela você programa o comportamento de um circuito, como uma FPGA por exemplo. Enquanto Assembly serve para utilizar as instruções já programadas no processador. Gostei muito da matéria Morimoto, você é o cara!! :)

  11. Franklin' em 7 dez, 2009

    Muito da hora!!
    Sou doido para ter um FPGA desses.
    Tem um site que vende kits FPGAs que são muito legais: http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=13&List=Simple

  12. Manabu em 22 dez, 2009

    Achei meio incômodo o destaque que você deu para os chips ARM. A ARM tem um marketshare muito grande em chips de baixo consumo (menos de 1W) para dispositivos alimentados por bateria. Em especial, domina o mercado de chips para celulares e smartphones.

    Mas para dispositivos ligados na tomada, com processadores muito mais poderosos que tipicamente gastam entre 4~20W, outras arquiteturas como MIPS e PowerPC são mais fortes que a ARM. Isso inclui modems ADSL, DVD-players, consoles de videogames, etc. Em micro-controladores, a ARM tem menos de 25% de marketshare (talvez até apenas um dígito). A ARM de fato está crescendo em todos esses mercados, mas mencioná-la sozinha dá a impressão que ela é uma Microsoft da área de processadores embarcados.

    Links interessantes:
    http://www.eetimes.com/news/design/rss/showArticle.jhtml?articleID=220700447&printable=true
    http://www.bloobble.com/broadband-presentations/presentations?itemid=2719
    http://gigaom.com/2009/07/07/arm-winning-the-fight-to-be-the-brains-inside-the-digital-home/
    http://www.linleygroup.com/Newsletters/LinleyWire/wire090925.html


Comente: