# Personal computer/Mapping/CPU

Personal computer
* Storia dei calcolatoriPersonal computer/Storia
* Architettura del calcolatorePersonal computer/Architettura
** CPUPersonal computer/Architettura/CPU
** MemoriaPersonal computer/Architettura/Memoria
** Input/OutputPersonal computer/Architettura/IO
* Linguaggio MacchinaPersonal computer/Linguaggio Macchina
** DLXPersonal computer/Linguaggio Macchina/DLX
*** Operazioni DLXPersonal computer/Linguaggio Macchina/DLX/Operazioni
*** DLX sequenzialePersonal computer/Linguaggio Macchina/DLX/DLX_sequenziale
*** DLX in pipelinePersonal computer/Linguaggio Macchina/DLX/DLX_pipeline
** 8086-8088Personal computer/Linguaggio Macchina/8086
* Mapping di Memorie ed InterfaccePersonal computer/Mapping
** Integrati NotevoliPersonal computer/Mapping#Caratteristiche_e_funzionamento_degli_integrati_notevoli
*** DriverPersonal computer/Mapping/Driver
*** CPUPersonal computer/Mapping/CPU
*** Memoria PrincipalePersonal computer/Mapping/Memorie
*** Interfacce I/OPersonal computer/Mapping/Interfacce
** Gestione delle interfacce tramite programmaPersonal computer/Mapping#Gestione_delle_interfacce_tramite_programma
* Standard alla base di un personal computerPersonal computer/Standard
* Appendici e RiassuntoPersonal computer/Appendici
Modifica il sommario

### CPU 8088

La CPU 8088 ha parallelismo 8 bit per il bus dati e 20 bit per il bus degli indirizzi. Bus dati e bus indirizzi sono multiplexati a divisione di tempo sui primi 8 bit di indirizzo. Lo spazio di I/O è separato dalla memoria ed ha dimensioni più piccole, 64K, la memoria ne ha 1M, per cui i bit necessari per un indirizzo in I/O sono 16 e corrispondono ai 16 bit più bassi dei bit di indirizzo.
Significato dei Pin
Nella modalità minimum i pin hanno il significato fin qui descritto. Se la CPU lavora in modalità Maximum i bit da 24 a 31 assumo il significato in parentesi. Nella modalità Maximum il bus non è più controllato dai segnali DEN* DT/R* ed ALE, ma da un integrato ( 8288 ) comandato dai segnali S0-S2.

#### Cicli di bus

Il bus degli indirizzi nella CPU 8088 è diviso in tre parti, la prima (AD0 -AD7) è multiplexata in divisione di tempo con il bus dati, la seconda (A8-A15) e la terza (A16-A19) anch'essa multiplexata. Questa strategia permette l'uso più efficiente dei pin del processore, tuttavia richiede delle operazioni aggiuntive per il demultiplex.
Ogni ciclo di bus consiste almeno di quattro parti della lunghezza di un clock (CLK) denominate T1 T2 T3 T4.
L'indirizzo, sia per un ciclo di lettura che di scrittura, viene emesso durante T1, la lettura o scrittura dei dati avviene in T3, T4 e T2 servono principalmente per cambiare la direzione del bus durante le operazioni in modo da avere in T1 e T3 dei segnali stabili e non flottanti.
Nel caso in cui una lettura non sia completata tra lo stato T3 e lo stato T4 vengono aggiunti degli stati di wait TW. Ogni stato di wait è della stessa durata di un ciclo di CLK. Il segnale per indicare alla CPU l'avvenuta lettura è il READY.
Durante T1 viene emesso il segnale ALE (Address Latch Enable) ad indicare che la prima parte del bus indirizzi corrisponde effettivamente ad un indirizzo e non al bus dati.
Nel caso di operazioni I/O lo spazio di indirizzamento è più piccolo di quello della memoria, è infatti da 64K, ovvero bastano 16 bit di indirizzo, vengono usati a questo scopo i pin A0-A15, i bit A16-A19 sono al valore logico basso durante le operazioni di lettura/scrittura in I/O.

##### Lettura

Il ciclo di lettura inizia in T1 con il segnale alto ALE ed è individuato dal segnale DT/R* basso.
Durante T2 viene rimosso l'indirizzo dal bus dati che va in uno stato di alta impedenza. Viene inoltre attivato il segnale RD (essendo attivo basso diventa zero) che causa l'attivazione del driver del bus dati da parte del dispositivo indirizzato. In base al valore di IO/M* il segnale di RD* diventa sul bus comandi un MRDC* o un IORDC*.
Dopo un certo periodo (T3 ed eventuali stati TW) saranno disponibili sul bus dei dati validi e il dispositivo indirizzato attiverà il segnale di READY. Gli stati TW sono funzionalmente uguali ad uno stato T3, durante il clock di salita il processore legge il segnale READY, se questo è basso verrà aggiunto uno stato TW, se invece è alto il prossimo stato sarà T4.
In T4 il processore legge il bus dati (AD0-AD7) e riporta il RD* ad alto, immediatamente il dispositivo indirizzato entra in 3-state.

##### Scrittura

