Pentium 4

Il Pentium 4 è un diretto discendente della CPU 8088 utilizzata nei primi PC IBM e opera ad una frequenza di clock fino a 3,2 GHz. Contiene 55 milioni di transistor e la larghezza di linea ovvero la distanza tra transistor è di 90 nm ( 0,09 micron ).

È in grado di scambiare dati con la memoria a 64-bit ma dal punto di vista software, il programmatore vede una macchina a 32-bit, che quindi è compatibile con i vecchi software scritti per 80386, 80486, Pentium ed etc.
Microarchitettura
Il Pentium 4 ha una microarchitettura - NetBurst - diversa dai suoi precedessori :
- dotata di pipeline più “profonda”
- 2 ALU che funzionano alla doppia frequenza di clock per permettere due operazioni per ciclo
- supporta hyper-threading
- permette al chip di alternare l’esecuzione di due programmi molto velocemente, come se avesse fisicamente due CPU
Cache
Alcuni modelli hanno una cache a 2 o 3 livelli, mentre in tutti è presente una cacheSRAM di primo livello ( L1 ) da 8 KB. Quando le istruzioni vengono prelevate dalla memoria, vengono convertite in micro-operazioni. Inoltre la cache L1 può contenere fino a 12.000 micro-operazioni già decodificate.
La cache di secondo livello ( L2 ) è in grado di memorizzare fino a 1 MB, dove vengono memorizzati i byte della memoria, il codice e i dati. Il Pentium 4 Extreme Edition ha anche 2 MB per la cache di terzo livello ( L3 ).
Siccome tutti i chip hanno almeno 2 livelli di cache, nei sistemi multiprocessore sorge un problema, ovvero che nel momento in cui una CPU modifica una word nella propria memoria cache, e dato che non viene aggiornato immediatamente in memoria, un’altra CPU potrebbe leggere quella parola non aggiornata dalla memoria. La soluzione è che ogni CPU effettua unosnooping( "ficcanaso" ) sul bus della memoria per cercare un eventuale riferimento alla word che ha nella propria cache. Quando vede un tale riferimento si intromette nel bus fornendo il dato giusto prima della memoria.
Bus
Nei Pentium 4 si utilizzano due principali bus sincroniesterni :
- bus della memoria per accedere alla DRAM ( oppure SDRAM ) centrale
- bus PCI per comunicare con i dispositivi I/O
Potenza e calore
Un problema dei chip moderni riguarda la quantità di potenza che consumano e di calore che producono; il Pentium 4 consuma 63-82 watt a seconda della frequenza. Intel infatti è costantemente alla ricerca di modi per gestire il calore. Infatti Intel ha dotato le CPU di un modo per "riposare" quando sono inattive e di entrare in un "sonno profondo" quando è probabile che resteranno inattive per tot di tempo. Esistono 5 stati possibili :
- stati intermedi : alcune funzionalità come lo snooping e la gestione degli interrupt sono disabilitate
- stato di sonno profondo : la cache e i registri rimangono preservati, ma il clock e tutte le unità interne sono disabilitate. Per svegliarla basta un segnale hardware
Disposizione logica dei pin

Il Pentium 4 ha 478 pin :
- 198 utilizzati per i segnali ( alcuni segnali logici utilizzano due o più pin il numero di segnali distinti è 56 )
- 85 per l’alimentazione ( con diverse tensioni )
- 180 per la massa
- 15 per utilizzi futuri
Siccome i chip oggi sono progettati al calcolatore occorre rappresentare i nomi dei segnali in ASCII e quindi metterci una linea sopra per indicare che è asserito con valore basso è complicato, quindi si aggiunge
#alla fine del nome del segnale.Ps: utilizzerò d’ora in poi anche io questa notazione per comodità
Esaminando i segnali dell’arbitraggio del bus :
BR0#: richiesta del busBPRI#: richiesta del bus ad alta prioritàLOCK#: bloccare il bus e indicare che è occupato
Dopo che una CPU o un altro master ha acquisito il bus, può effettuare una richiesta sul bus utilizzando il successivo gruppo di segnali :
A#: 36 bit di indirizzamento, ma 3 bit meno significativi valgono sempre 0, non hanno contatto e quindiA#ha solo 33 di pinADS#: viene asserito quando viene scritto un indirizzo sul bus, per comunicare alla destinazione ( es. memoria ) che è roba validaREQ#: specifica il tipo di operazione ( lettura/scrittura )- 2 linee di parità proteggono
A#eREQ#
Le 5 linee degli errori sono utilizzate per riportare errori :
- calcolo floating-point
- interni
- controlli macchina ( hardware )
- altro tipo generico
Il gruppo dei segnali di riposta contiene i segnali utilizzati dallo slave per restituire un risultato al master :
RS#: codice statoTRDY#: indica che lo slave è pronto per accettare dati dal master- segnali per il controllo di parità
BNR#: asserisce uno stato di attesa quando lo slave non è in grado di rispondere in tempo
L’ultimo gruppo è utilizzato per il trasferimento effettivo dei dati :
D#: per inserire 8 byte di dati nel busDRBY#: quando i dati sono pronti sul bus viene asseritoDSBY#: comunicare a tutti i dispositivi che il bus è occupato dai dati
L’input RESET# serve per il reset della CPU.
È possibile configurare il Pentium 4 in modo che utilizzi gli interrupt ( come 8088 per retro-compatibilità ) oppure secondo una modalità che utilizza un dispositivo chiamato APIC ( Advanced Programmable Interrupt Controller ).
Pipeline sul bus di memoria del Pentium 4
Siccome le CPU moderne ( come il Pentium 4 - non è moderno moderno ma tolleriamo ) sono molto più veloci rispetto alle moderne memorie DRAM, bisogna evitare che la CPU rimanga in attesa, è fondamentale ottenere dalla memoria il massimo throughput possibile.
Per questa ragione il bus di memoria del Pentium 4 è strutturato a pipeline ( fino a 8 transazioni contemporaneamente ).
Per consentire l’uso della pipeline, le richieste di memoria - chiamate transazioni - sono composte da 6 stadi :
- fase di arbitraggio del bus : determina chi diventa master del bus ( CPU o altro dispositivo )
- fase di richiesta : il master inserisce gli indirizzi sul bus
- fase di segnalazione dell’errore : lo slave segnala errori
- fase di investigazione ( snoop ) : per verificare la coerenza con la cache ( solo nei multiprocessori )
- fase di risposta : lo slave comunica se può soddisfare la richiesta
- fase dei dati : trasferimento dei dati effettivo Non tutte le fasi sono necessarie per ogni transazione, e ogni fase è indipendente perche utilizza diversi segnali del bus.

