Il primo corso per tutti su ARM con la potenza dei micro Freescale.

Oggi, qui, sulle nostre amate pagine, si inaugura una nuova avventura. Dopo il corso di microprogrammazione terminato poco tempo fa e l'annuncio del seminario Freescale di qualche giorno addietro, annunciamo che questa sarà la prima di una serie di puntate in cui ci occuperemo di lavorare su di un microcontrollore a 32 bit. Quale? Quali sono le sue caratteristiche? Quali i suoi punti di forza? Che cosa ci faremo? Se tutte o anche soltanto alcune di queste domande vi sono già venute in mente, beh… l'unica cosa che dovete fare è continuare a leggere.

Sta per iniziare una nuova avventura qui sulle nostre pagine e questa avrà come protagonista una scheda Freescale, l'architettura ARM, Freescale, il suo Cortex-M0+ e tutti noi. Gli ingredienti ci sono, gli strumenti anche… Possiamo cominciare.

Come abbiamo già detto in apertura, questa prima puntata servirà da introduzione per fare in modo che tutti noi abbiamo più chiaro di che cosa parleremo. L'argomento fondamentale di oggi è l'architettura per cui cercheremo di parlare in linea generale di che cos'è ARM, da dove nasce e vedremo, più avanti, nel dettaglio, la sua struttura base, le sue caratteristiche funzionali e cercheremo di prenderci confidenza subito per poter far diventare questo corso straordinariamente pratico.

Un po' di storia

Avete mai sentito qualcuno dire che non possiamo capire chi siamo se non sappiamo qual è il nostro passato? Beh, ha ragione! E pertanto, vediamo di capire qual è il passato di ARM, da dove viene e come ha fatto ad arrivare dov'è oggi.

ARM Holdings (London Stock Exchange: ARM, NASDAQ: ARMH) è una società di alta tecnologia con sede a Cambridge, nel Regno Unito. Questa società è molto conosciuta in tutto il mondo prevalentemente per la sua linea di processori basata sull'architettura ARM. Non si tratta dell'unica attività dell'azienda, che si occupa anche di lavorare su system-on-a-chip, piattaforme hardware, infrastrutture e software sotto marchi quali RealView e KEIL. Venne fondata come joint venture tra Acorn Computers, la Apple Computer e VLSI Technology per sviluppare una linea di microprocessori RISC che, nel seguito, sono stati utilizzati da molti produttori per Application-Specific Integrated Circuit (ASIC).

La società è stata fondata nel '90 come Advanced RISC Machines Ltd ed ha vissuto una costante espansione dal '93 per diversi anni a venire. Nel '94 è arrivata nella Silicon Valley e a Tokyo mentre nel '98 si è espansa ottenendo la possibilità di entrare nel mercato degli hard disk. Cambia nome in ARM Ltd. e diventa una società quotata in borsa. Seguirono diverse acquisizioni, tra cui quella della Infinite Designs. Attualmente le sedi si trovano in diversi stati degli Stati Uniti d'America ma anche in Cina, Giappone, Norvegia, Francia e Germania.

Una storia che sfida la crisi ed i mercati globali, fatta di nuove idee e di possibilità sempre diverse su un mercato in rapida evoluzione.

Entriamo nel merito

Una caratteristica distintiva dei processori ARM, certamente una delle più importanti almeno nelle applicazioni di tipo consumer, è il basso consumo di potenza; questo li rende dispositivi molto diffusi nel mercato delle applicazioni portatili. Sappiamo bene, infatti, che la maggior parte dei dispositivi cellulari, smartphone, palmari ma anche tablet attualmente in commercio utilizzano un core ARM. Tra questi ci sono sicuramente dispositivi marchiati Nokia, Sony e Samsung ma anche Apple. E fuori dalle applicazioni "mobile", ci sono consolle Nintendo, diversi ricevitori GPS, macchine fotografiche digitali e così via dicendo.

