Introdução do mundo do hardware reconfigurável: Conhecendo as FPGAs

Atualmente, se você pensou em embarcados, pensou em Arduino. Brincadeiras à parte, Arduino virou sinônimo para o ponto de partida nesse admirável mundo de automação e controle. Todavia, existem toda sorte de outros componentes, arquiteturas e tecnologias disponíveis por aí, e uma delas é a tecnologia das FPGAs.

 

FPGA em placa de desenvolvimento para aquisição e processamento de sinais. Fonte: http://www.fpgadeveloper.com

 

Quando você compra um chip pronto, como um Arduino (na verdade, o Atmega 328p ou similar), você é capaz de alterar o programa que ele irá executar. Mas a arquitetura do chip é a mesma, e se você quiser algo diferente, terá que comprar outro chip ou modelo, seja do mesmo fabricante ou de fabricantes diferentes.

 

As FPGAs surgiram como fruto de um extenso trabalho de pesquisa e desenvolvimento mirando o cálice sagrado do hardware reconfigurável - um chip capaz de ter sua lógica digital dinamicamente reconfigurada, de acordo com a necessidade.

 

Blocos e componentes da estrutura de uma FPGA. Fonte: http://www.rfneulink.com/FPGA-whitepaper.htm

 

Exemplo de como a tecnologia das FPGAs é flexível pode ser visto na imagem adiante, em que uma placa de desenvolvimento com uma FPGA Altera Cylone II modelo DE2-70 é configurada para executar o jogo Super Mario. E detalhe: no exemplo apresentado o jogo foi todo projetado em lógica digital, sem emulação.

 

Super Mario em FPGA. Fonte: https://www.youtube.com/watch?v=53Z-oyvzIag

 

Esse tipo de chip permite a criação de arquiteturas funcionais personalizadas de acordo com a necessidade de dado projeto ou aplicação. Em outras palavras: com FPGA é possível criar uma arquitetura computacional e o programa/instruções que irão controlar a arquitetura criada.

 

Assim como você apaga o programa de um chip, como um Arduino por exemplo, também é possível apagar a lógica gravada em uma FPGA, e gravar uma outra lógica novamente.

 

Desenvolvedores e projetistas que estão no início da carreira dificilmente irão se deparar com cenários onde seja necessário "descer a tal ponto". Mas num dado momento e complexidade de aplicações embarcadas, certamente os recursos expostos pelas FPGAs serão bem-vindos na implantação e realização de um projeto embarcado.

 

O conhecimento das tecnologias de FPGA para o desenvolvimento de sistemas embarcados torna-se um divisor de águas para a realização de projetos mais complexos. E com o objetivo de ajudar a disseminação dessa tecnologia no Brasil, eu irei começar essa leva de cursos de FPGA no Liceu Tech, a saber:

  • FPGA I - Iniciante - Curso para aprender conceitos de FPGA, programação e desenvolvimento, debug, um panorama geral sobre as ferramentas de desenvolvimento.
  • FPGA II - Intermediário - Curso em que iremos aprender sobre como criar e estruturar blocos lógicos funcionais em FPGAs, integrando elementos diferentes para o desempenho de tarefas cada vez mais complexas.
  • FPGA III - Avançado - Curso em que iremos tratar do estado da arte, as chamadas FPGA SoC, que possuem processador integrado.

 

As datas desses cursos ainda sofrerão algumas alterações, devido a mudanças que passei na minha agenda pessoal.

 

Dando já um pequeno "spoiler", as aulas terão uma boa dose prática usando kits de desenvolvimento que irão auxiliar os alunos na compreensão dos conceitos trabalhados. Para FPGA I e FPGA II usaremos a Basys 2, que possui uma FPGA Spartan-3E.

 

Placa de Desenvolvimento Basys 2.

 

Já para FPGA III usaremos a Avnet MiniZed, que possui uma FPGA SoC modelo Xilinx Zynq.

 

Kit de Desenvolvimento - Avnet MiniZed.

 

Todos esses kits já fazem parte do acervo de itens disponíveis para uso dos laboratórios do Liceu Tech, e usaremos cada um apropriadamente, e a bom gosto, a cada módulo/curso de FPGA.

 

Na última sexta-feira dia 23/11 ministrei o Webinar "Introdução ao mundo do hardware reconfigurável: Conhecendo as FPGAs", com gravação disponível no Embarcados.

 

Ficou curioso sobre o tema? Para exemplificar cenários onde FPGAs são adotadas, veja a seguir alguns exemplos.

 

Aplicações

 

Uma das mais proeminentes aplicações de FPGAs atualmente é na área de telecomunicações. Elas são fundamentais em equipamentos de redes óticas (também abreviadas por redes OTN), dada a sua capacidade de lidar com processamento paralelo em frequências diversas, requisito crítico e fundamental para a operação dos vários tipos de protocolos adotados em redes OTN. 

 

