Gli FPGA nel mondo Arduino: uso del modulo Snō di Alorium per blocchi IP sia preconfigurati che personalizzati

Di Steve Leibson

Contributo di Editori nordamericani di DigiKey

Gli FPGA (array di porte programmabili sul campo) permettono di risolvere i problemi hardware di progetti embedded in tempo reale quando il firmware eseguito su un microcontroller o microprocessore sarebbe troppo lento. Offrono inoltre flessibilità in fatto di periferiche. Tuttavia, l'uso di FPGA comportava il dover imparare nuovi linguaggi di programmazione (in genere Verilog o VHDL), lo studio di un flusso di sviluppo completamente nuovo per generare bitstream FPGA e anche l'acquisto di una costosa scheda di sviluppo FPGA.

Dati questi ostacoli, molti progettisti sono riluttanti a utilizzare gli FPGA, anche se riconoscono che sono degli strumenti molto utili che non dovrebbero mancare nella loro "cassetta degli attrezzi". Per superare questa riluttanza, alcuni fornitori stanno tentando di ridurre la curva di apprendimento dell'FPGA. Arduino, ad esempio, ha introdotto la scheda di sviluppo FPGA ABX00022 MKR Vidor 4000 (vedere "Applicare in modo rapido e facile gli FPGA con Arduino MKR Vidor 4000"). Arduino MKR Vidor 4000 offre un altro modo di programmare gli FPGA che si integra perfettamente con il rinomato Arduino Integrated Development Environment (IDE) e permette di ottenere prestazioni di livello FPGA utilizzando le speciali estensioni delle librerie Arduino.

Alle precedenti offerte ora si è aggiunta una nuova alternativa, la scheda Arduino MKR Vidor 4000. Alorium Technology ha sviluppato un modo leggermente diverso di aggiungere le prestazioni FPGA nel mondo dello sviluppo embedded Arduino. L'approccio di Alorium prevede sia blocchi IP preconfigurati per l'accelerazione I/O sia blocchi IP personalizzati.

Questo articolo illustrerà brevemente i tradizionali modi di utilizzare gli FPGA. Passerà poi a esaminare più approfonditamente i moduli FPGA XLR8R22M08V5U0DI e SNOR20M16V3 Snō di Alorium compatibili con Arduino. Mostrerà come Alorium ha favorito l'utilizzo di FPGA nell'ambiente Arduino sia per l'utilizzo di blocchi IP preconfigurati che per la creazione di blocchi IP personalizzati, e come i progettisti possono iniziare ad applicare i moduli FPGA.

Come accelerare un progetto Arduino

Centinaia di migliaia di progettisti, ingegneri, sviluppatori, hobbisti e maker di tutto il mondo utilizzano varie versioni della serie di schede di sviluppo Arduino per sviluppare sistemi embedded per un'ampia gamma di applicazioni. Le schede e l'IDE Arduino sono diventati così diffusi perché sono molto semplici da usare e da programmare.

Ma quando gli utenti Arduino hanno continuato ad applicare l'architettura originale di Arduino in applicazioni più complesse, si sono scontrati con problemi di prestazioni. I problemi sono dovuti da una parte alla semplice architettura a 8 bit del microcontroller originale Arduino. Dall'altra dal modo in cui il sistema software Arduino implementa molte periferiche in tempo reale utilizzando il software quando il microcontroller embedded di Arduino non ha un blocco hardware equivalente.

Una soluzione consiste nell'utilizzare microcontroller più potenti, ma il software può comunque fare molto in un ambiente in tempo reale. È sufficiente implementare nell'hardware alcune periferiche ad alta velocità e in tempo reale. È anche possibile specificare microcontroller con più periferiche hardware, ma il giusto mix di periferiche varia da un progetto all'altro.

I produttori di microcontroller hanno risposto all'esigenza di diversi mix di periferiche offrendo decine o addirittura centinaia di varianti in una famiglia di microprocessori. Per prodotti a livello di scheda come quelli Arduino questo non è però un approccio fattibile perché servono connettori integrati con un numero di pin di I/O sufficiente a soddisfare tutte le esigenze. Nonostante ora esistano molte varianti di schede Arduino, non bastano per accogliere le esigenze di ogni progetto embedded.

