ELEMANIA
Z80 - Lettura e scrittura in memoria
Un sistema minimo basato sullo Z80

La figura seguente mostra un sistema minimo realizzato con uno Z80, un integrato di memoria RAM e uno di ROM:

sistema minimo Z80

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.

Ciclo di lettura in memoria

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:

Lettura codice operativo

L'esatta sequenza dei segnali è la seguente:

  1. lo Z80 prepara l'indirizzo della locazione di memoria da leggere sul bus indirizzi;
  2. lo Z80 invia alla memoria i segnali RD e MREQ per indicare una richiesta di lettura;
  3. la memoria fornisce il dato richiesto sul bus dati;
  4. solo a quel punto lo Z80 può cambiare (togliere) l'indirizzo presente sul bus indirizzi.

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:

Lettura dato generico

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).

 

Ciclo di scrittura in memoria

Un ciclo di scrittura è la sequenza delle operazioni che il µP compie per scrivere un dato in memoria. Il diagramma temporale è il seguente:

Scrittura dato generico

In questo caso la scrittura viene effettuata con la seguente temporizzazione:

  1. lo Z80 prepara l'indirizzo della locazione da scrivere sul bus indirizzi;
  2. lo Z80 abbassa il segnale MREQ per indicare un'operazione in memoria;
  3. lo Z80 prepara il dato da scrivere sul bus dati;
  4. lo Z80 abbassa il segnale WR per indicare una richiesta di scrittura in memoria;
  5. la memoria legge quindi il dato presente sul bus dati.

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.

 

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it