Placa com FPGA Kintex-7 para redes, criptografia e aceleração de processamento. Fonte: http://www.eenewseurope.com

 

Outra área que também tem se destacado com o uso das FPGAs é a área de Rádio Definido por Software. Como esse recurso depende de uma estrutura bem elaborada de aquisição, processamento e reação, as FPGAs tem sido adotadas por conta da flexibilidade em implementar, configurar e executar dinamicamente blocos computacionais para processar  diversos sinais e protocolos específicos em comunicação via ondas de rádio.

 

Placa de desenvolvimento com FPGA para Radio Definido por Software. Fonte: http://freesrp.org/

 

E a "coisa" vai tão além que é adotada até no espaço! Isso mesmo. FPGAs são adotadas em satélites e sondas espaciais, principalmente pelo seu poderio, quando bem projetado, na área de processamento de sinais. E não é um trabalho fácil: normalmente elas são utilizadas como processadores ou coprocessadores em cenários para computação de sinais meteorológicos, sinais de radiação, dentre outros.

 

FPGAs em Marte. Fonte: https://www.xilinx.com/publications/archives/xcell/Xcell50.pdf

 

 

Todavia, a aplicação mais comumente adotada das FPGAs é como unidades coprocessadoras. Elas não atuam como o elemento principal da ação, mas são utilizadas para amparar/acelerar processos que demorariam mais tempo, e exigiriam mais recursos, caso executados em processadores (CPUs) convencionais.

 

Esse uso e união entre processadores/CPU e FPGAs passou a ser tão comum, que a tendência agora é incorporar as duas coisas em um mesmo chip, levando então às chamadas FPGA SoC.

 

 

FPGAs com Processadores  - FPGA SoC

 

A execução de algoritmos de criptografia, processamento de sinais e até mesmo visão computacional demandam exaustivamente o uso de recursos computacionais em CPU, dada o expressivo uso de matrizes e transformadas realizadas para obter os resultados desejados. 

 

Já em FPGAs tais processos podem ser realizados de forma paralela, simultânea, o que diminui em muito o tempo gasto na execução dessas rotinas matemáticas mais complexas. Dessa forma, a abordagem mais comumente adotada no uso conjunto das FPGAs como coprocessadores é levar o "trabalho pesado" para as FPGAs, numa forma bem dimensionada com o objetivo de garantir uma fluidez na execução do programa.

 

FPGA SoC - Usando simultaneamente um processador e uma FPGA para aceleração de processos. Fonte: http://xilinx.com

 

No Portal Embarcados já cheguei a falar da Avnet MiniZed, plataforma de desenvolvimento com o Xilinx Zynq 7Z007S, que é uma FPGA com um ARM Cortex-A9, capaz de executar um S.O. Linux, por exemplo. Veja o link do artigo logo adiante:

 

MiniZed - Um ARM+FPGA para IoT

 

Bom, falamos de sondas espaciais, redes óticas, rádio e até mesmo de coprocessadores. Mas como faz realmente a ação acontecer?

 

Em FPGAs o raciocício precisa descer ao nível de circuito. E assim, o projetista que for se aventurar nessa área precisa estar bem confortável com conceitos de Arquitetura de Computadores e Lógica Digital, pois serão conceitos norteadores da coisa como um todo.

 

Para o Desenvolvimento com FPGAs, pensa-se então no design, na síntese de circuitos lógicos que desempenharão a tarefa desejada.

 

 

Desenvolvimento

 

O desenvolvimento em FPGAs é pensado na forma de criar unidades lógicas para o desempenho de uma dada função: sejam memórias, circuitos para soma, multiplexadores/demultiplexadores, etc. Essa salada de frutas misturada irá desempenhar uma ação desejada (por exemplo, identificar rapidamente um rosto numa matriz que corresponde uma imagem). Mas para chegar até lá, a FPGA precisa estar carregada com a lógica necessária para essa função.

 

E assim como você utiliza Linguagem C para programar o Arduino, por exemplo, há também linguagens para "programar" FPGAs. Coloquei programar entre parêntesis porque a abordagem adotada é de "descrever" circuitos que serão desempenhados pelo hardware reconfigurável. Assim falando, por convenção, as linguagens adotadas em FPGAs são comumente citadas como "linguagens de descrição de hardware".

 

A mais comum delas é VHDL, adotada por empresas e universidades em geral. Essa linguagem permite criar, relacionar e coordenar a operação de toda sorte de componentes digitais.

 

As ferramentas fornecidas pelos fabricantes de FPGAs são capazes de interpretar a descrição apresentada em linguagem VHDL e a partir dela criar os circuitos lógicos para o desempenho das funções descritas.

 