Un aspetto importante dell'operato di ARM è rappresentato dal fatto che non produce direttamente i propri processori, a differenza di quanto fanno molti altri produttori sul mercato; la sua politica riguarda la vendita di licenze sulla tecnologia. Così tutte le società che acquistano le licenze ARM possono creare il loro processore sapendo che il prodotto finito sicuramente funzionerà ma lasciando l'azienda che ha sfornato la licenza libera dalle logiche di mercato che la costringerebbero ad entrare in diretta concorrenza con le sue clienti.
Nel 2007, stando ai dati disponibili, sembrerebbe che siano stati prodotti più di 2,9 miliardi di integrati basati su core ARM e bisogna tener conto che non era ancora avvenuto il boom di smartphone, tablet e di tutti gli altri dispositivi mobile.

Che cos'è l'ARM? Introduzione all'architettura

Come vi avevamo accennato, questa puntata sarà introduttiva ed avrà lo scopo di analizzare l'architettura, introducendo la sua struttura di base, valutandone le caratteristiche strutturali e permettendo a tutti di conoscere al meglio l'ARM. Tratteremo, quindi, l'architettura in generale e le porzioni, della stessa, che si trovano nell'M0+ di Freescale. Iniziamo subito inquadrando il problema definendo l'architettura ARM.

Che cos'è, come funziona e quali sono le sue caratteristiche principali?
Quando diciamo "architettura ARM" ci stiamo, in realtà, riferendo ad una famiglia di processori basati su un set ridotto di istruzioni (RISC) inizialmente progettate negli anni 80 e che si sono evolute fino ad oggi diventando processori a 32 bit.

Come molti già sapranno, grazie al set RISC, tutti i processori, e naturalmente anche i processori ARM, sono in grado di eseguire compiti anche piuttosto complessi impiegando un numero di istruzioni, e quindi di passi di funzionamento, significativamente inferiori rispetto ad altri, generalmente impiegati in architetture tradizionali.

Il primo esemplare è datato 1985 (ARM1) mentre ARM2 è nato l'anno successivo. Il secondo era un processore con bus dati a 32 bit, bus di indirizzi a 26 bit (in grado di indirizzare fino a 64 MB) e registri a 16/32 bit. Uno di questi aveva lo scopo di definire l'allineamento del program counter, dal momento che i primi 6 bit e gli ultimi 2 erano utilizzati come flag per specificare lo stato del processore. ARM2 era una struttura incredibilmente semplice per essere una CPU a 32 bit poichè, rispetto ai concorrenti, meno della metà dei componenti (ad esempio del Motorola 68000), conteneva cioè "solo" 30k transistor.
ARM3 venne dotato di 4KB di cache per migliorare le prestazioni.

Successivamente, Apple iniziò a lavorare alla nuova versione e da quel progetto, nel '91, nacque ARM6 ed Apple utilizzo ARM 610, processore basato su ARM6 per il modello Newton. Il core del progetto era quasi immutato rispetto alla versione 2, dal momento che non era aumentata di molto l'integrazione dei transistor (poche migliaia di più). La scelta dipendeva dal fatto che si era pensato di dotare il processore di componenti esterne opzionali al fine di mantenere la soluzione finale a più basso costo e consumo.
L'ottimizzazione per singoli compiti funzionò!

L'implementazione di maggior successo è stata di certo ARM7TDMI, utilizzato su larga scala in console portatili, cellulari e altre periferiche.

E arriviamo ai giorni nostri per raccontarvi cosa c'è (di solito) oggi dentro i nostri devices. L'architettura più comunemente supportata da Windows Mobile ed Android è ARM4. I processori XScale e ARM926 sono basati su ARMv5TE mentre gli StrongARM, gli ARM925T e gli ARM7TDMI sono basati su ARM4.
L'architettura ARM, dicevamo, è un'architettura RISC che include:

  • Architettura load/store;
  • Set di istruzioni ortogonale;
  • Numerosi registri a 16/32 bit;
  • Istruzioni a lunghezza fissa per semplificare la decodifica e l'esecuzione a costo di diminuire la densità del codice;
  • Completamento di un'istruzione per ogni ciclo di clock (situazione ideale priva di stalli );

