# ARM Cortex

LARM Cortex è una famiglia di microprocessori presentata nel 2005 da ARM Holdings e basati sul set di istruzioni ARMv7.
La famiglia Cortex è formata da una serie di blocchi funzionali che possono essere collegati tra loro al fine di soddisfare le esigenze dei clienti, quindi uno specifico processore Cortex non ha necessariamente tutte le unità funzionali della famiglia. I processori Cortex sono disponibili in configurazione a singolo core o multicore e per ogni famiglia esistono più core con prestazioni diverse.
Rispetto alla versione 6 la famiglia Cortex introduce le seguenti novità:
* L'unità NEON sviluppata per eseguire operazioni SIMD su vettori di 64 o 128 bit. L'unità è dotata di registri dedicati ed i vettori possono contenere numeri interi a 16 o 32 bit o numeri in virgola mobile a singola precisione a 32 bit. L'unità opera in parallelo alla pipeline principale, la pipeline principale interviene solo durante il caricamento delle istruzioni da eseguire.
* L'unità in virgola mobile VFPv3 raddoppia i registri della precedente versione portandoli a 32 e introduce alcune nuove operazioni.
* Il set di istruzioni Thumb-EE è un derivato del set di istruzioni Thumb-2 ed è nato per sostituire le istruzioni Jazelle. Queste istruzioni vengono utilizzate per accelerare l'esecuzione di codice eseguito da macchine virtuali come quello richiesto dal linguaggio Java.
* TrustZone è una modalità di esecuzione sicura nata per permettere l'esecuzione di codice sicuro o per eseguire meccanismi di digital rights management (DRM).
La famiglia Cortex è suddivisa nella serie A (Application), la serie R (Realtime), la serie M (Microcontroller) e la serie SecureCore.
* La serie A è la serie indirizzata ai computer, telefoni cellulari evoluti e più in generale le applicazioni che necessitano di potenza di calcolo e flessibilità. Questa è la serie più completa e oltre al set di istruzioni classico ARM gestisce le istruzioni Thumb-2, Thumb-EE, include le unità Vector Floating Point (unità di calcolo in virgola mobile) e NEON (unita SIMD). Il processore è dotato di cache di primo e secondo livello, PMMU e tecnologia TrustZone.
* La serie R è sviluppata per applicazioni realtime, il set di istruzioni Thumb-2 è presente, le istruzioni Vector Floating Point sono opzionali e la cache è configurabile. La protezione della memoria è presente opzionalmente tramite la MPU, un'unità più limitata della PMMU.
* La serie M è la serie più ridotta, sviluppata per l'uso nei microcontrollori. Implementa solamente il set di istruzioni Thumb-2, la cache non è presente e la MPU è opzionale.
* La serie SecureCore derivata dalla serie M e utilizzata per applicazioni di sicurezza, tipo Smart card.
La famiglia Cortex A è stata sviluppata al fine di ottenere prestazioni elevate e consumi ridotti. I processori di questa serie si suddividono in tre core, il core 5, 8 e 9. Il core 5 ha una pipeline a 8 stadi, il core 8 ha due pipeline a 13 stadi e il core 9 ha due pipeline a 8 stadi. Le pipeline dei primi ARM erano a 3 stadi e in seguito sono state sviluppate unità fino a 9 stadi. Lo sviluppo di un processore a 13 stadi si è reso necessario per innalzare la frequenza di funzionamento del processore. Al fine di evitare che i salti condizionati deprimessero eccessivamente le prestazioni per via della pipeline lunga tutti i core implementa un'unità di predizione delle diramazioni che secondo le dichiarazioni del costruttore predice correttamente il 95% dei salti. Il processore al fine di non richiedere un numero eccessivo di transistor non implementa nel core 8 l'esecuzione fuori ordine delle istruzioni, mentre il core 9 introduce anche questa caratteristica, il core 3 avendo una sola pipeline non può eseguire più di un'istruzione per ciclo di clock. Nel core 8 la prima istruzione viene caricata dalla prima pipeline, la seconda istruzione viene caricata dalla seconda pipeline; nel caso di vincoli l'istruzione vincolata viene bloccata fino a quando l'altra istruzione non è completata e quindi il vincolo è risolto. Le pipeline sono indipendenti ed equivalenti, tranne per l'operazione di moltiplicazione che può essere eseguita solo dalla prima pipeline. Questo normalmente non è un grave vincolo dato che le operazioni di moltiplicazioni sono normalmente rare. Il core 9 gestendo l'esecuzione fuori ordine analizza il codice e ricerca due istruzioni non vincolate per eseguirle in parallelo, fornendo prestazioni migliori del core 8. Il core 9 gestisce anche la ridenominazione dei registri al fine di ridurre i vincoli e migliorare l'esecuzione parallela delle istruzioni. I core 5 e 9 possono essere assemblati in integrati che possono contenere fino a 4 core.