Grazie a questa pipeline, il bus è sfruttato meglio: anziché restare inattivo durante l’attesa della memoria, viene utilizzato per avviare altre richieste, aumentando il throughput complessivo.
Intel Core i7
Macchina a 64-bit, ed anche esso è un diretto discendente della CPU 8088 ed è stata introdotta nel 2008 come :
- CPU a 4 processori ( ora venduta dai 2 ai 6 processori )
- 731 milioni di transistor
- frequenza di 3,2 GHz
- larghezza di linea di 45 nanometri
A livello utente ha tutte le funzionalità ISA dei modelli precedenti e ha gli stessi registri, le stesse istruzioni e la stessa implementazione dello standard IEEE 754 interamente sul chip, inoltre ha alcune nuove istruzioni dedicate alla crittografia.
Le singole CPU sono hyperthreaded ( multithreading simultaneo ) ovvero che possono essere attivi in parallelo diversi thread hardware sulla stessa CPU. Questo meccanismo permette di tollerare latenze molto brevi (tempi morti), come un fallimento d’accesso alla cache (cache miss che porta ad aspettare).
Cache
Ha 3 livelli di cache :
- cache dati di livello 1 ( L1 ) da 32 KB
- cache istruzioni di livello 1 ( L1 ) da 32 KB
- cache di livello 2 ( L2 ) unificata ( misto di dati e istruzioni ) da 256 KB
- tutti i core condividono una cache unificata di livello 3 da 4-15 MB ( secondo il modello del processore )

Siccome ogni chip Core i7 contiene più processori con un cache privata, sorgono i problemi di aggiornamento dove un dato che è presente in due cache private di due processori non viene aggiornato in tutte e due. Infatti ogni CPU effettua uno snooping sul bus delle memoria per cercare eventuali riferimenti alle word memorizzate nella propria cache.
Bus
Nel Core i7 si utilizzano due principali bus sincroni esterni :
- bus di memoria DDR3 : per l’accesso alla memoria centrale DRAM
- bus PCI Express : per connettersi ai dispositivi I/O
UltraSPARC III
La famiglia di CPU Sun UltraSPARC ( da Sun Microsystem e dal 2010 acquistata da Oracle ), è composta da processori a 64 bit, utilizzati in server e workstation Sun. Il processore UltraSPARC III è una macchina RISC ( Pentium 4 è CISC ) ed è compatibile con la precedente architettura SPARC Version 8 a 32-bit. Si distingue dall’architettura SPARC V9 con aggiunta di istruzioni per applicazioni grafiche 3D, istruzioni per l’esecuzione di programmi Java.