Per rendere il tutto più interessante, versatile e funzionale, furono inserite altre features:

  • Esecuzione condizionata di molte istruzioni per ridurre salti e compensare stalli della pipeline;
  • Solo le operazioni aritmetiche possono alterare i registri delle esecuzioni condizionate;
  • Shifter a 32 bit impiegabile insieme con la maggior parte delle istruzioni senza penalizzazioni temporali;
  • Indirizzamento a indice;
  • Interrupt a 2 livelli veloce e semplice con sottosistema di registri collegati che commutano.

Il tutto accompagnato da un altro aspetto molto interessante che sono ulteriori 4 bit utilizzati per realizzare codici condizionali per ogni istruzione. Questi hanno ridotto le possibilità di indirizzo, visto che il processore non ha molti bit da specificare, ma il grande vantaggio è che questi codici permettono di evitare i salti nel caso di semplici operazioni condizionali. Ne resta un esempio il problema del massimo comun divisore mediante l'algoritmo di Euclide.

int gcd (int i, int j)
{
    while (i != j){
       if (i > j)
           i -= j; /*in forma classica i=i-j;*/
       else
           j -= i; /*in forma classica j=j-i;*/
    }
    return i;
}

In assembly ARM si ha:

loop   CMP    Ri, Rj       ; set condition "NE" if (i != j)
                            ;               "GT" if (i > j),
                            ;           or  "LT" if (i < j)
        SUBGT  Ri, Ri, Rj   ; if "GT", i = i-j;
        SUBLT  Rj, Rj, Ri   ; if "LT", j = j-i;
        BNE    loop         ; if "NE", then loop

Queste caratteristiche, tra le altre, rendono i programmi ARM tipicamente più densi degli equivalenti per altri processori ed il processore effettua meno accessi alla memoria, riuscendo anche a riempire meglio le pipeline. Tutto questo vuol dire che le CPU ARM possono utilizzare frequenze inferiori a quelle dei concorrenti consumando effettivamente meno potenza per svolgere gli stessi compiti. Un gran bel risparmio, non trovate?

