Usando O FPGArduino Com F32c

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.
IDE Arduino.
Exemplo de um projeto em Arduino.

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

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.

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.

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.

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: Rodolfo Labiapari Mansur
Publisher Name: Laboratório iMobilis

Referência: http://www2.decom.ufop.br/imobilis/usando-o-fpgarduino/

Let's talk

Se você deseja obter uma consultoria gratuita, sem quaisquer obrigações, preencha o formulário abaixo e entraremos em contato com você.