Índice das dicas
FPGAs: Processadores programáveis
Por Carlos E. Morimoto em 25 de novembro de 2009 às 18h50
11Pergunte 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:

É 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:

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:

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:

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:

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/.
11 comentáriosPor Carlos E. Morimoto. Revisado 21 de março de 2011 às 16h29


Comentários