Una caratteristica interessante di questi processori è che, col tempo, il set di istruzioni incrementa: i primi processori ARM (quelli antecedenti all'ARM7TDMI) non avevano, ad esempio, istruzioni per caricare quantità di profondità 2 byte, pertanto non era possibile gestire variabili di tipo short in C.

I primi processori tipo ARM7 erano basati su un disegno con pipeline a 3 stadi (quelli che tutti noi ben conosciamo): fetch, decode ed execute. I processori più moderni, come l'ARM9, per incrementare le prestazioni sono passati a pipeline a 5 stadi.

Le features

Thumb
Gli ultimi processori ARM sono dotati di un set di istruzioni a 16 bit chiamato Thumb. Esso impiega 4 bit per ciascuna istruzione. Il codice Thumb è più leggero e, naturalmente, è dotato di meno funzionalità. Ad esempio, solo i salti possono essere condizionati e alcuni opcode non possono essere utilizzati da tutte le istruzioni. Thumb resta fondamentale in sistemi con larghezza di banda limitata. Molti sistemi embedded sono dotati di un bus di collegamento alla memoria limitato e, anche se il processore è capace di indirizzare a 32 bit, spesso si utilizzano indirizzamenti a soli 16 bit o simili. Qui, Thumb ottimizza le parti di codice che richiedono molta potenza di calcolo. Il primo impiego risale all'ARM7TDMI; successivamente è stato utilizzato su tutti gli ARM9 e successivi.

Jazelle
ARM ha implementato la tecnologia per eseguire nativamente il Java bytecode, insieme con codice ARM standard e Thumb. Il supporto alla tecnologia è indicato da una "J" nella sigla, come nel caso dell'ARM926J-S. Trova impiego in tutti i dispositivi, specie mobile, per l'esecuzione di Java ME ed altre applicazioni.

NEON e VFP
La tecnologia NEON non è altro che una combinazione di istruzioni SIMD (un acronimo che sta per Single Instruction Multiple Data) a 64 e 128 bit. Lo scopo è quello di accelerare il trattamento e l'elaborazione di segnali multimediali. Questo ha notevoli applicazioni per esempio nella decodifica degli MP3. VFP è invece un'estensione dell'architettura che serve per le operazioni matematiche. Sostanzialmente si occupa di trattare dati in virgola mobile sia nel caso di singola sia nel caso di doppia precisione. L'attenzione è rivolta allo standard ANSI/IEEE Std 754-1985 Standard for Binary Floating-Point Arithmetic.

Ed ora, vediamo di farci un'idea più chiara di che cosa parleremo in questo corso.

Siamo sicuri che questa seppur ampia panoramica iniziale abbia soltanto scalfito la superficie di tutto quello che c'è da raccontare per poter fare una descrizione esaustiva e completa ma l'intero universo dell'architettura ARM è davvero difficile da descrivere in poche parole. Ecco per quale motivo il nostro corso si focalizzerà sull'ARM CORTEX-M0+ di Freescale, attualmente uno dei più interessanti soprattutto per il "power-critical design".

Il corso sarà strutturato in tre fasi diverse, all'interno delle quali questa prima puntata si colloca come l'introduzione al problema. Tra un paio di articoli saremmo già pronti ad entrare nello specifico dell'M0+ ma prima sarà indispensabile dedicare due puntate sia al confronto diretto tra l'architettura ARM 7 e ARM Cortex sia focalizzarci sulla programmazione ed il set di istruzioni. Molti dei nostri utenti, molti di noi, hanno già fatto diverse esperienze con microcontrollori ad 8 bit. Bene passare a programmare a 32 può presentare dei problemi e vale la pena di spendere del tempo per cercare di capire questo. Cosa cambia? Come? Qual è l'approccio? A queste e ad altre domande cercheremo di rispondere insieme.

Finita questa fase, inizia la seconda in cui cercheremo di andare dentro l'architettura dell'hardware analizzando anche una soluzione completa che sarà a nostra disposizione sino alla fine del corso. Stiamo parlando della FRDM-KL46Z, una piattaforma di sviluppo per Kinetis KL3x e KL4x.

Finita la fase di analisi della scheda completeremo la seconda parte del corso parlando degli ambienti di sviluppo che supportano il progettista nella programmazione sia dal punto di vista tecnico sia dal punto di vista grafico. Diverse saranno le soluzioni che realizzeremo e tutte, scopriremo, giocano un ruolo fondamentale. Stiamo parlando di CodeWarrior Development Studio ma anche di MQX Lite e Processor Expert, nomi che ai più esperti sicuramente risulteranno già familiari

La conclusione di questa fase ci avvierà verso l'ultima numerosa serie di articoli in cui analizzeremo schede tecniche, application note ed inizieremo seriamente a sperimentare per mettere a dura prova la scheda.

Come sempre, lo ricordiamo, questo blog è soprattutto di chi legge per cui se avete richieste specifiche su questo argomento potete tranquillamente farle nei commenti. Se conoscete la scheda e volete cimentarvi anche voi nella realizzazione di qualche applicazione, la terza parte del corso potrà vedere anche i vostri contributi pubblicati su queste pagine.

Ultima nota per salutarvi in bellezza: tenete bene a mente ciò che leggerete in questi articoli perchè la scheda sarà in palio per il nostro Review4U 2.0! Alla fine del contest, dunque, potrete essere in grado di sperimentare quello che avrete visto e letto, se riuscirete ad aggiudicarvela.

Alla prossima.

 

                    

Per ulteriori informazioni potete scrivere a questa email: [email protected]

Scarica subito una copia gratis

10 Commenti

  1. Avatar photo Tiziano.Pigliacelli 26 Settembre 2013
  2. Avatar photo Giorgio B. 26 Settembre 2013
  3. Avatar photo Giorgio B. 26 Settembre 2013
  4. Avatar photo Piero Boccadoro 26 Settembre 2013
  5. Avatar photo Giorgio B. 29 Settembre 2013
  6. Avatar photo delfino_curioso 2 Ottobre 2013
  7. Avatar photo Tiziano.Pigliacelli 2 Ottobre 2013
  8. Avatar photo Emanuele 2 Ottobre 2013
  9. Avatar photo Tiziano.Pigliacelli 3 Ottobre 2013
  10. Avatar photo Ivan Scordato 20 Novembre 2013

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend