Affrontare progetti ad alta intensità di calcolo con ShieldBuddy
Contributo di Editori nordamericani di DigiKey
2020-07-08
Molti hobbisti e maker usano le scheda di sviluppo per microcomputer Arduino per monitorare e controllare i loro progetti. Altrettanto fa anche un numero crescente di ingegneri professionisti che si serve di queste schede come piattaforme di valutazione e prototipazione per accelerare lo sviluppo e ridurre i costi associati alla valutazione di circuiti integrati (CI), sensori e periferiche. Come è stato discusso in Le BOB Arduino per valutare rapidamente sensori e periferiche, questi ingegneri possono lavorare in team più piccoli con vincoli di time-to-market più stretti. Pertanto hanno dovuto accollarsi altri compiti di ingegneria, trovando nel contempo il modo di accelerare e ridurre il costo della valutazione dei componenti.
Una soluzione consiste nell'utilizzare Arduino con hardware open-source sotto forma di sensori e schede di breakout (BOB) periferiche, in combinazione con software open-source con librerie e programmi di esempio associati. Sebbene esistano molte schede Arduino per soddisfare svariati requisiti di elaborazione e memoria, per alcuni calcoli è comunque meglio utilizzare un'unità in virgola mobile (FPU) per evitare di rallentare il processore principale. Questo problema è stato affrontato all'interno dell'ecosistema Arduino da ShieldBuddy.
Questo articolo descriverà varie opzioni della piattaforma di elaborazione Arduino e spiegherà perché la FPU è così importante per molte applicazioni. Introdurrà poi ShieldBuddy, una scheda che mantiene un ingombro fisico simile alle schede Arduino, ma che ha tre core di elaborazione indipendenti a 32 bit, ognuno a 200 MHz e dotato di una propria FPU. L'articolo descriverà il suo modello di programmazione e mostrerà come l'ambiente di programmazione basato su Eclipse e il supporto all'ambiente di sviluppo integrato (IDE) di Arduino permetta a hobbisti e progettisti di iniziare rapidamente a farne uso.
Arduino per neofiti e professionisti
I neofiti nell'universo di Arduino iniziano tipicamente con il microcontroller Arduino Uno Rev3 (Figura 1), che si basa sul microcontroller a 8 bit ATmega328P da 16 MHz. Questa scheda ha solo 32 kB di memoria flash (programma), 2 kB di SRAM, 14 pin di ingresso/uscita (I/O) digitali e sei pin di ingresso analogico. Sei dei pin digitali possono fornire uscite a modulazione della larghezza di impulso (PWM) e i pin analogici possono anche essere usati come pin I/O digitali, se necessario.
Figura 1: La scheda di sviluppo Arduino Uno Rev3 è basata sul microcontroller ATmega328P a 8 bit da 16 MHz. (Immagine per gentile concessione di Arduino.cc)
L'ingombro delle basette Arduino Uno Rev3, con 14 pin di I/O digitali, 6 pin di ingresso analogico e vari pin di alimentazione, terra e riferimento, è alla base di un enorme ecosistema di schede figlie chiamate shield.
Molti utenti di Uno Rev3 passano successivamente alla scheda Arduino Mega 2560 Rev3 (Figura 2), che si basa sul microcontroller a 8 bit ATmega2560 da 16 MHz. La scheda ha 256 kB di memoria flash e 8 kB di SRAM. L'ingombro delle basette fa sì che possa supportare gli stessi shield di Uno, tuttavia, le basette aggiuntive gli permettono di montare 54 pin I/O digitali e 16 pin di ingresso analogico. In questo caso, 15 dei pin digitali possono fornire uscite PWM e i pin analogici possono essere usati anche come pin I/O digitali, se necessario.
Figura 2: La scheda di sviluppo Arduino Mega 2560 Rev3 è basata sul microcontroller ATmega2560 a 8 bit da 16 MHz. L'ingombro delle basette fa sì che possa supportare gli stessi shield di Arduino Uno, ma ha anche basette aggiuntive per un totale di montare 54 pin I/O digitali e 16 pin di ingresso analogico. (Immagine per gentile concessione di Arduino)
Oltre alle limitazioni imposte da un percorso dati a 8 bit e da un clock a 16 MHz, né Arduino Uno né i microcontroller Arduino Mega includono una FPU, il che significa che qualsiasi calcolo che comporti valori in virgola mobile rallenta drasticamente questi processori.
Per gli utenti alla ricerca di più potenza di elaborazione, il passo successivo è Arduino Due (Figura 3), che ha un ingombro fisico simile ad Arduino Mega, ma che si basa sul processore a 32 bit Arm® Cortex®-M3 da 84 MHz SAM3X8E di Atmel/Microchip Technology. Questa scheda ha 512 kB di memoria flash, 96 kB di SRAM, 54 pin I/O digitali, 12 pin di ingresso analogico e due pin di uscita analogica pilotati da convertitori digitale/analogico (DAC). In questo caso, solo 15 dei pin digitali possono fornire uscite PWM e i pin analogici possono essere usati anche come pin I/O digitali se necessario. Purtroppo, come Arduino Uno e Mega, il processore di Arduino Due non include una FPU.
Figure 3: La scheda di sviluppo Arduino Due è basata sul processore Arm Cortex-M3 a 32 bit da 84 MHz SAM3X8E di Atmel. L'ingombro delle basette è identico a quello di Arduino Mega. (Immagine per gentile concessione di Arduino.cc)
Molti utenti, hobbisti o professionisti che siano, apprezzano l'alto numero di pin delle schede di sviluppo Arduino Mega e Arduino Due. Però, il processore a 32 bit di Arduino Due da 84 MHz può comunque essere insufficiente per alcuni compiti ad alta intensità di calcolo. Allo stesso modo, i 512 kB di memoria flash e i 96 kB di SRAM di Arduino Due possono essere insufficienti per programmi più corposi che utilizzano grandi quantità di dati.
Mentre i microcontroller sono in grado di gestire l'elaborazione di quantità sempre maggiori di dati, alcuni calcoli si eseguono meglio utilizzando FPU per una maggiore efficienza e una minore latenza.
Cosa sono le FPU e perché sono necessarie?
Le ragioni per cui le FPU sono utili risalgono al modo in cui i computer gestiscono i numeri. Il modo più semplice per rappresentare i numeri al computer è quello di utilizzare numeri interi. Eseguire i calcoli con numeri interi ha un basso costo computazionale. Tuttavia, i numeri interi sono di natura limitata e non possono esprimere un'ampia gamma dinamica.
Ciò è problematico per gli ingegneri e gli scienziati che spesso devono utilizzare valori estremamente grandi e piccoli nello stesso calcolo. Ad esempio, i fisici possono aver calcoli che utilizzano i valori numerici della velocità della luce (300.000.000) e la costante gravitazionale di Newton (0,0000000000006674). Allo stesso modo, gli ingegneri richiedono valori con un'ampia gamma dinamica per compiti come l'elaborazione dei segnali digitali (DSP) e per l'uso in applicazioni di intelligenza artificiale (AI) e di apprendimento automatico (ML).
La soluzione consiste nell'utilizzare la rappresentazione numerica a virgola mobile, dove la virgola decimale può "fluttuare" rispetto alle singole cifre del numero, consentendo di ottenere un livello più granulare di "risoluzione" numerica. Il problema è che, sebbene un valore in virgola mobile a 32 bit consumi la stessa quantità di memoria di un numero intero a 32 bit a virgola fissa, l'esecuzione di calcoli con valori in virgola mobile richiede sostanzialmente più risorse di calcolo.
Se il processore è obbligato ad eseguire calcoli in virgola mobile utilizzando hardware standard a virgola fissa, il risultato inciderà drasticamente sulle prestazioni del processore. La soluzione consiste nel dotare il processore di una speciale FPU che possa eseguire operazioni sofisticate in virgola mobile con pochissimi cicli di clock.
È qui che entra in gioco ShieldBuddy.
ShieldBuddy porta le FPU e le alte prestazioni nell'ecosistema Arduino
Una new entry nel panorama compatibile con Arduino, KITAURIXTC275ARDSBTOBO1 o ShieldBuddy (Figura 4) di Infineon Technologies è una scheda di valutazione embedded per il microcontroller TC275T64F64F200WDCKXUMA1 TC275 AURIX TC2xx TriCore a 32 bit di Infineon.
Figura 4: ShieldBuddy TC275 è dotato del processore multicore a 32 bit TC275 di Infineon su una scheda con lo stesso ingombro di Arduino Mega e Arduino Due, il che lo rende compatibile con molti degli shield applicativi disponibili.(Immagine per gentile concessione di Hitex.com)
Mantenendo un ingombro fisico simile ad Arduino Mega e Arduino Due, ShieldBuddy è compatibile con molti degli shield applicativi, ma si distingue per l'uso dell'MCU TC275 con i suoi tre core indipendenti a 32 bit, ognuno dei quali funziona a 200 MHz e ha una propria FPU. Inoltre, ShieldBuddy ha 4 MB di memoria flash (8 MB in Arduino Due e 16 MB in Arduino Mega) e 500 kB di RAM (5 kB in Arduino Due e 62 kB in Arduino Mega).
Per capirci, il core di Arduino Mega gestisce solo circa sedici istruzioni a 8 bit per microsecondo. In confronto, ciascuno dei core TC275 ha un tempo di ciclo di 5 nanosecondi, il che significa che ogni core può tipicamente eseguire da 150 a 200 istruzioni/µs a 32 bit. Poiché ciascun core del processore ShieldBuddy ha una propria FPU, la scheda è in grado di eseguire calcoli in virgola mobile con un minimo, se non nullo, deterioramento delle prestazioni.
Lo sviluppo con ShieldBuddy
Quando lavorano con ShieldBuddy, gli sviluppatori di software professionali potrebbero voler utilizzare un IDE Eclipse, mentre gli hobbisti e i creatori potrebbero preferire l'IDE Arduino. Entrambi sono supportati.
Gli utenti di Arduino sapranno che ogni schizzo (programma) deve avere due funzioni standard: setup(), eseguito in una sola volta, e loop(), eseguito più volte. Gli utenti possono anche creare funzioni proprie.
I tre core di ShieldBuddy si chiamano Core 0, Core 1 e Core 2. Nel caso dell'IDE Arduino, la maggior parte degli schizzi esistenti può essere compilata per l'uso su ShieldBuddy senza modifiche. Per impostazione predefinita, le funzioni setup() e loop() - insieme a tutte le funzioni chiamate, create dall'utente - saranno compilate per funzionare sul Core 0.
Quando crea un nuovo programma, l'utente può ottenere lo stesso effetto nominando queste funzioni setup0() e loop0(). L'utente può anche creare le funzioni setup1() e loop1(), che - insieme a tutte le funzioni chiamate, create dall'utente - saranno automaticamente compilate per funzionare sul Core 1. Allo stesso modo, le funzioni setup2() e loop2(), insieme a tutte le funzioni chiamate, saranno automaticamente compilate per funzionare sul Core 2.
Per impostazione predefinita, ogni core funziona in modo indipendente, il che significa che è possibile avere tre programmi completamente separati operativi contemporaneamente su ShieldBuddy. Detto questo, i core possono anche comunicare tra loro utilizzando tecniche come la memoria condivisa. Inoltre, ogni core può innescare interrupt software negli altri core.
Conclusione
Il concetto open-source di Arduino si è rivelato un grande successo e gli ecosistemi hardware e software che ne derivano sono cresciuti fino a comprendere centinaia di shield e migliaia di librerie e applicazioni.
Anche se le prime schede di sviluppo Arduino, come l'Arduino Uno e Arduino Mega a 8 bit e 16 MHz erano un po' limitate, le implementazioni più recenti come Arduino Due a 32 bit e 84 MHz sono molto più potenti. Anche così, molti utenti richiedono più spazio per i programmi (flash), più spazio per i dati (SRAM) e più potenza di elaborazione di quanto possa offrire uno shield Arduino tradizionale.
Con 4 MB di memoria flash, 500 kB di SRAM e tre core di processore indipendenti a 32 bit da 200 MHz, ognuno con la propria FPU, ShieldBuddy porta il concetto Arduino a un livello completamente nuovo, rendendolo interessante sia per gli amanti del fai-da-te estremo sia per gli ingegneri professionisti.
Letture consigliate:
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.




