Usando o FPGArduino com f32c

On 25 de novembro de 2016 by Rodolfo Labiapari Mansur

Introdução ao FPGArduino

Podemos descrever o FPGArduino  como parte do ecossistema Hardware + Software que configuram a flexibilidade presente no Arduino. Sobre este, temos algumas propriedades do âmbito de hardware do Arduino:

  • Microcontroladores baratos: 8-bit AVR, 16 MHz;
  • Atualmente: 32-bit ARM, MIPS, 50..100 MHz;
  • Poucos KB de RAM para dados, outra para programas;
  • Suporta periféricos como: DAC, ADC, displays, sensores…

E seu software é manuseado por meio:

  • Linguagem C++ simples;
  • Bibliotecas para comunicação com periféricos;
  • IDE: Baseada em Java com GNU toochains.

É possível perceber que a principal atração desta plataforma é a sua simplicidade e a velo9cidade em obter um resultado funcional.

Arduino + RISC

Como a plataforma é open-source é possível utilizar a mesma IDE para desenvolver programas para outras plataformas que diferem do projeto Arduino.

Por exemplo, para adicionar um software em um FPGA que execute o RISC-V, é necessário somente adicionar a arquitetura à IDE e assim compilar e carregar o código executável no FPGA. Um exemplo simples é exibido na figura abaixo.

Utilizando a IDE Arduino para desenvolver e carregar em outras arquiteturas.

Utilizando a IDE Arduino para desenvolver e carregar em outras arquiteturas.

Usando o FPGArduino – f32c

f32c é um core processador de 32-bits recarregável, escalar e pipelined que pode executar subconjunto do ISA de RISC-V e MIPS. É implementado em VHDL parametrizado que no qual permite a síntese com diferentes trade-off de velocidade e área, incluindo um branch predictor e vários outras características e funcionalidades mais específicas. O projeto está disponível em https://github.com/f32c/f32c.

As configurações incluem:

  • C_arch: RISC-V or MIPS ISA;
  • C_big_endian: bus endianess;
  • C_mult_enable: synthesize multipler unit;
  • C_branch_likely: support branch delay slot annulling;
  • C_sign_extend: support sign extension instructions;
  • C_movn_movz: support conditional move instructions;
  • C_ll_sc: support atomic read-modify-write constructs;
  • C_branch_prediction: synthesize branch predictor;
  • C_bp_global_depth: global branch history trace size;
  • C_result_forwarding: synthesize result bypasses;
  • C_load_aligner: synthesize load aligner;
  • C_full_shifter: pipelined instead of iterative shifer;
  • C_icache_size: instruction cache size (0 to 64 KB);
  • C_dcache_size: data cache size (0 to 64 KB);
  • C_debug: synthesize single-stepping debug module.

Todo os módulos VHDL são licenciados pela BSD License.

Seu SoC possui SRAM multiport e controladores SDRAM, pontes AXi, framebuffers para vídeo para HDMI, VGA, entre outros formatos, além de suporta à UART, e outras protocolos de IO.

O produto gerado é VHDL genérico e portável. Isso significa que não possui dependências de primitivas de fabricantes específicas.

Então o que é o FPGArduino?

Descrevendo com mais clareza, FPGArduino é uma extensão do core Arduino para projetos FPGA com base em CPU MIPS 32-bits e RISC-V. Ele é basicamente um pré-compilador gcc para vários sistemas operacionais que transforma as populares placas FPGA populares em sistemas microcontroladores programáveis usando o ambiente de desenvolvimento intuitivo Arduino, a IDE Arduino. Assim é a parte de software do projeto como um todo. O SoC gerado, o hardware é baseado no f32c descrito acima, sendo assim, o FPGArduino é um projeto maior que abrange o f32c tornando um sistema de compilação completo.

O projeto encontra-se em https://github.com/f32c/arduino e em http://www.nxlab.fer.hr/fpgarduino/.
Nesta extensão da IDE Arduino comumente conhecida, existe várias adições de ferramentas para suportar seu propósito.

O primeiro item é o toolchain de pré-compiladores para vários sistemas operacionais como Windows, macOS, e Linux. Para a geração de sistemas RISC-V inclui-se o gcc-4.9.2 e para sistemas MIPS gcc-4.8.4.

Também inclui várias bibliotecas para linguagem C várias delas disponibilizadas pela FreeBSD e também como LLVM, pontos-flutuantes de NuttX, além de outras características que compõe o seu sistema atual de compilação e atualização como o arquivo de definição chamado boards.txt que possui todas as entradas e opções de ISA, tamanho e mapeamento de memória, especificações de placa FPGA além de várias características de SoC.

Um item importante também é a presença de um pré-construtor de bitstream de FPGA e por fim programas para atualizações de placa utilizando serial assíncrono.

O Code Footprint Gerado

Falando agora sobre o arquivo bruto do programa gerado, comparou-se várias plataformas e o seus Code Footprint gerado. De forma geral, plataformas como Arduino geram a Inicialização + Seções de Texto. FPGArduino entretanto gera Inicialização + Texto + Seções de Dados Inicializados. Com isso é possível comparar o footprint de cada projeto em cada tipo de placa:

Tabela de comparações de footprint.

Tabela de comparações de footprint.

Instalação do FPGArduino

A instalação também é um processo facilitado para todos os sistemas operacionais. É praticamente um plug and play aumentando ainda mais a gama de profissionais (e entusiastas) a realizarem um projeto.

Primeiramente, é necessário que seja baixado e instalado a IDE Arduino normalmente, como se fosse utilizada para um projeto em Arduino.

Feito isso, basta ir nas Preferências e em Additional Boards Manager URLs adicionando a URL http://www.nxlab.fer.hr/fpgarduino/pack.json. Após a adição, a IDE possui suporte à projetos SoC. Basta escolher a placa e porta e sincronizar o programa desenvolvido.

No site do projeto também é especificado todos os itens que devem funcionar perfeitamente e os que ainda estão sendo estabilizados.

Todos interessados podem auxiliar na construção do projeto nos Gits mencionados ao longo do texto, corrigindo erros, melhorando códigos e até adicionando novos FPGAs à lista de placas suportadas.

FPGA Suportados pelo Projeto FPGArduino

FPGAs suportados até a escrita deste post.

FPGAs suportados até a escrita deste post.

Summary
O FPGArduino e f32c
Article Name
O FPGArduino e f32c
Description
The FPGArduino project provides pre-built software tools and FPGA configuration bitstreams which transform popular FPGA development boards into microcontroller systems programmable using the intuitive Arduino development environment.
Author
Publisher Name
Laboratório iMobilis
Publisher Logo

Deixe um comentário

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