Temporizzazioni della CPU Z80 – dispensa 4

da | Dic 8, 2023 | Hardware, Z80 | 0 commenti

Questa che vi apprestate a leggere è una dispensa e non certamente un libro e quindi non ha la pretesa di essere esaustiva e autosufficiente. Questa può essere affiancata alla documentazione che è possibile reperire facilmente sia in forma cartacea sia in forma digitale. Per la stesura di questa dispensa oltre alle ovvie informazioni che è possibile reperire in rete ho preso largo spunto dai manuali Z80 Programmazione in linguaggio Assembly e il Nuovo manuale dello Z80. Come per tutti gli altri miei articoli mi scuso di eventuali inesattezze. Buona lettura.

TEMPORIZZAZIONE DELLA CPU

Durante la progettazione della Z80 CPU sono stati definiti una serie di cicli di temporizzazione elementari, questi dettano in modo rigoroso tutte le operazioni che sono svolte per compiere un certo lavoro. DI seguito vado ad elencare e successivamente a descrivere questi cicli.

  • Lettura / Scrittura su memoria
  • Lettura / Scrittura su I/O
  • Ciclo di riconoscimento di Interrupt

Ciascuna istruzione consiste in una sequenza di queste operazioni elementari, ognuna delle quali viene eseguita in un numero di cicli di clock variabile da 3 a 6. Il periodo di clock viene chiamato ciclo T, mentre ciascuna operazione elementare viene eseguita in un ciclo di macchina M.

Diamo uno sguardo ai diagrammi di temporizzazione più importanti:

CICLO DI CARICAMENTO DEL CODICE OPERATIVO (FETCH)

Questo è il ciclo fondamentale, viene eseguito ad ogni istruzione e viene indicato come M1. Il ciclo di Fetch si divide in quattro periodi di clock. Durante il periodo T1 sul bus indirizzi viene messo il contenuto del Program Counter (PC) e il segnale M1 (attivo basso) viene attivato. Successivamente a metà del periodo, vengono attivati (sempre a livello basso) in sequenza i segnali MREQ e RD.  Durante il periodo T1 e T2 il segnale M1 rimane attivo per indicare che in questo ciclo viene letto dalla memoria il codice di una istruzione. Durante il periodo T3 e T4 la CPU decodifica l’istruzione, mentre l’indirizzo di refresh è disponibile sul bus indirizzi.

CICLO DI LETTURA O SCRITTURA SELLA MEMORIA

Come possiamo vedere il ciclo fondamentale per la lettura o la scrittura su di una memoria è composto da tre periodi ciascuno. Il ciclo di lettura è simile a ciclo di Fetch, come possiamo vedere nel periodo T1 abbiamo un indirizzo stabile sul bus indirizzi, successivamente dopo metà ciclo di clock vengono attivati i segnali MREQ e RD (attivi bassi). Come per il ciclo di Fetch anche in questo caso è possibile inserire dei cicli di WAIT. Nel periodo T3 sul fronte di discesa del clock viene campionato il dato dal bus dati. Successivamente sono disattivati i segnali MERQ e RD.

Per il ciclo di scrittura della memoria nel periodo T1 abbiamo un indirizzo valido sul bus indirizzi. A metà del periodo il segnale MREQ verrà attivato. Verso la fine di T1 abbiamo un dato valido sul bus dati. Nel periodo T2 sul fronte di discesa del clock si attiva il segnale WR (qui siamo sicuri che il dato sia stabile). Il dato rimarrà presente sul bus dati per tutto il periodo T3 e T4. Il segnale WR sarà invece disabilitato a metà del periodo T3.

CICLO DI INGRESSO USCITA DA PERIFERICA

I due cicli fondamentali per la lettura e la scrittura sono illustrati nella figura. Durante una operazione di lettura, nel periodo T1 viene stabilizzato l’indirizzo sul bus indirizzi.  I segnali IORQ e RD (attivi bassi) sono attivati sul fronte di salita di T2 e rimangono attivi fino al fronte di discesa di T3. Il dato presentato dalla periferica sul bus dati viene campionato sul fronte di discesa di T3, come per altro veniva fatto nel ciclo di lettura dalla memoria.

