O que você precisa saber para escolher um dispositivo para o seu projeto

Escolher um componente para um projeto eletrônico pode ser uma tarefa muito difícil. Se você está estudando ou trabalhando no desenvolvimento de sistemas digitais, sistemas embarcados ou lógica programável, certamente já se deparou com algumas destas siglas: GPP, MCU, DSP, GPU, FPGA, CPLD, SoC, ASIC. O que são cada um desses dispositivos? Como funcionam? Quais são as vantagens e desvantagens? Em que aplicações eles podem ser empregados? 

 

Figura 1
Figura 1 – Alguns dos vários dispositivos no universo dos sistemas embarcados

A maioria dos desenvolvedores acaba se especializando em uma tecnologia, seja por aptidão ou seja por uma necessidade de trabalho. Uma das principais principais razões para isto é que aprender uma nova tecnologia pode demandar investimentos consideráveis de tempo, esforço e dinheiro. Além disso, a documentação disponível geralmente é muito técnica, massiva e limitada ao escopo de um dispositivo em particular, sem considerar outras tecnologias a título de comparação.

Aqueles que já perderam horas do seu tempo apenas para decidir qual componente utilizar em seu projeto, sabem o quanto é difícil encontrar conteúdo que faça um paralelo sobre os principais tipos de dispositivos,do ponto de vista de restrições e requisitos práticos (desempenho, consumo, custo, tempo de desenvolvimento, flexibilidade). Neste artigo você verá que é inevitável a integração de componentes cada vez mais especializados e diferentes atuando juntos, tanto a nível de sistema como a nível de encapsulamento dos componentes.

 Sistemas Heterogêneos: a nova tendência dos sistemas embarcados

As necessidades do mercado e o avanço das tecnologias de fabricação estão impulsionando o desenvolvimento de sistemas cada vez mais heterogêneos. No que diz respeito aos sistemas embarcados, entramos na era da Computação Híbrida (coprocessadores e aceleradores) e dos SoCs (System on Chip). O objetivo não é apenas melhorar o desempenho, mas também encontrar maneiras de manter alto desempenho com o menor consumo energético e custo possíveis, visto que as aplicações móveis estão dominando o mercado.

 
Figura 2
Figura 2 – Sistemas com processador central simples (menor desempenho) central versus sistemas heterogêneos (maior desempenho). (Fonte: [2]).

A Computação Híbrida trata de sistemas microprocessados de uso geral (GPP – General Purpose Processor ) trabalhando em conjunto com outros dispositivos de processamento bem específicos, para que estes possam se ocupar de tarefas mais “pesadas” e com exigências de tempo restritas (sistemas de tempo real), liberando o processador principal a se ocupar com outras tarefas mais gerais. Os dispositivos que são comumente utilizados como coprocessadores são as GPUs (Graphics Processing Unit ), DSPs (Digital Signal Processor) e FPGAs (Field-programmable gate array) .

Os SoCs, por outro lado, são uma vertente da computação híbrida que tem como princípio juntar a funcionalidade de diversos componentes em um mesmo encapsulamento. Um SoC pode conter, além do processador principal, DSPs, blocos de memória, conversores AD e DA, interfaces de comunicação de dados (USB, SPI, Ethernet, Bluetooth), PLLs e até elementos de lógica programável (PSoC – Programmable SoC).

 

Figura 3
Figura 3 – A evolução dos FPGAs, cada vez mais SoCs (Fonte: Xilinx)

 Os desafios para o futuro

Um dos maiores desafios da computação híbrida é o fato de que cada dispositivo tem uma maneira particular para ser programado em virtude dos diferentes paradigmas de suas arquiteturas e organização. A princípio, um código que roda em uma CPU precisaria ser alterado significantemente para rodar em uma GPU, ao mesmo tempo que os processos de compilação e depuração seriam muito mais complexos. Do mesmo jeito, em um FPGA, sequer ocorre a execução de um código. Todas as funções são implementadas em nível de hardware, tal como um chip ASIC (Application Specific Integrated Circuit) é desenvolvido a partir da lógica de transistores.

 
Figura 4
Figura 4 – A nova tendência é um único código-fonte para programar todos os dispositivos (Fonte: [2])

Entretanto, há um grande esforço na criação de soluções de alto-nível que permitam ao desenvolvedor abstrair as diferenças de hardware. Uma das mais populares é a plataforma OpenCL, que oferece uma linguagem padrão (baseada em C) e  extensões para operações em paralelo, para programar diferentes arquiteturas de processadores (CPU, GPU, DSP) e até dispositivos lógicos programáveis (FPGA).

 A vantagem mais óbvia de uma plataforma comum a todos os dispositivos é que o tempo para o desenvolvimento é amplamente reduzido, entre os motivos estão:

  • a reduzida a curva de aprendizagem;
  • a facilidade de manutenção;
  • a grande portabilidade entre diferentes arquiteturas.

Porém, ainda há muito para evoluir. Primeiro, porque nem todos os dispositivos tem suporte para OPenCL. Segundo, porque no que diz respeito ao desempenho e à utilização de recursos, as soluções como a OpenCL ainda são inferiores às plataformas customizadas.  De fato, até a velha linguagem assembly ainda é utilizada em determinadas situações que exigem alto desempenho.

Você não precisa saber tudo, apenas o suficiente

 Não é necessário, nem humanamente possível, que um desenvolvedor de sistemas embarcados saiba programar todos os componentes citados aqui. Porém, poderá chegar o momento em que você precisará utilizar uma abordagem diferente da que você conhece em seu projeto. Seja para  aprender a programar um novo dispositivo ou expandir seu universo de possibilidades de criação, é importante que você saiba apenas o suficiente para poder se aprofundar ou direcionar outra pessoa qualificada a fazê-lo por você.

Se você quer saber ainda mais sobre as diversas soluções disponíveis para sistemas embarcados continue acompanhando o blog. No próximo artigo, falarei mais sobre a arquitetura, ferramentas e aplicações de dispositivos microprocessados.

Referências:

[6]Comparative Analysis of OpenCL vs. HDL with Image-Processing Kernels on Stratix-V FPGA (K. Hill et al, IEEE, 2015)

Deixe um comentário