La figura seguente mostra un sistema minimo realizzato con uno Z80, un integrato di memoria RAM e uno di ROM:
Per semplicità nello schema non è stato indicato il circuito per la generazione del clock e il circuito di reset (di cui già abbiamo parlato nella precedente lezione). Lo schema non presenta dispositivi di input/output. Ciò significa che il programma dovrà essere precaricato nella memoria ROM e che il nostro microcomputer non visualizza alcun risultato.
Gli integrati di memoria usati sono:
Si noti che entrambe le memorie hanno bisogno di 15 bit per gli indirizzi (infatti 215 = 32768 = 32k). Infatti i bit A0-A14 del bus indirizzi del µP sono collegati con entrambi gli integrati di memoria.
Il bit A15 invece è usato per selezionare alternativamente una delle due memorie: se A15=L viene selezionata la ROM, se invece A15=H viene selezionata la RAM (attraverso il pin di chip enable attivo basso CE presente in entrambi gli integrati). Pertanto lo spazio degli indirizzi sarà così suddiviso:
Binario | Esadecimale | Decimale | Memoria |
da 0000000000000000 a 0111111111111111 | da 0000 a 7FFF | da 0 a 32767 | ROM |
da 1000000000000000 a 1111111111111111 | da 8FFF a FFFF | da 32768 a 65535 | RAM |
In questa ipotesi di configurazione l'intero spazio di memoria indirizzabile dallo Z80 (65536 indirizzi) viene utilizzato: i primi 32768 indirizzi si riferiscono alla ROM (e dunque alla memoria che contiene il programma, le istruzioni da eseguire) e i rimanenti si riferiscono alla RAM (memoria dati). Naturalmente questa non è l'unica configurazione possibile, poiché si può suddividere diversamente lo spazio destinato ai due tipi di memorie o addirittura non usare la memoria RAM (nel caso in cui non ci sia bisogno di utilizzare un'area dati riscrivibile da programma). Non è neppure necessario che l'intero spazio di indirizzi venga allocato a una memoria fisica (una parte degli indirizzi potrebbe non essere utilizzato, ovvero non corrispondere a nessun integrato di memoria: in questo caso gli indirizzi non allocati non dovranno ovviamente essere usati all'interno del programma).
Si noti infine che la memoria ROM deve iniziare dall'indirizzo 0000, poiché dopo un RESET o all'accensione lo Z80 inizia ad eseguire l'istruzione contenuta a tale indirizzo.
Si definisce ciclo di lettura in memoria la sequenza di operazioni che il µP deve svolgere per prelevare un dato (lettura) da una memoria. Un ciclo di lettura deve rispettare un'esatta temporizzazione dei segnali, affinché il dato venga letto correttamente.
In realtà lo Z80 esegue due cicli leggermente diversi di lettura in memoria, a seconda che debba prelevare dalla memoria il codice operativo di un'istruzione oppure un dato.
Per quanto riguarda la lettura di un codice operativo, il diagramma temporale è mostrato nella figura seguente:
L'esatta sequenza dei segnali è la seguente:
Si noti che la memoria dev'essere in grado di fornire il dato sul bus dati dopo 1,5 periodi di clock, ovvero sul secondo fronte di discesa dopo l'inizio del ciclo di lettura. L'animazione della figura seguente dovrebbe chiarire la sequenza:
In generale è bene scegliere una memoria con tempo di accesso non superiore a un ciclo di clock, ad esempio, per un clock di 4Mhz la memoria dovrebbe avere un tempo di accesso non superiore a 250nS.
Un ciclo di memoria leggermente diverso viene attivato quando lo Z80 legge un dato generico (cioè non un'istruzione) dalla memoria. In questo caso il diagramma temporale è il seguente:
Notiamo che l'unica differenza sostanziale è che la temporizzazione è un po' più lenta, dal momento che il dato dev'essere pronto dopo due cicli interi di clock (rispetto a 1,5 cicli del caso precedente).
Si noti che gli ingressi di output enable (OE) di entrambi gli integrati di memoria sono attivi (livello basso) quando lo Z80 attiva in uscita entrambi i segnali RD e MREQ (uscita della porta OR). In questo modo una richiesta di lettura provoca l'attivazione, nel nostro schema, delle uscite di entrambi gli integrati di memoria (sia la ROM che la RAM). Ciò non provoca nessun conflitto sul bus, perché uno dei due integrati è sicuramente disabilitato (infatti come si è visto l'ingresso CE viene abilitato solo a uno dei due integrati alla volta, attraverso il bit A15 del bus indirizzi).
Un ciclo di scrittura è la sequenza delle operazioni che il µP compie per scrivere un dato in memoria. Il diagramma temporale è il seguente:
In questo caso la scrittura viene effettuata con la seguente temporizzazione:
L'animazione seguente dovrebbe chiarire meglio la sequenza di operazioni necessarie:
Osserviamo inoltre che per quanto riguarda la ROM l'ingresso di write enable (WE) è permanentemente disattivato attraverso un collegamento diretto a +5V. La ragione è che in questo circuito la ROM viene usata come una memoria a sola lettura, senza sfruttare la possibilità di scrittura esistente (si tratta infatti di una EEPROM, cioè una memoria riscrivibile).
Invece nella RAM l'ingresso WE viene attivato (uscita della porta OR) quando WR e MREQ sono entrambi contemporaneamente attivi.
Sito realizzato in base al template offerto da
http://www.graphixmania.it