lunedì 27 luglio 2015

Cyclone V SoC: Ethernet senza router con DE1-SoC

La documentazione di Terasic per la DE1-SoC è ben fatta e seguendo il manuale e gli esempi si sarà in grado di programmare il processore ARM, usare l'area logica programmabile e capire l'interazione tra queste due componenti.

Sul sito web è presente un'immagine pronta all'uso di un sistema Linux Console che è possibile scrivere su una scheda MicroSD da almeno 4GB come descritto nella DE1-SoC Getting Started Guide o nel tutorial Using Linux on the DE1-SoC.

Riassumendo è necessario:
- preparare la MicroSD ed inserirla nella DE1-SoC
- impostare tutti i dip switch sul retro della scheda su OFF per configurare la FPGA dal processore ARM all'avvio
- accendere il sistema
- collegare il cavo micro USB al PC
- Utilizzare programmi come Putty per aprire un terminale con la DE1-SoC

Nell'immagine la configurazione di default (AS) della scheda una volta aperta dalla scatola e sotto le varie configurazioni possibili, da notare l'ordine [4:0] utilizzato nella tabella
 
 
L'utilizzo del cavo USB può però essere sostituito dal cavo Ethernet, che utilizzeremo anche per la comunicazione col pc nelle nostre applicazioni nei prossimi articoli. Il vantaggio principale è la maggiore velocità di comunicazione raggiungibile tramite Ethernet, la scheda supporta infatti la velocità Gigabit contro i 115200 bps della seriale.
 
Nella documentazione di Terasic, nel documento My_First_HPS, è mostrato un esempio di configurazione con router, il che toglie però un po' di praticità al tutto in quanto necessario router con alimentatore, due cavi ethernet, etc..
 
Avere sottomano un router gigabit non è poi cosa scontata vista l'ampia diffusione di router a 10/100 Mbps. E' sicuramente più comune invece avere solamente un portatile con scheda di rete Gigabit.
 
NB: Per l'utilizzo della velocità Gigabit è importante avere un cavo CAT5e o superiore di buona qualità. Cavi non adatti avranno impatto sulla velocità della comunicazione.
 

 
 
Vediamo come rendere il nostro ambiente più snello collegando direttamente il pc alla scheda con un singolo cavo ethernet.
 
Una volta collegati alla DE1-SoC da terminale (tramite USB) digitiamo:
 
vi /etc/network/interfaces
 
per editare il file di configurazione delle interfacce di rete tramite il programma testuale vi.
Ricordo che vi ha due modalità di funzionamento: inserimento e comandi.
Inizialmente il programma è in modalità comandi, premiamo "i" per passare alla modalità inserimento ed inseriamo:

iface eth0 inet static
address 192.168.0.3
netmask 255.255.255.0
broadcast 192.168.0.255

al posto di

iface eth0 inet dhcp