Durante il ciclo di scrittura i segnali IORQ e WR che indicano una operazione di scrittura verso la periferica sono come per l’operazione di lettura attivi per il periodo T2 e T3. Il dato presentato dalla CPU verso la periferica sarà disponibile per tutto il tempo in qui i segnali IORQ e WR saranno attivi. È da notare come la CPU inserisca uno periodo di attesa TW, in modo che tutta l’operazione duri quattro cicli di clock.

CICLO DI ACCETTAZIONE DI UN INTERRUPT

Il riconoscimento di una richiesta di interrupt avviene durante l’ultimo periodo T di ogni istruzione. Con il fronte di salita del clock si va a verificare che il segnale INT sia attivo (livello basso) e che non sia attivo il segnale BUSRQ e NMI (sempre attivi bassi), i quali hanno una priorità maggiore rispetto al segnale INT. Se tutte le condizioni sono soddisfatte il ciclo successivo è definito come ciclo di accettazione dell’interrupt. Questo ciclo consiste in un ciclo M1 dove invece che essere attivo il segnale MERQ, viene attivato il segnale IORQ.  Questa particolare situazione viene riconosciuta dalla periferica la quale presenta sul bus dati una parola (interrupt vector) che permette di realizzare una risposta vettorizzata all’interrupt. Questo viene campionato sul fronte di salita di T3. Il segnale di WAIT viene campionato sul fronte discesa del secondo TW, questo permette alla CPU di inserire ulteriori stati di attesa se ve ne fosse bisogno.

CICLO DI ACCETTAZIONE DEL NMI E BUSRQ

Lo Z80 è in grado di riconoscere come richieste esterne i segnali NMI e BUSRQ oltre alla richiesta del normale INT. Il segnale BUSRQ (attivo basso) è campionato durante l’ultima fase di ogni ciclo macchina. Se questo è attivo la CPU mette in stato di alta impedenza il bus indirizzi, bus dati e i segnali di controllo. In questo stato la CPU non potrà riconoscere altre richieste e si limiterà a campionare in ciascun fronte si salita del clock il segnale BUSRQ per tornare alla sua normale attività quando questo tornerà alto.

Il segnale NMI (attivo basso) viene campionato durante l’ultimo ciclo di ogni istruzione con il fronte di salita dell’ultimo ciclo T, se questo è attivo e non è attivo BUSRQ, il successivo ciclo M1 viene ignorato dalla CPU e successivamente viene accettata la richiesta di servizio come già descritto per INT.

 

Con questa dispensa si conclude la nostra introduzione alla CPU Z80. Spero che da queste siano spunto per ulteriori approfondimenti sia dal lato Hardware che Software.

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dr. Kazuhiko Nishi MSX0/MSX3 keynote

PinOut della CPU Z80 – dispensa 3

Questa che vi apprestate a leggere è una dispensa e non certamente un libro e quindi non ha la pretesa di essere esaustiva e autosufficiente. Questa può essere affiancata alla documentazione che è possibile reperire facilmente sia in forma cartacea sia in forma...

Dr. Kazuhiko Nishi MSX0/MSX3 keynote

I registri della CPU Z80 – dispensa 2

Questa che vi apprestate a leggere è una dispensa e non certamente un libro e quindi non ha la pretesa di essere esaustiva e autosufficiente. Questa può essere affiancata alla documentazione che è possibile reperire facilmente sia in forma cartacea sia in forma...

Dr. Kazuhiko Nishi MSX0/MSX3 keynote

Introduzione alla CPU Z80 – dispensa 1

Questa che vi apprestate a leggere è una dispensa e non certamente un libro e quindi non ha la pretesa di essere esaustiva e autosufficiente. Questa può essere affiancata alla documentazione che è possibile reperire facilmente sia in forma cartacea sia in forma...

it_ITIT_IT