Gli FPGA rispondono alla domanda di un mix variegato di periferiche

Mettendo hardware programmabile a disposizione del progettista embedded, gli FPGA possono soddisfare l'esigenza di un mix di periferiche che varia da progetto a progetto. Un modo per aggiungere funzionalità FPGA a una scheda a microcontroller embedded è semplicemente quello di aggiungere un FPGA a un progetto esistente. Questo è l'approccio adottato da Arduino quando ha progettato la scheda Arduino MKR Vidor 4000. La scheda combina il microcontroller a basso consumo SAMD21 ATSAMD21G18A-AUT basato su Arm® Cortex®-M0+ a 32 bit di Microchip Technology con FPGA Cyclone 10 10CL016YU484C6G di Intel.

Arduino ha aggiunto diversi blocchi IP hardware all'IDE Arduino espressamente per la scheda MKR Vidor 4000. Queste periferiche sono disponibili tramite due librerie principali: VidorPeripherals e VidorGraphics. Questi blocchi IP hardware sono costruiti automaticamente nell'FPGA Intel Cyclone 10 in MKR Vidor 4000 quando in uno sketch (il nome che Arduino usa per un programma o un'unità di codice) Arduino, è inclusa la libreria di periferiche corrispondente. L'elenco attuale di blocchi IP di periferiche include:

  • Porte I2C
  • Porte SPI
  • UART
  • Controller PWM ad alta frequenza
  • Timer ad alta velocità
  • Decoder in quadratura ad alta velocità
  • Controller LED RGB intelligenti indirizzabili Neopixel di Adafruit Industries

Alcune di queste periferiche, come I2C e SPI, erano già disponibili come blocchi IP software per le schede Arduino precedenti. Rispetto a queste prime implementazioni software e agli equivalenti blocchi IP implementati sull'FPGA della scheda Arduino MKR Vidor 4000, le versioni FPGA di queste periferiche forniscono prestazioni molto superiori. Ad esempio, ogni istanziazione I2C e SPI viene implementata con blocchi hardware programmabili separati all'interno dell'FPGA della scheda. Di conseguenza, non vi è alcuna perdita di prestazioni quando si istanziano più porte seriali di questo tipo.

Implementando blocchi di periferiche come hardware FPGA e rendendoli disponibili tramite lo stesso meccanismo di libreria che i programmatori di sketch Arduino conoscono già, la scheda Arduino MKR Vidor 4000 semplifica l'uso degli FPGA. Non occorre imparare nessun nuovo linguaggio di descrizione dell'hardware (HDL), come VHDL o Verilog. Dal punto di vista del programmatore, le periferiche basate su FPGA non sono diverse da qualsiasi altro oggetto C++. Arduino ha in programma di aggiungere altre periferiche di blocchi IP hardware di questo tipo.

La scheda Arduino MKR Vidor 4000 non è però una scheda di sviluppo FPGA per uso generale perché le manca il supporto per la programmazione diretta dell'FPGA Cyclone 10 integrato che utilizza il codice HDL. Arduino sta pensando di consentire agli utenti più avanzati di sfruttare più a fondo l'FPGA della scheda Arduino MKR Vidor 4000 utilizzando lo strumento di sviluppo Quartus HDL di Intel per i suoi FPGA.

Alorium ha già provveduto

Alorium ha già fatto questo passo con la sua metodologia OpenXLRR8 e con gli Xcelerator Block (XB) per le sue schede di sviluppo FPGA XLR8R22M08V5U0DI e SNOR20M16V3 Snō compatibili con Arduino (rispettivamente Figura 1 e Figura 2). Entrambe le schede sono basate su versioni diverse della famiglia di FPGA MAX 10 di Intel con memoria di configurazione flash integrata. XLR8 combina MAX 10 10M08SAU169C8G di Intel con un microcontroller compatibile con il set di istruzioni ATmega328 a 8 bit. Usa lo stesso fattore di forma della scheda di sviluppo Arduino Uno originale, per cui è compatibile con i numerosi shield e accessori Arduino.

Immagine della scheda di sviluppo XLR8R22M08V5U0DI di Alorium Technology

Figura 1: La scheda di sviluppo XLR8R22M08V5U0DI di Alorium Technology combina un FPGA MAX 10 di Intel con un microcontroller compatibile con il set di istruzioni a 8 bit ATmega328, in un fattore di forma Arduino Uno. (Immagine per gentile concessione di Alorium Technology)

Il modulo FPGA Snō di Alorium è una scheda di sviluppo molto più piccola, di soli 17,78 x 43,18 mm, come da Figura 2. Anche se fisicamente più piccola, la scheda di sviluppo FPGA Snō integra una versione più grande dell'FPGA MAX 10 di Intel che ha il doppio di elementi logici: 16.000 in un FPGA MAX 10 10M16SAU169C8G rispetto agli 8.000 nel dispositivo 10M08 sulla scheda XLR8. Ha anche più del doppio dei pin di I/O (32 contro i 14 della scheda XLR8).

Immagine della scheda di sviluppo FPGA Snō di Alorium Technology

Figura 2: Come la scheda di sviluppo XLR8, quella FPGA Snō di Alorium Technology combina un microcontroller compatibile con il set di istruzioni a 8 bit ATmega328 con un MAX 10 di Intel; in questo caso si tratta dell'FPGA 10M16SAU169C8G. La scheda di sviluppo FPGA Snō è però molto più piccola. (Immagine per gentile concessione di Alorium Technology)

Alorium offre anche la scheda di breakout SNOMAKRR10 che accetta un modulo FPGA Snō e lo trasforma in una scheda con fattore di forma Arduino leggermente sovradimensionato con una porta USB e pin di breakout di I/O supplementari rispetto all'FPGA. Alcuni pin del modulo FPGA Snō sono instradati alle basette dello shield compatibile con Arduino della scheda di breakout SnōMAKR, altri sono instradati a un'altra basetta sul bordo della scheda di fronte al connettore USB (Figura 3).

Immagine della scheda di breakout SNOMAKRR10 di Alorium

Figura 3: La scheda di breakout SNOMAKRR10 di Alorium converte la sua scheda di sviluppo FPGA Snō in un fattore di forma compatibile con Arduino con una porta USB e un regolatore integrato per permettere al cavo USB di alimentare direttamente la scheda di sviluppo. (Immagine per gentile concessione di Alorium Technology)

Le schede di sviluppo FPGA XLR8 e Snō implementano entrambe il microcontroller a 8 bit e le sue periferiche hardware in un chip: un FPGA MAX 10 di Intel. La Figura 4 illustra come è stato realizzato.

Schema dell'integrazione del microcontroller Atmel compatibile AVR

Figura 4: Le schede di sviluppo FPGA XLR8 e Snō implementano entrambe il microcontroller Atmel compatibile AVR come soft core all'interno dell'FPGA MAX 10. (Immagine per gentile concessione di Alorium Technology)

Il core del microcontroller compatibile AVR (in basso a sinistra della Figura 4) è lo stesso microcontroller AVR a 8 bit ATmega328 di Atmel usato nelle schede di sviluppo Arduino originali. Invece di trovarsi su un chip separato, però, la versione di Alorium del microcontroller AVR è implementata come soft core all'interno dell'FPGA.

Nella Figura 4, sopra il core del microcontroller appaiono cinque XB Alorium (da XB1 a XB5). Gli XB sono blocchi IP implementati utilizzando le risorse su chip dell'FPGA. Il microcontroller AVR comunica con gli XB su chip attraverso un'interfaccia di registro indirizzabile. Le schede di sviluppo XLR8 e Snō sono dotate di XB preinstallati (disponibili anche su GitHub) che corrispondono alle periferiche di cui gli sviluppatori Arduino hanno spesso bisogno, tra cui:

Tenere presente che l'ultimo XB dell'elenco di cui sopra non è in realtà un blocco di periferiche I/O ma un acceleratore matematico a virgola mobile. Gli XB possono essere qualsiasi tipo di acceleratore hardware. Non sono limitati all'I/O.

Possibilità di scelta di qualsiasi blocco

Entrambe le schede di sviluppo FPGA XLR8 e Snō possono essere aggiornate sul campo selezionando diversi XB (o più copie dello stesso XB) da istanziare all'interno dell'FPGA utilizzando il flusso di sviluppo OpenXLRR8 di Alorium. Gli sviluppatori possono anche creare Xcelerator Block personalizzati utilizzando il flusso OpenXLR8 di Alorium (Figura 5).

Immagine del flusso di sviluppo OpenXLR8 di Alorium

Figura 5: Il flusso di sviluppo OpenXLR8 di Alorium permette ai progettisti di creare nuovi blocchi hardware utilizzando gli strumenti di progettazione Quartus Prime di Intel e di aggiungerli all'IDE Arduino. (Immagine per gentile concessione di Alorium Technology)

Per creare un XB personalizzato occorre possedere una conoscenza pratica dei linguaggi di descrizione hardware Verilog o VHDL e avere familiarità con lo strumento di FPGA Quartus di Intel - nello specifico con la versione 17.1 di Quartus Prime Lite Edition - e con gli strumenti di simulazione ModelSim di Mentor Graphics. Gli HDL sono necessari per lo sviluppo di FPGA perché consentono al progettista di esprimere l'esecuzione parallela di più attività, in modo standard e ben definito. Linguaggi di alto livello (HLL) come C e C++ sono intrinsecamente sequenziali.

I compilatori HLL prendono il codice sorgente HLL e lo convertono in lunghe sequenze di istruzioni macchina, che di solito vengono eseguite una alla volta. Questo spiega perché gli FPGA sono molto più veloci dei processori. Se sono abbastanza grandi, gli FPGA possono eseguire contemporaneamente migliaia di attività. Esistono dei compilatori HLL che possono tradurre il codice scritto in C o C++ in un HDL - che viene poi elaborato da strumenti FPGA convenzionali - ma attualmente non fanno parte del flusso di progettazione OpenXLR8 di Alorium.

Tuttavia, una volta che è stato progettato e sottoposto a debug con gli strumenti di sviluppo HDL e FPGA, un XB può essere usato nell'IDE Arduino come qualsiasi altro blocco delle librerie Arduino. Alorium sta sviluppando anche altri XB per le sue librerie IDE Arduino.

Conclusione

Con la creazione delle rispettive schede di sviluppo FPGA a basso costo, sia Arduino che Alorium Technology hanno riconosciuto che ai progettisti servono prestazioni embedded sempre più spinte. Anche se hanno preso strade diverse, entrambe le società stanno puntando allo stesso obiettivo finale: trovare un modo per rendere gli FPGA più accessibili a un maggior numero di sviluppatori embedded. Al livello più basico, sia l'approccio di Arduino che quello di Alorium fanno della progettazione hardware una semplice questione di prelievo di blocchi ed esecuzione di script.

Attualmente, però, l'intero flusso di progettazione non è ancora semplice come potrebbe essere. Arduino non ha ancora aperto agli sviluppatori di HDL il suo intero flusso di sviluppo FPGA. Il flusso di progettazione di Alorium accetta progetti HDL, ma richiede la conoscenza dei linguaggi e degli strumenti di progettazione FPGA Verilog o VHSL.

Tuttavia, questi prodotti hanno fatto da apripista, quindi almeno in teoria è possibile sfruttare altri progressi nello sviluppo di FPGA, compresi i compilatori hardware C e C++. Fino ad allora, si potranno estrarre alcune delle prestazioni dell'FPGA utilizzando i metodi semplici sviluppati da Alorium Technology e Arduino per aggiungere queste funzionalità all'IDE Arduino.

 
DigiKey logo

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.

Informazioni su questo autore

Image of Steve Leibson

Steve Leibson

Steve Leibson è stato System Engineer per HP e Cadnetix, Editor in Chief per EDN e Microprocessor Report, blogger tecnologico per Xilinx e Cadence (solo per citarne alcuni), e ha collaborato come esperto di tecnologia in due episodi di "The Next Wave with Leonard Nimoy". Da 33 anni collabora con molti progettisti allo sviluppo di sistemi migliori, più veloci e più affidabili.

Informazioni su questo editore

Editori nordamericani di DigiKey