Il processore UltraSPARC III nel 2002 ( prodotto dalla Texas Instrument ) aveva :
- velocità di clock 1,2 GHz
- 29 milioni transistor
- larghezza di linea di 0,13 micron
- richiedeva 50 watt di potenza (stessi problemi del P4)
- 6 pipeline interne
È difficile paragonare un chip CISC ( Pentium 4 ) a un RISC ( UltraSPARC III ) basandosi solamente sulla velocità di clock. Infatti UltraSPARC III può lanciare 4 istruzioni per ciclo di clock, quasi come una CPU a 4,8 GHz.
Bus
- bus indirizzi ( address ) è largo 43-bit che consente di gestire fino a 8 TB di memoria centrale
- bus dati è largo 128-bit e permette di trasferire tra la CPU e la memoria, 16 byte alla volta
- velocità del bus di 150 MHz che corrisponde ad una larghezza di banda di 2,4 GB/s nel collegamento con la memoria, molto più rispetto ai bus PCI da 528 MB/s
Cache & UPA & Caratteristiche principali di un sistema UltraSPARC III
L’ UltraSPARC III ha :
- cache L1 interna da 32 KB per le istruzioni
- cache L1 interna da 64 KB per i dati
- cache “accessorie” di prefetch da 2 KB
- cache “accessorie” di scrittura, per raccogliere le scritture verso una cache L2, migliorando l’utilizzo della banda (invece di scrivere immediatamente ogni singola parola in L2, le scritture vengono accumulate nella cache di scrittura e poi trasferite in blocco, riducendo il traffico sul bus)
- cache L2 esterna al chip
Inoltre il controllore della cache e i componenti logici per localizzare i blocchi della cache sono sul chip, al contrario della memoria cache che è esterna ( a differenza del P4 ). In questo modo i progettisti non sono vincolati dalla CPU e possono scegliere un qualsiasi chip di cache.
Per consentire che più CPU UltraSPARC comunichino con più memorie, Sun ha sviluppato UPA ( Ultra Port Architecture ). Questa architettura può essere realizzata come un bus, uno switch o come entrambi ( uno standard flessibile ).

La figura mostra il nucleo di un sistema UltraSPARC III dove sono presenti :
- chip della CPU
- interfaccia UPA : per interfacciarsi con la memoria principale
- cache di secondo livello ( due SRAM )
- chip UDB II ( UltraSPARC Data Buffer )
Per richiedere una word dalla memoria :
- CPU la cerca in una delle proprie cache ( interne ) L1
- se la trova, continua alla massima velocità
- altrimenti cerca in cache L2
Vediamo ora come sonostrutturate le memorie cache :
- memoria centrale è suddivisa in linee di cache ( dette blocchi ) da 64 byte, quindi quando viene caricata una word, viene caricato un blocco intero
- CPU ha due cache L1 dove ci sono ( maggiormente utilizzati )
- 256 blocchi di istruzioni
- 256 blocchi di dati
- nella cache L2 si trovano altri blocchi di cache che non sono nelle cache L1 ( dati e istruzioni mischiati )
- siccome sono mischiati, il sistema deve tener traccia, questa informazione la tiene la seconda SRAM ( con tag )
Quindi quando un blocco di cache non si trova neanche nella cache L2, bisogna prelevare dalla memoria principale attraverso l’interfaccia UPA.
Chip 8051
Info
Sia il Pentium 4 che l’ UltraSPARC III sono CPU progettate per PC e server veloci. Esiste tuttavia anche un’altro mondo di calcolatori : sistemi integrati ( o sistemi embedded ) che possiamo trovare dentro televisori, elettrodomestici, stampanti etc. Il costo di questi “calcolatori” è economico, siccome non abbiamo bisogno di elevate prestazioni, questo porta a dei compromessi diversi dalle CPU studiate fino ad ora.

Il microcontrollore 8051 è il più diffuso per il suo basso costo.

Il contenitore del chip ha 40 pin :
- con 16 bit ( linee ) di indirizzo, quindi è possibile indirizzare fino a 64 KB di memoria
- con 8 bit per il bus dati, quindi i trasferimenti CPU-memoria avvengono un byte alla volta
- a differenza del P4 e UltraSPARC III, il chip ha 32 linee di I/O ( per LED, pulsanti … ), organizzate in 4 gruppi da 8 bit ciascuno
- 4 KB di ROM interna, e se insufficiente è possibile collegare al bus fino a 64 KB di memoria esterna
Vediamo ora la disposizione logica dei pin : review

- 7 segnali servono per interfacciarsi ad eventuali memorie esterne :
A: 16 linee d’indirizzo per indirizzare i byte della memoria esternaD: 8 linee per il trasporto dei datiRD#: asserito se si leggeWR#: asserito se si scriveALE: Address Latch Enable, utilizzato in presenza di una memoria esterna, per indicare che l’indirizzo è validoPSEN#: Program Store ENable, asserito per indicare che il chip vuole leggere dalla memoria che contiene il programmaEA#: External Access, può essere collegato :- alto : usare sia la memoria interna sia quella esterna
- basso : usare solo la memoria esterna
Timer: per collegare 2 timer esterni ( es. sensore ) ( 2 clock )Interrupt: consentono di interrompere la CPUTXD,RXD: per collegamento seriale I/O verso un terminale o un modem ( uscita TXD e ingresso seriale RXD )RST: reset CPU- 4 porte : ognuna bidirezionale ( può essere scritta e letta dal programma ) ed è la principale interazione con il mondo esterno
