Risc-V IoT: Platafoma IoT no FPGA

On 2 de dezembro de 2016 by Rodolfo Labiapari Mansur

Introdução ao Risc-V IoT

Risc-V IoT:IoT são dispositivos de função única que são conectados à internet. Tais dispositivos como lâmpadas, geladeiras, janelas, portões passam por três procedimentos principais:

  • Sensoriamento: Acelerômetro, giroscópio, pressão, temperatura…;
  • Processamento: Encriptação, processamento digital de imagem, filtro de dados…;
  • Comunicação: Wi-Fi, Bluetooth, I2C, SPI, Zigbee…

network-782707

Platafoma Risc-V IoT no FPGA sobre Tecnologia da Lattice

riscv-logo-retina

Segundo a empresa de fabricação de semicondutores, uma plataforma de Risc-V IoT em FPGA deve ser de fácil utilização usando linguagens como C/C++ para desenvolvimento para clientes finais além de usuários poderem escrever aceleradores em hardware usando C e não HDL. No projeto apresentado por eles, utilizam o RISC-V com aceleradores LegUp, desenvolvidos por eles. Outro item importante que deve compor ao projeto é a flexibilidade. Deve suportar uma gama de sensores, atuadores e API de dispositivos comunicadores. Além disso, deve possui capacidade de gerar instruções customizadas ou bibliotecas de aceleração caso necessitada em projeto desenvolvido pelo usuário. FPGA é a arquitetura que preenche perfeitamente esse requerimento.

Combinando o processador RISC-V com o hardware FPGA, obtêm uma solução híbrida com baixo consumo de energia e pequeno footprint, ponto chave para toda plataforma IoT.

Fazendo uma associação do sistema IoT descrito anteriormente à solução reconfigurável, temos:

  • Sensoriamento: Descrição em software de componentes sensoriais. A plataforma Lattice IoT fornece várias API para vários sensores e atuadoros;
  • Processamento: Processador RISC-V juntamente com o acelerador sintetizado em hardware reconfigurável juntamente. Realizar o casamento do RISC-V com o hardware acelerador gerado LegUp para o manuseio de de parte de um processamento de uma plataforma IoT, tem-se um:
    • Baixo consumo de energia e pequeno footprint gerado;
    • Após identificar pontos críticos em programas em C, usar o LegUp para sintetizá-los num FPGA e aumentar a performance do sistema;
    • As partes não críticas do programa em C são executadas pelo processador RISC-V;
    • Tudo isso mantendo o baixo consumo de energia e a alta vazão.
  • Comunicação: Descrição em software para dispositivos comunicáveis. Item também suportado pela plataforma para IoT Lattice.

Arquitetura RISC-V com aceleradores LegUp

Abaixo é exibido um diagrama mostrando como seria um sistema que utilizasse o processador RISC-V em conjunto com o acelerador LegUp.

Visão geral da arquitetura final.

Visão geral da arquitetura final.

O processor Lattice RISC-V possui o seguintes passos de pipeline.

Pipeline do RISC-V.

Pipeline do RISC-V.

Como é possível ver, ele possui 4 estágios e se baseia no ISA RV32IMC que inclui os subconjuntos RV32I, RV32M para multiplicadores e RV32C. Outras características adicionais podem ser configuradas por meio de parâmetros em Verilog.

Síntese de Alto-Nível em LegUp

Abaixo é exibido uma demonstração de como é realizado o processo de geração de código HDL a partir de um código C.

Processo de geração de código em HDL.

Processo de geração de código em HDL.

Vantagens do Uso do LegUp

O primeiro e principal é que muitos desenvolvedores não conhecem a linguagem Verilog ou muito menos qualquer HDL. Projetos que levariam meses agora leva semanas.

Argumentam também que testbench realizados sobre a linguagem C são até cem vezes mais rápido que simulações feitas em linguagem HDL. Permite a exploração de espaços de design além da fácil ‘debugação’ da linguagem C.

LegUp Design Flow