che possiamo semplicemente commentare ponendo il cancelletto (#) all'inizio della riga.

Dopodichè premiamo ESC per tornare in modalità comandi e scriviamo ":wq" (senza virgolette) e battiamo invio per salvare ed uscire.

Così facendo utilizzeremo un IP statico al posto di un IP dinamico che senza un router è "macchinoso" assegnare. Riavviamo tramite il comando "reboot" la DE1-SoC.

Nella scheda di rete sul pc, collegata alla DE1-SoC, impostiamo invece i seguenti parametri

 
La configurazione è terminata, adesso sarà possibile accedere alla DE1-SoC senza router tramite l'IP 192.168.0.3, tramite SSH per esempio, mentre il PC avrà IP 192.168.0.2.
 
E' naturalmente possibile adattare gli indirizzi IP in base alle proprie esigenze, è importante che non ci siano conflitti con altri indirizzi IP presenti nella vostra rete.
 
Vedremo nel prossimo articolo come configurare DS-5 per navigare il filesystem tramite SFTP ed il terminale SSH integrato per evitare di tenere aperti più programmi durante lo sviluppo, proprio con la sola connessione ethernet così configurata.

Cyclone V SoC: Gli strumenti di sviluppo per ARM

La scheda DE1-SoC come dice il nome e come abbiamo già anticipato, include un SoC (System On Chip) composto da una logica programmabile FPGA ed un processore ARM in un unico chip.


Diamo ora uno sguardo a quali sono gli strumenti di sviluppo per questo nuovo SoC.

La FPGA è programmabile come di consueto tramite Quartus II, il processore ARM necessita invece dell'installazione della SoC Embedded Design Suite (SoC EDS), una suite di sviluppo disponibile anch'essa come Quartus nella versione gratuita Web Edition o nella versione a pagamento Subscription Edition.

La differenza principale è la possibilità nella versione a pagamento di sviluppare bare-metal, ovvero di programmare il processore al livello più basso, senza un sistema operativo, e di utilizzare il compilatore di casa ARM. Generalmente se si necessità di funzionalità avanzate come la comunicazione di rete si opta per un sistema dotato di un sistema operativo, lo sviluppo bare-metal è quasi sempre relegato ad applicazioni real-time dove è necessario un determinismo maggiore.

La versione gratuita limita lo sviluppo ad applicazioni Linux/Android tramite GCC ma in molti casi questo non rappresenta un grosso limite. Lo sviluppo bare-metal di processori complessi come l'ARM Cortex A9 non è "consigliato" nei progetti più comuni mentre può avere più senso sviluppare applicazioni e driver specifici per Linux.

Per un elenco completo delle differenze tra le due versioni rimando alla pagina ufficiale.

Vediamo adesso cosa include il SoC EDS:






- ARM DS-5: l'ambiente di sviluppo basato su Eclipse che include praticamente tutto quello di cui si ha bisogno per lo sviluppo di applicazioni basate su Linux.
 
- Hardware Libraries: librerie di basso livello denominate HWLIB che contengono API per l'utilizzo dei GPIO, I2C, SPI, etc.. per il solo sviluppo bare-metal
 
- Configuration Tools: tool come il Device Tree Generator utili per il solo sviluppo bare-metal
 
- Examples: esempi, quasi tutti per lo sviluppo bare-metal.
 
Come è possibile intuire utilizzeremo sostanzialmente il solo ARM DS-5 con il compilatore GCC incluso nell'installazione.

L'utilizzo del compilatore GCC in ambiente Windows non è consigliato da Altera e presenta problemi non presenti nella versione Linux. Ad esempio nella versione attuale (GCC 4 inclusa in DS-5) si hanno problemi di compilazione con programmi contenenti istruzioni NEON. E' quindi consigliabile innanzitutto installare SoC EDS su un sistema Linux in caso di problemi.

E' da notare che è possibile utilizzare il compilatore gratuito GCC per lo sviluppo bare-metal anche senza l'utilizzo di DS-5, tramite makefile per esempio, anche se vedremo solamente lo sviluppo di applicazioni Linux sul processore ARM, lasciando a chi volesse intraprendere lo sviluppo bare-metal alla corposa documentazione disponibile.

venerdì 3 luglio 2015

FPGA: Cyclone V SoC e DE1-SoC

La DE1-SOC è una scheda di sviluppo prodotta da Terasic per poter progettare rapidamente con le FPGA Cyclone V SE con processore ARM Cortex-A9 dual-core di cui parleremo ancora prossimamente.



La nuova serie Cyclone V è divisa in ben sei varianti diverse:


La dev-board in oggetto è equipaggiata col modello 5CSEMA5F31C6 di cui sono riportate sotto le risorse principali:


Come abbiamo visto nell'articolo precedente in questa nuova serie di FPGA le risorse logiche sono rappresentate in prima istanza dagli ALM, seppur vengano ancora riportati i LE per un confronto rapido con le vecchie serie.

Rispetto alla scheda DE0-Nano, utilizzata nei precedenti articoli, abbiamo risorse logiche quasi quattro volte maggiori (22k LE contro 85k LE), per design di complessità maggiore.

La memoria integrata nelle FPGA (SRAM) sta rapidamente aumentando generazione dopo generazione, ne troviamo a disposizione 4450 Kbit (0.5 MBytes circa) tra blocchi M10K e MLAB.

I blocchi M10K sono blocchi di memoria dedicati da 10 Kbit mentre il 25% degli ALM è configurabile come memoria distribuita (similarmente a quanto avviene nelle FPGA Xilinx) usando gli MLAB da 640 bit.

Facendo un rapido conto 480 Kbit di MLAB totali vogliono dire 768 MLAB da 640 bit, il 25% degli ALM è circa 8018 ALM, quindi approssimando un MLAB è realizzato da fino a 10 ALM, come infatti viene descritto nella documentazione. Quindi ogni ALM "ibrido" contribuisce con ben 64 bit, rispetto ai 4 bit presenti negli ALM "ordinari".

Rispetto alla serie Cyclone IV gli MLAB (già presenti su altre serie di fascia più alta) sono una interessante novità per ottimizzare la creazione di piccole memorie come registri a scorrimento, piccole FIFO, etc.

Continuando la lettura della tabella ogni Variable-precision DSP può implementare due moltiplicatori a 18x18 bit con accumulatore, ma può essere configurato anche diversamente, per implementare un singolo moltiplicatore 27x27 bit con accumulatore ad esempio. Anche in questo caso il numero di moltiplicatori 18x18 è riportato per confrontare rapidamente il dispositivo con vecchi modelli.

Con HPS si intende Hard Processor System, ovvero il processore ARM integrato. Il vantaggio principale rispetto a soluzioni discrete (ovvero un chip per la FPGA ed un chip per il processore ARM, collegati tramite piste su pcb) è sicuramente la riduzione del BOM (Bill of Materials) ma anche sotto il profilo prestazionale una connessione molto veloce tra la FPGA e l'ARM con bande fino a 128 Gbps di picco.

Seppur l'integrazione comporti risparmi sul fronte economico ed energico un possibile svantaggio è la riduzione dell'area dissipabile termicamente. Con due package è possibile montare due sistemi di dissipazione del calore distanti e quindi non interferenti significativamente, ad esempio due dissipatori passivi se il calore generato non è molto, mentre con un unico package lo spazio è minore e quindi le difficoltà ad estrarre il calore sono maggiori. Resta da valutare per la propria applicazione quindi se il power-saving e quindi il minor calore generato dovuto all'integrazione riesce a compensare la maggior difficoltà di mantenere il chip nelle migliori condizioni operative.

HPS e FPGA sono messi in comunicazione tramite dei canali dedicati, alcune risorse come alcuni PLL, I/O e Hard Memory Controller sono collegati direttamente all'HPS, altri alla parte FPGA del chip come è possibile notare dalla tabella sopra.

Ricordo però che tramite i canali di comunicazione è possibile però sfruttare ad esempio gli I/O HPS dalla parte FPGA, anche se ciò richiede un'apposita configurazione.

Lo standard LVDS o comunque gli altri standard differenziali purtroppo non sono utilizzabili in modo sicuro su questa scheda di sviluppo perché la tensione degli I/O, VCCIO, è fissata a 3.3v mentre lo standard LVDS prevede solamente tensioni da 2.5v, per comunicazioni seriali ad alta velocità è necessario guardare ad altre schede di sviluppo, con connettori appositi per l'alta velocità, resistenze di terminazione, linee con impedenze controllate, etc..

Lo speed-grade della FPGA è il più veloce (-6), ideale per ridurre le problematiche di tempistiche e creare design ad elevate frequenze.

Come abbiamo potuto accennare nel precedente articolo la dissipazione del calore può presentare un problema, un semplice design di esempio (come un semplice sommatore ad 8 bit) mostra infatti una Core Static Thermal Power Dissipation stimata in condizioni tipiche di circa 411 mW mentre nelle condizioni peggiori 538 mW.

La scheda prevede il montaggio di un dissipatore con eventuale ventola tramite due fori posti a circa 55 mm lungo la diagonale del chip principale.

E' anche predisposta per un connettore a 3 pin per il collegamento della ventola, di cui però solamente due sono collegati come mostra lo schema seguente.




Dove DNI indica Do Not Installed, ovvero il componente non è presente ma è possibile acquistarlo ed aggiungerlo in quanto predisposto il pcb.

SM2T3V3A è un diodo di protezione TVS unidirezionale, per cortocircuitare a massa segnali con tensioni al di fuori del range [-0.3v,3.6v] circa che potrebbero danneggiare la delicata FPGA.

FDV305N è un NMOS utilizzato in saturazione (come interruttore) per accendere e spegnere la ventola dalla FPGA.

Visto il calore che anche i design di prova forniti da Terasic generano ho provveduto subito al montaggio di un dissipatore con ventola per rimanere sul lato sicuro.

Per non invalidare la garanzia o comunque avere possibili problemi nella sostituzione visto che la scheda è arrivata da poche settimane, non ho installato il connettore ed i componenti aggiuntivi per collegare la ventola ma ho preferito alimentarla esternamente quando necessario.

Il vantaggio è anche che così facendo è possibile regolare la tensione della ventola e non è necessario modificare i progetti pre-esistenti per l'attivazione del pin della ventola se necessario.

Sotto un immagine del risultato finale ed alcuni consigli


- Montando due piccoli distanziali aggiuntivi sul lato inferiore del PCB (sono presenti solo 4 distanziali inferiori) è possibile aumentare la resistenza meccanica della scheda. Porre comunque leggerezza durante operazioni di avvitatura/svitatura. 

- Tra FPGA e dissipatore stendere un sottile strato di pasta termoconduttiva di buona qualità

- Per rimuovere il dissipatore dopo aver rimosso i push-pin non tirarlo verso l'alto ma farlo ruotare per staccare la pasta termoconduttiva, per evitare di esercitare pressioni tali da rompere il package della FPGA.

- Per non perdere di estetica e mantenere la possibilità di installare il pannello in plexiglass sostituire i quattro distanziali superiori (stand-off) con alcuni leggermente più alti in base all'altezza della ventola. Ho utilizzato una ventola con dissipatore a basso profilo per far rientrare comunque il tutto nella busta antistatica e nella scatola originale .

- Porre attenzione alla pressione esercitata da dissipatori con push-pin, regolare le molle per non applicare tensioni fuori dalle massime supportate dal package BGA.

In alternativa è possibile utilizzare dei dissipatori passivi generici (senza ventola), magari a basso profilo se adeguati alla dispersione del calore prodotto, con un thermal pad per una rapida sostituzione.

Ho inoltre applicato un piccolo dissipatore (7x7x4mm) sul piccolo integrato che è possibile vedere in foto sopra. Si tratta dell'Ethernet transceiver siglato ksz9021rl che durante l'utilizzo intensivo con trasmissioni Gigabit Ethernet diventa discretamente caldo.

Buona sperimentazione in sicurezza.