VHDL - linguagem para síntese de circuitos lógicos. Fonte: https://slideplayer.com/slide/9276575/

 

Para o mundo das FPGAs cada fabricante tem sua própria estrutura de referência, que determina como uma dada lógica descrita em VHDL será, por fim, implementada em um chip real.

 

Em outras palavras, a linguagem VHDL é um meio padrão para descrever hardware, mas como a "coisa" vai ficar no chip de FPGA, irá depender de cada fabricante e suas ferramentas.

 

Dessa forma, ainda não há um consenso ou ferramentas multi-plataforma, tal como observado no mundo dos microcontroladores, onde um chip pode executar código gerado por compiladores de fabricantes diferentes.

 

 

Futuro

 

Dentro em breve as tecnologias de hardware reconfigurável estarão cada vez mais próximas e presentes na vida do cidadão comum. Assim como você atualiza seu Sistema Operacional do celular ou do computador, já pensou na possibilidade de atualizar seu processador?

 

Fabricantes como a Intel já têm se posicionado neste cenário, lançando processadores da linha Intel Xeon, aplicáveis em computação de alto desempenho, que possuem FPGAs incorporadas junto ao processador.

 

Processador Intel com FPGA. Fonte: https://www.hpcwire.com

 

No que tange às tecnologias da Intel, por exemplo, o uso das FPGAs se encaixa na aplicação de co-processadores, ou seja, na criação de sistemas para auxílio à execução de processos, como criptografia e visão computacional, por exemplo.

 

Mas é apenas uma questão de tempo até que essa tecnologia seja cada vez mais incorporada em processadores de propósito geral.

 

Sem deixar de falar de áreas como Deep Learning, Machine Learning e Big Data, que têm descoberto nas FPGAs fortes aliados para a aceleração de processamento dos recursos necessários.

 

De forma a capacitar mais e mais brasileiros nesse cenário de FPGAs, o Liceu Tech irá oferecer módulos de cursos de FPGAs para um aprofundamento gradativo nessa tecnologia, partindo desde o módulo iniciante, até o estado da arte com módulo para FPGA SoC.

 

 

Sobre o Liceu

 

O Liceu de Artes e Ofícios de São Paulo é uma instituição de ensino privado, sem fins lucrativos e filantrópica. Fundado em 1873, o Liceu tornou-se referência na cidade de São Paulo como uma escola de ensino técnico profissionalizante e de formação geral. Mantido por recursos advindos da LAO Indústria Ltda, empresa líder no mercado nacional de hidrômetros e medidores de gás, o Liceu conta com profissionais altamente qualificados o que garante sua excelência em qualidade. O Liceu sempre esteve aliado ao seu tempo, formando profissionais de acordo com as necessidades de cada momento de nossa sociedade. Hoje, o Liceu que oferece cursos de Ensino Médio, Ensino Médio Integrado ao Técnico e Ensino Técnico Concomitante ao médio (filantrópico).

 

A qualidade de ensino do Liceu é comprovada pelo desempenho de seus alunos. Hoje somos a 1ª. Escola de Ensino Técnico do Brasil e estamos posicionados entre as 4 melhores escolas de São Paulo pelo ranking do ENEM.

 

A mesma qualidade, cuidado, competência e profissionalismo estarão presentes nos cursos de especialização do Liceu Tech.”

 

(*) este post foi patrocinado pelo Liceu Tech

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

André Curvello
Graduado em Engenharia de Computação com ênfase em Sistemas Embarcados pela USP, campus São Carlos, possui MBA em gestão de TI pela UNIFRAN e Mestrado em Ciências pela EESC-USP. Atua como Engenheiro de Desenvolvimento de Software Sr. na PST Electronics - Pósitron, sendo também professor de pós-graduação e instrutor de cursos na área de sistemas embarcados. Como hobby, gosta de programar tudo que pode ser programado, escovando bits sempre ao lado de um bom café. Gosta de compartilhar seu conhecimento por meio de palestras, e publicando artigos como colaborador dos sites Embarcados e FilipeFlop. Em 2018 foi premiado como Microsoft Most Valuable Professional em Azure IoT pela Microsoft.

3
Deixe um comentário

avatar
 
3 Comment threads
0 Thread replies
3 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
Rafael MatosFabio MullerGabriel Villanova Novaes Magalhães Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Rafael Matos
Membro
Rafael Matos

É fantástico o que os FPGAs podem fazer, parabéns André

Fabio Muller
Visitante
Fabio Muller

showwww

Gabriel Villanova Novaes Magalhães
Membro
Gabriel Villanova Novaes Magalhães

Legal o review sobre FPGAs, parabéns!