Anche un ciclo di scrittura comincia con l'attivazione di ALE e l'emissione dell'indirizzo, questa volta il DT/R* è alto ad indicare un Data Transmit ovvero una scrittura.
Durante T2, subito dopo l'emissione dell'indirizzo il processore presenta sul bus dati (AD0-AD7) i bit da scrivere nel dispositivo indirizzato. Questi dati rimangono validi fino almeno a metà dello stato T4.
Durante T2 T3 e TW il processore abilita il segnale WR* (lo porta quindi al livello basso). Questo segnale viene attivato subito durante T2 a differenza del ciclo di lettura dove il RD* viene leggermente ritardato per permettere al bus la transizione.

#### 8284

I segnali di CLK READY e RESET a causa delle loro specifiche restrittive vengono generati da un apposito integrato, l' 8284
Dal punto di vista logico l'integrato 8284 può essere diviso in tre blocchi funzionali:
* Ready Generator Dati in ingresso due segnali di ready con temporizzazioni diverse ( RDY1 e RDY2 ) i segnali AEN1* e AEN2* selezionano i rispettivi segnali di ready. Il segnale attivo basso di ASYNC* specifica se il segnale di ready deve essere sincronizzato al clock di discesa o rimanere asincrono. L'uscita di questo blocco è il segnale READY.
* Clock Generator Il clock può essere generato sia internamente (tramite i segnali che arrivano da due oscillatori collegati ad X1 ed X2) che esternamente, ad esempio tramite un altro 8284, a decidere quale modalità usare è il segnale F/C*, nel caso di sincronizzazione esterna vengono utilizzati come ingressi EFI e CSYNC. I segnali in uscita sono CLK il clock da usare per la cpu con un duty cycle del 30%, PCLK un segnale con frequenza metà di quella del CLK e duty cycle del 50%, OSC l'output da collegare ad un altro 8284 come sincronizzazione esternza.
* Reset Generator Il segnale di reset va sincronizzato con il fronte di discesa del clock per cui il reset generator ha l'unico scopo di sincronizzare il segnale RES* ricevuto in ingresso e presentare in uscita il segnale RESET
I segnali READY CLK e RESET vengono collegati direttamente in ingresso alla CPU 8088 sui rispettivi pin.

#### Circuito per la generazione del Ready

L'8284 in base ai possibili segnali ready di ingresso deve generare un segnale di ready con la giusta temporizzazione.
Ipotizziamo di poter dividere tutti i dispositivi in due gruppi che richiedono rispettivamente 2 e 3 stati di wait per completare l'accesso. Per generare i due segnali di ready RDY1 e RDY2 utilizziamo uno shift register a n uscite Q0, Q1, ..., Qn con ingressi il segnale di CLK e AEN. Lo shift register a partire dal primo clock successivo alla ricezione del segnale ALE attiva l'uscita Q0, al clock ancora successivo Q1 e così via. Per il nostro sistema i segnali utili sono Q2 e Q3 che andranno collegati all'8284 come RDY1 e RDY2.
La generazione dei segnali di selezione AEN1* e AEN2* dipende da quali sono i dispositivi che richiedono 2 piuttosto che 3 stati di wait. Se tutti i dispositivi in memoria richiedono due clock e quelli di I/O 3 allora
Se invece i dispositivi che richiedono 2 stati di wait sono gli indirizzi di memoria mappati nei 512K alti e quelli che richiedono 3 stati di wait sono nei 512K bassi e in I/O allora
Supponiamo invece di avere tre gruppi di dispositivi che richiedano rispettivamente 0, 2 e 3 stati di wait, selezionati dai segnali SEL1*, SEL2* e SEL3* allora

#### Calcolo degli stati di wait

Per il corretto funzionamento di un ciclo di lettura è necessario che la CPU campioni i dati sul registro MDR, e che il ciclo sia sufficientemente grande da permettere alla memoria di presentare dei dati validi sul bus, definendo
Dato che la CPU legge i dati dalla memoria al clock T3 (il terzo) oppure, se presenti, all'ultimo TW, indicando con n il numero di stati di wait, vale la formula
$T_{sample}=(3+n)*T_{CLCL}$
Affinché la CPU campioni correttamente i dati devono essere validi,
$T_{sample}\geq T_{datavalid}$
vanno quindi considerati i percorsi che seguono indirizzi e segnali di comando prima che i dati siano validi

##### Percorso degli indirizzi

Con
risulta $T_{datavalid}=T_{CLAV}+T_{373}+T_{DEC}+T_{acc}+T_{245}+T_{DVCL}$

##### Percorso dei comandi

Con
risulta $T_{datavalid}=T_{CLCL}+T_{CLRL}+T_{oe}+T_{245}+T_{DVCL}$
Il tempo di data valid da prendere in considerazione per il calcolo del numero di stati di wait necessari è dato dal peggiore dei due percorsi.

##### Esempio di calcolo

Consideriamo un processore 8088 ad 8Mhz ( $T_{CLCL}=1/{freq}=125ns$ ) con i seguenti valori
Il tempo minimo per avere dati validi seguendo il percorso degli indirizzi è
Tempo che richiede uno stato di wait
Seguendo il percorso dei comandi
Il tempo calcolato seguendo il percorso dei comandi non richiede stati di wait, che tuttavia sono richiesti per soddisfare il tempo di campionamento necessario seguendo il percorso degli indirizzi.

#### Temporizzazioni

CPU 8088 dal datasheet Intel
Per 373, 245 i tempi sono tipicamente
Un valore tipico per il tempo di decodifica è
I tempi di accesso ed oe dipendono fortemente dal tipo di memoria utilizzato