Opzioni hardware interessanti per schede basate su ARM compatte, potenti, efficienti ed economiche
Contributo di Editori nordamericani di DigiKey
2016-06-21
Qual è la vostra competenza primaria? Questa domanda - che raramente viene fatta - potrebbe sembrare elementare, a prima vista, ma la vostra risposta può fare la differenza tra il fallimento e il successo di mercato del vostro progetto. I chip sono sempre più integrati e comuni, le architetture su cui sono basati sempre più standardizzate, per cui potrebbe non esservi più ragione (se mai ce n'è stata) di destinare somme, ore e risorse umane preziose per lo sviluppo della vostra scheda e di altro hardware pertinente, invece di concentrarle su software più facilmente differenziato che viene eseguito su quell'hardware.
Se avete deciso di standardizzare con un'implementazione di sistemi basati su ARM®, le varie opzioni di scheda della Raspberry PI Foundation sono un'alternativa convincente per sviluppare il proprio hardware, in particolare per volumi di produzione modesti. La loro entusiastica adozione in tutto il mondo, abbinata alle numerose opzioni di fornitura, ha portato a una disponibilità solida e a prezzi economicamente validi. Sono disponibili varianti di scheda basate su generazioni di CPU multi-core. Inoltre presentano varietà di dimensioni e pesi, di specifiche di consumo, velocità di clock e connettività, di memoria e allocazioni di altre periferiche. I connettori HAT (Hardware Attached on Top) standardizzati e i protocolli software delle schede consentono l'espansione ad altre periferiche, come pure il debugging e il supporto di ulteriori sviluppi. Inoltre, quando la crescita dei volumi di spedizione del sistema giustifica, economicamente, che vi facciate carico della produzione dell'hardware, le specifiche open-source delle schede rendono questa transizione estremamente semplice.
Nella tabella è riportato un riepilogo delle quattro opzioni di schede Raspberry Pi discusse più dettagliatamente nel seguito di questo articolo. Dato che le prestazioni del processore e altre capacità saranno uno dei criteri principali (pur se non l'unico) per la scelta da operare, l'articolo si conclude con alcuni esempi di codice benchmark e altre indicazioni per la valutazione.
| Modello A+ Raspberry Pi | Modello B+* Raspberry Pi | Modello B Raspberry Pi 2 | Modello B Raspberry Pi 3 | |
|---|---|---|---|---|
| SoC | Broadcom BCM2835 | Broadcom BCM2836 | Broadcom BCM2837 | |
| CPU | ARM1176JZF-S single-core a 700 MHz (32 bit) | ARM Cortex-A7 quad-core a 900 MHz (32 bit) | ARM Cortex-A53 quad-core a 1,2 GHz (64 bit) | |
| Memoria di sistema (condivisa con il frame buffer GPU) |
256 MB | 512 MB | 1 GB | |
| 2 porte USB | 1 (da BMC2835) | 4 (da CI hub multiporta separato) | ||
| Connettività di rete integrata | Nessuno | Ethernet via cavo 10/100 Mbps tramite adattatore USB integrato | Ethernet 10/100 Mbps, Wi-Fi 802.11n, Bluetooth 4.1 | |
| Potenza nominale | 200 mA (1 W) | 600 mA (3 W) | 800 mA (4 W) | |
| Dimensioni | 6,5x5,63 cm | 8,55x5,65 cm | ||
| Peso | 22,7 g | 45,4 g | ||
*Articolo obsoleto
Tabella 1: Confronto fra quattro versioni Raspberry Pi in cui viene mostrata la varietà di scelta
Le quattro schede precedenti condividono le seguenti caratteristiche:
- Ingresso video tramite connettore di interfaccia telecamera a 15 pin MIPI CSI
- Due opzioni di uscita video: HDMI digitale (1.3 e 1.4) e video composito analogico (presa TRRS da 3,5 mm)
- Ingresso audio digitale I2S
- Tre opzioni di uscita audio: HDMI e I2S digitali e analogica (presa TRS da 3,5 mm)
- Storage non volatile tramite slot MicroSDHC
- 17 pin GPIO, più bus ID HAT
- Interfaccia console tramite cavo micro-USB o cavo seriale con connettore di alimentazione GPIO opzionale
Raspberry Pi ("1")
Il Modello A+ preso in esame in questo articolo (Figura 1) è una versione successiva più piccola e più economica del Modello A, che era già una variante meno costosa (e più elementare) del Modello B originale. Le dimensioni del Modello A+ di 65x56,5 mm sono identiche a quelle delle schede di espansione HAT (Hardware Attached on Top) aggiuntive, supportate da tutte le quattro alternative di scheda illustrate in questo articolo. Questa particolare variante di scheda include la quantità di SDRAM (256 MB) più bassa rispetto a una qualsiasi delle quattro schede, oltre a offrire un solo connettore USB e nessun supporto di connettività di rete integrato (sebbene entrambi possano essere espansi tramite periferiche basate su USB o HAT).
L'altra opzione Raspberry Pi "1" trattata qui è il Modello B+ (seppur obsoleto, verrà preso in esame a fini di confronto con gli altri modelli disponibili). Le dimensioni della scheda, 85,6x56,5 mm, sono più grandi di quelle del Modello A+ (e identiche a quelle dei prodotti Raspberry Pi 2 e Raspberry Pi 3 che verranno trattati in seguito). Del maggiore spazio è stato fatto un uso proficuo, con un raddoppio della memoria di sistema fino a 512 MB, quattro volte il numero di porte USB e supporto per Ethernet cablata 10/100 Mbps embedded.
Comunque, anche se una CPU ARM11 single-core a 700 MHz potrebbe sembrare bizzarra nell'era degli smartphone basati su CPU a dieci core, tenere presente che questa stessa CPU era più che sufficiente per supplire alle necessità sia dell'iPhone® Apple originale che del successivo iPhone 3G. Se le vostre esigenze in fatto di prestazioni sono modeste, Broadcom BCM2835 potrebbe essere perfettamente sufficiente, rendendo particolarmente attraente il basso consumo risultante dell'opzione di scheda del Modello A+.


Figura 1: Il progetto Raspberry Pi originale si basa sul SoC BCM2835 di Broadcom, che integra una CPU ARM11 single-core a 700 MHz. È disponibile in due fattori di forma (e set di funzioni) di scheda: il Modello A+ (superiore) più piccolo e il Modello B+ (inferiore) più grande. (Immagini per gentile concessione di Seeed Technology)
Raspberry Pi 2
Il Modello B Raspberry Pi 2, introdotto l'anno successivo all'uscita sia del Modello A+ che del Modello B+ Raspberry Pi, ha conservato le dimensioni del suo predecessore più grande e, dal punto di vista dell'evoluzione della serie di funzioni, ha due caratteristiche chiave degne di nota. In primo luogo, raddoppia la quantità di memoria rispetto al Modello B+ (e quadrupla l'allocazione di SDRAM del Modello A+) arrivando a 1 GB. In secondo luogo, e cosa forse ancora più significativa, migra da BCM2835 a BCM2836 di Broadcom, il che si traduce sia in un incremento della velocità di clock della CPU a 200 MHz sia nell'evoluzione da ARM11 single-core ad ARM Cortex®-A7 quad-core.
La GPU rimane la stessa, il che significa che Raspberry Pi 2 non piloterà necessariamente grafica e velocità di frame video superiori (cosa che accadeva in passato con il collo di bottiglia dovuto a una scarsa potenza di elaborazione della CPU). Tuttavia, parlando di potenza di elaborazione, l'aggiornamento della CPU spesso può significare miglioramenti importanti delle velocità runtime dell'applicazione, per motivi che spiegherò più nei dettagli a breve. Inoltre, riprendendo quanto ricordato in precedenza, non bisogna ignorare automaticamente una CPU quad-core a 32 bit sebbene ora anche gli smartphone entry-level ricorrano sempre più ai 64 bit. Dopotutto, nell'iPhone 4S era usata una ARM Cortex-A7 dual-core a 800 MHz.

Figura 2: Il Modello B Raspberry Pi 2 mantiene le dimensioni del Modello B+ Raspberry Pi che l'ha preceduto, ma aggiorna il processore di applicazione a un Broadcom BCM2836 contenente una CPU ARM Cortex-A7 quad-core a 900 MHz. (Immagine per gentile concessione di Seeed Technology)
Raspberry Pi 3
Sulla scia del precursore Raspberry Pi 2, e introdotto un anno dopo, il Modello B Raspberry Pi 3 rappresenta un'ulteriore evoluzione del processore di applicazione di Broadcom da BCM2836 a BCM2837, passando dalla CPU a 32 bit ARM Cortex-A7 quad-core a 900 MHz ad ARM Cortex-A53 quad-core a 1,2 GHz a 64 bit. Il core GPU all'interno della BCM2837, VideoCore IV di Broadcom, rimane immutato dal punto di vista delle funzioni, ma la sua velocità di clock è stata portata a 300 MHz per l'elaborazione di grafica 3D e a 400 MHz per quella video. Quest'ultimo incremento delle prestazioni consente una codifica e decodifica a 1080p 60 Hz completa di contenuto H.264 (MPEG-4 AVC) di alto profilo. La maggiore importanza della GPU, e pertanto l'aumento della sua velocità di clock in questa generazione di SoC e di schede, verrà ripresa fra un attimo.

Figura 3: Raspberry Pi 3 amplia ulteriormente la compatibilità del fattore di forma dei suoi predecessori, ma con un ulteriore aggiornamento a BCM2837 basato su ARM Cortex-A53 quad-core a 1,2 GHz (e 64 bit) di Broadcom. (Immagine per gentile concessione di Seeed Technology)
Il Modello B Raspberry Pi 3 rappresenta anche dei miglioramenti significativi sul fronte delle opzioni di tecnologia di connettività integrate. Viene offerta anche in questo caso Ethernet cablata 10/100 Mbps, accompagnata questa volta da capacità Wi-Fi 802.11n solo a 2,4 GHz e Bluetooth 4.x (per il supporto delle quali nelle schede della generazione precedente erano richieste ulteriori periferiche).
Qual è dunque il processore migliore?
Velocità di clock della CPU, numero di core e capacità del set di funzioni sono, come evidenziato nelle sezioni precedenti di questo articolo, una discriminante chiave tra la generazione Raspberry Pi originale e la "2" e "3". L'ARM11 all'interno del Modello A+ e del Modello B+ Raspberry Pi è un progetto relativamente semplice con pipeline a 8 stadi in-order, con supporto limitato per il completamento di istruzioni out-of-order, ed esegue il set di istruzioni ARMv6. Anche se la specifica prevede l'esecuzione a 700 MHz max, gli utenti riferiscono di un buon successo con l'overclocking a 800 MHz; questa particolare implementazione di core include anche l'unità a virgola mobile (FPU) opzionale dell'architettura.
Anche il successore di ARM11, l'ARM Cortex-A9 del Modello B Raspberry Pi 2, è fondamentalmente un'architettura a 32 bit. Come BMC8285, anche BMC3286 risulta spesso stabile quando in overclock, in questo caso da 900 MHz a 1,1 GHz. L'architettura ARM Cortex-A9 è sensibilmente più avanzata rispetto a quella della ARM11, offrendo una pipeline out-of-order a 8 stadi superscalare, esecuzione speculativa. La ARM Cortex-A9 esegue il set di istruzioni successore ARMv7-A; l'implementazione core presente nel BMC3286 include anche la FPU opzionale (migliorata rispetto alla versione presente in ARM11) e co-processori "NEON" SIMD. Ovviamente, il BMC3286 incorpora quattro core di processo invece di uno solo come nel BMC3285 precedente.
Infine, nel Modello B Raspberry Pi 3, vi è l'ARM Cortex-A53 quad-core. Anche in questo caso si tratta di un processore con pipeline a 8 stadi, con una pipeline di esecuzione superscalare a 2 vie, ma questa volta è un'implementazione completa a 64 bit che supporta il set di istruzioni ARMv8-A di ultima generazione. Anche in questo caso sono disponibili per l'uso i co-processori NEON SIMD e FPU (entrambi ancora una volta migliorati rispetto a quelli presenti nella ARM Cortex-A9). Inoltre, mentre il BMC3286 viene eseguito solo fino a 1,1 GHz e poi solo in una configurazione overclock out-of-spec, per il BMC3287 alcuni utenti hanno garantito che può operare a 1,2 GHz con overclock stabile fino a 1,4 GHz.
Quale processore scegliere? La risposta dipende dall'applicazione, e quindi è una scelta che spetta al lettore. Da una parte, non volete scegliere una CPU troppo lenta per le vostre esigenze, specie se avete intenzione di riservare dello spazio in vista di un'inevitabile evoluzione futura del software. Dall'altra, non è logico pagare per un processore molto più potente di quanto serve; ricordate che la vostra scelta inciderà non solo sul prezzo ma anche sul consumo energetico. Le CPU non sono l'unico motivo per cui potreste voler preferire una scheda Raspberry Pi rispetto a un'altra; dovrete considerare anche i requisiti di memoria, le opzioni di connettività di rete e altre caratteristiche.
Inoltre, velocità di clock superiori possono non avere molto senso se il vostro software rimane a lungo inattivo in attesa di ricevere degli input. Considerate poi che funzioni di architettura avanzate come il supporto superscalare e out-of-order porteranno IPC (Instructions Per Clock) molto superiori solo se nel vostro software la dipendenza fra un'istruzione e l'altra è bassa. Analogamente, una indipendenza smisurata dei thread porterà a un vantaggio di throughput limitato al meglio per una CPU multi-core rispetto alla più semplice alternativa single-core, e i vantaggi teorici del set di istruzioni a 64 bit potrebbero non venir fuori nella vostra applicazione (per non parlare del loro maggiore ingombro di memoria). Per contro, ricordate che i miglioramenti dell'AArch32 presenti nel set di istruzioni ARMv8 verosimilmente incrementeranno le prestazioni anche se ARM Cortex-A53 esegue solo codice a 32 bit.
Potenziamento della grafica
Un'altra opportunità di elaborazione su chip disponibile complica ulteriormente il processo di selezione del SoC (oppure - questo dipende dal punto di vista - lo facilita). Concettualmente, un processore grafico (o, in questo caso, un core grafico) può essere equiparato a un "motore" di elaborazione massicciamente parallela, ideale per compiti di elaborazione di pixel ma anche per varie operazioni più ampie di elaborazione dei segnali digitali e di altro tipo. La tecnica, nota come GPGPU (General-Purpose Graphic Processing Unit), sta diventando sempre più popolare ma richiede un supporto software per poter esplicare il potenziale hardware.
Purtroppo, la GPU VideoCore® IV presente in tutte e tre le generazioni di SoC Broadcom prese in esame in questo articolo non supporta (almeno fino a questo momento) OpenCL, un set di linguaggi di programmazione open standard e di API per la programmazione eterogenea mantenuta dal Khronos Group (il supporto dell'OpenCL esistente in Raspberry Pi 2 e 3 al momento è limitato alla gestione delle varie risorse della CPU). Tuttavia, quando Broadcom ha rilasciato il set completo di specifiche VideoCore IV (PDF) in forma open-source nell'ottobre del 2014, ha fornito un mezzo alternativo di accedere e gestire la GPU per usi generici.
Pete Warden (un entusiasta Raspberry Pi e anche Google Research Engineer ed ex fondatore e Chief Technology Officer di Jetpac, acquisita successivamente da Google) ad esempio, ha pensato a come utilizzare la GPU per accelerare in modo drastico le operazioni di riconoscimento degli oggetti utilizzando l'SDK Deep Belief di deep learning della sua ex società assieme a un assembler/disassembler per le QPU (unità di elaborazione quad SIMD) presenti in VideoCore IV (guardate qui questa soluzione: https://petewarden.com/2014/08/07/how-to-optimize-raspberry-pi-code-using-its-gpu/). La comunità open-source ha anche pensato a come utilizzare queste stesse QPU per incrementare la potenza di elaborazione FFT. Esistono molti altri esempi di progetti, che spesso comprendono anche codice open-source reperibile su Github. Per scoprirli, suggerisco di usare parole chiave come quelle che seguono:
- "Raspberry Pi GPGPU"
- "Broadcom VideoCore IV GPGPU"
- "Raspberry Pi OpenCL"
- "Broadcom VideoCore IV OpenCL"
Telecamere e conclusioni
Le capacità di riconoscimento di pattern di deep learning, come sottolinea un mio recente articolo (e come esemplificato dal progetto di Pete Warden), sono applicabili in particolare a diverse applicazioni di analisi delle immagini. Ma come si ottengono queste immagini nella scheda? Il Modulo telecamera Raspberry Pi (Figura 4) basato su MIPI CSI rappresenta un'opzione molto diffusa e poggia sul sensore di immagini CMOS OV05647 a 5 Mpixel di OmniVision Technologies. Ricordate che anche se il deep learning non fa per voi, le schede Raspberry Pi sono delle opzioni eccellenti per applicazioni di visione computerizzata, specie se si considera che sono state adottate con entusiasmo dalla comunità di librerie di visione computerizzata open source OpenCV.

Figura 4: Nel Modulo telecamera Raspberry Pi è integrata l'interfaccia MIPI SPI che è nativa di tutte le schede di sistema Raspberry Pi prese in esame in questo articolo; la sua risoluzione di 5 Mpixel sarà sufficiente per numerosi compiti di visione computerizzata.
Più in generale, avete a disposizione una miriade di opzioni software per adottare l'open source e da incorporare; la lunga lista presente in Wikipedia è un eccellente punto di partenza. Analogamente, anche se la simulazione software può fornire le prime informazioni su quale generazione di SoC Broadcom (e quindi su quale generazione di schede Raspberry Pi) scegliere, il costo contenuto delle schede potrebbe motivarvi ad acquistarne una per ogni versione per fare delle valutazioni pratiche personali supplementari o sostitutive; il Modello B+ Raspberry Pi, il Modello B Raspberry Pi 2 e il Modello B Raspberry Pi 3 compatibili per fattore di forma sono particolarmente idonei per scambi hardware e prove software.
Per concludere, vi incoraggio a non trascurare di divertirvi un po'! Anche se le dimensioni, la diversità e l'energia della comunità Raspberry Pi possono produrre un volume di risultati a volte travolgente, anche una piccola ricerca è in grado di scoprire rapidamente delle "perle" in grado di portare sul mercato il vostro prossimo progetto in tempi rapidi e in modo affidabile ed economicamente efficiente.
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.