O procedimento de geração de código a partir do LegUp é realizado a partir do seguinte fluxograma.

Fluxograma de geração de código.

Fluxograma de geração de código.

Inicialmente é escrito o código em linguagem C e adicionado todas as informações de compilação. O processo irá gerar o Processador RISC-V, pedaços especificados de programas gerado em HDL e o resto dos programas binários gerados ambos a partir da linguagem C. O que isso significa? Significa que pedaços do programa que pode ser executado em nível de hardware podem ser gerados HDLs específicos para tais e consequentemente criando módulos únicos para cada. Com isso, tem-se o processador descrito em HDL, o código executado por ele em C e pequenos módulos em HDL localizados no mesmo ambiente onde se encontra o RISC-V chamado de aceleradores (tão falado nos últimos posts de RISC-V :>).

Gerado o sistema por completo, obtêm-se o projeto em RTL.

Exemplo de Criação de um Acelerador

Supondo que tem-se uma função num código em C chamada multiplicacao. Para acelerar esta função em nível de hardware basta especificar no LegUp Tcl o comando set_accelerator_function ”multiplicacao” e executar o LegUp.

Internamente, o LegUp irá transformar o código adaptando-o para o acelerador Verilog de hardware. Automaticamente ele irá modificar a função criando um wrapper para a interface de hardware e modificando também a chamada da função que receberá um novo nome sendo este legup_multiplicacao. Ao fim, terá um acelerador dedicado à função especificada.

Ao final, o projeto estará da seguinte forma.

Overview do projeto final.

Overview do projeto final.

Caso de Estudo

Supõe-se que temos o seguinte código:

[code language=”c”]
for (i = 0; i < 256; i++)
energia += amostras[i] * amostras[i];
[/code]

A energia de determinado item é calculado pelo quadrado de uma amostra. Sabendo do código citado, analisemos.

Processamento no RISC-V32IM

É possível perceber que cada loop toma pelo menos 6 ciclos sendo eles load, increment, address, multiply, add e branch. Este processamento leva cerca de 1550 clocks para ser completado.

Processamento com o Acelerador sintetizado pelo LegUp

Usando o mesmo código mas com olhos em sua sintetização em hardware, fica claro que será gerado um circuito em nível de hardware que explorará o paralelismo. Partindo deste, cada iteração será executado em um único ciclo de clock. Assim, o procedimento completo será executado em 288 ciclos de clock.

Com o novo valor de speedup temos uma melhora de 5,4 vezes da performance anterior.

Exemplos de Projetos Risc-V IoT

Na figura abaixo, é exibido um como seria o esquema de um projeto que utilizaria um módulo câmera, e saídas de vídeo além de processamento sobre os dados.

Blocos em azul representam linguagem em HDL e bloco em laranja linguagem C.

Blocos em azul representam linguagem em HDL e bloco em laranja linguagem C.

Os procedimentos para captura de imagem seriam descritos em linguagem HDL, o algoritmo para operação dos dados seriam escritos em linguagem de alto nível sendo executados em processador RISC-V IoT e o processamento para saída de vídeo também seria descrito em linguagem HDL.

Ao invés de utilizar todos processamentos, tanto de entrada e saída, em linguagem de alto nível, realizar a aceleração de alguns deles tornando módulos a parte ao processador pode tornar o projeto mais eficiente e reduzir o gasto de energia.

A tabela abaixo exibe o ganho do uso de LegUp ao transformar módulos em aceleradores em cada algoritmo.

Ganho sobre o uso do acelerador.

Ganho sobre o uso do acelerador.

Summary
Plataforma Software-Programmable IoT FPGA pela Lattice
Article Name
Plataforma Software-Programmable IoT FPGA pela Lattice
Description
Projeto que baseia no ISA RV32IMC que inclui os subconjuntos RV32I, RV32M para multiplicadores e RV32C e aceleradores.
Author
Publisher Name
Laboratório iMobilis
Publisher Logo

Deixe um comentário

O seu endereço de e-mail não será publicado.