Macchina a stati finiti DMAC
(c’è una sola periferica bidirezionale: DISCO)
1. I/O dalla memoria al disco in modalità Burst
2. I/O dalla memoria al disco in modalità Bus Stealing 3. I/O dal disco alla memoria in modalità Burst
4. I/O dal disco alla memoria in modalità Bus Stealing
NOP
START=1 ?
NOP
Periferica Pronta?
DMAC
SI NO
SI NO
START SELECT I/O
I/O WR
Programmazione del DMAC
sono comandi dati a livello software Dal PD 32
Il DMAC controlla che la periferica
non sia già impegnata con altre
operazioni di I/O
Macchina a stati finiti DMAC
I/O FF=1
?
DMAC
B-ST = 1?
B-ST = 1?
SI NO
SI NO SI NO
L’SCO del DMAC legge il valore del Flip Flop SR I/O:
-Se è 0 è un’interazione da disco verso la memoria
-Se è 1 è un’interazione dalla memoria al disco
L’SCO legge il valore del Flip Flop SR Burst Bus – St:
-Se è 0 si tratta di un uso del Bus di tipo Burst
-Se è 1 si tratta di un uso del Bus di tipo Burst Stealing
*si tratta di controlli implementati a livello Firmware ( 1 )
( 2 ) ( 3 )
( 4 )
Macchina a stati finiti DMAC
(1) Trasferimento da disco a memoria di tipo Burst 1 di 2
Dato Pronto=1
DMAC
SI NO
Dato Letto=1 Nop
MBG = 1
SI NO
MBR = 0
Bcar = 1 Bout = 1 MWR = 1 Mbi = 1 ,
i=1..4 SI
Lo SCO del DMAC invia allo SCO della periferica il segnale “Dato Letto”
Subito dopo lo SCO del DMAC si mette in ascolto del segnale
“Dato Pronto”, il quale verrà posto ad uno dalla periferica quando sarà pronto il dato da lei generato.
Viene richiesto il bus al Processore, da parte del DMAC, attraverso Il Memory Bus Request, funzionante in logica negata
Si attende che il PD32 abbia messo le sue uscite in alta impedenza, Il tutto avviene quando il segnale Memory Bus Grent, ascoltato dal DMAC, è posto ad uno dal PD32
Questa serie di segnali di controllo generati dal SCO del DMAC servono per scaricare i 30 bit dal CAR e i 32 del registo di out della periferica nella memoria.
Settare i quattro segnali Mbi, i=1,..,4 significa ipotizzare di scrivere simultaneamente 4 Byte allineati in memoria
Macchina a stati finiti DMAC
(1) Trasferimento da disco a memoria di tipo Burst 2 di 2
WC = 0
DMAC
SI NO
Inc = 1 Dec = 1
Dato Pronto=1 NO
Nop Dato Letto = 1
SI
Rstart = 1 MBR = 1
Una volta effettuato il trasferimento viene incrementato di 4 il registro CAR e decrementato di 4 il registro WC
Si verifica se il World Counter è divenuto 0:
Se si il lavoro del DMAC è finito
Se no ci sono ancora dati da trasferire
Chiedo alla periferica di generare l’n-esimo dato
Lo SCO del DMAC si mette di nuovo in ascolto del segnale
“Dato Pronto”, il quale verrà posto ad uno dalla periferica quando sarà pronto il nuovo dato da lei generato.
Se il trasferimento è completato il DMAC rilascia il bus, il Processore si risveglia e continua il suo lavoro…
Resetta il Flip Flop SR “START”
Macchina a stati finiti DMAC
(2) Trasferimento da disco a memoria di tipo Burst Stealing 1 di 2
Dato Pronto=1
DMAC
SI NO
Dato Letto=1 Nop
MBG = 1
SI NO
MBR = 0
Bcar = 1 Bout = 1 MWR = 1 Mbi = 1 , i=1..4 NO
Lo SCO del DMAC invia allo SCO della periferica il segnale “Dato Letto”
Subito dopo lo SCO del DMAC si mette in ascolto del segnale
“Dato Pronto”, il quale verrà posto ad uno dalla periferica quando sarà pronto il dato da lei generato.
Viene richiesto il bus al Processore, da parte del DMAC, attraverso Il Memory Bus Request, funzionante in logica negata
Si attende che il PD32 abbia messo le sue uscite in alta impedenza, Il tutto avviene quando il segnale Memory Bus Grent, ascoltato dal DMAC, è posto ad uno dal PD32
Questa serie di segnali di controllo generati dal SCO del DMAC servono per scaricare i 30 bit dal CAR e i 32 del registo di out della periferica nella memoria.
Settare i quattro segnali Mbi, i=1,..,4 significa ipotizzare di scrivere simultaneamente 4 Byte allineati in memoria
Macchina a stati finiti DMAC
(2) Trasferimento da disco a memoria di tipo Burst Stealing 2 di 2
WC = 0
DMAC
Inc = 1 Dec = 1
NO
SI
Rstart = 1 Sint = 1 MBR = 1
Una volta effettuato il trasferimento viene incrementato di 4 il registro CAR e decrementato di 4 il registro WC
Un trasferimento è completato il DMAC rilascia il bus , il Processore si risveglia e continua il suo lavoro…
Resetta il Flip Flop SR “START”
Avvisa il PD32 di aver finito generando un Interrupt Si verifica se il World Counter è divenuto 0:
Se si il lavoro del DMAC è finito
Se no ci sono ancora dati da trasferire
Macchina a stati finiti DMAC
(3) Trasferimento da memoria a disco di tipo Burst 1 di 2
MBG = 1
DMAC
SI NO
MBR = 0
MRD = 1 Bcar = 1 Mbi = 1 , i=1..4 Ereg = 1
SI Enr = 1
Bmdr = 1
Viene richiesto il bus al Processore, da parte del DMAC, attraverso Il Memory Bus Request, funzionante in logica negata
Si attende che il PD32 abbia messo le sue uscite in alta impedenza, Il tutto avviene quando il segnale Memory Bus Grent, ascoltato dal DMAC, è posto ad uno dal PD32
Questa serie di segnali di controllo generati dal SCO del DMAC servono per selezionare i dati indirizzati dal CAR e depositarli Nel REGin della periferica
Settare i quattro segnali Mbi, i=1,..,4 significa ipotizziamo di scrivere simultaneamente 4 Byte allineati in memoria
Trasferimento del dato dall’MDR al registro interno della periferica
Macchina a stati finiti DMAC
(3) Trasferimento da memoria a disco di tipo Burst 2 di 2
WC = 0
DMAC
SI NO
Inc = 1 Dec = 1
Next Dato =1 NO
Nop Dato Scritto=1
SI
Rstart = 1 MBR = 1 Dato Scritto=1
Una volta effettuato il trasferimento viene incrementato di 4 il registro CAR e decrementato di 4 il registro WC
Si verifica se il World Counter è divenuto 0:
Se si il lavoro del DMAC è finito
Se no ci sono ancora dati da trasferire
Il DMAC avverte la periferica che il dato è stato scritto nel REGIN
Lo SCO del DMAC si mette in ascolto del segnale
“Next Dato”, il quale verrà posto ad uno dalla periferica quando sarà pronta a ricevere un nuovo dato.
Il DMAC avverte la periferica che il dato è stato scritto nel REGIN
DMAC rilascia il bus, il Processore si risveglia e continua il lavoro…
Resetta il Flip Flop SR “START”
Macchina a stati finiti DMAC
(4) Trasferimento da memoria a disco di tipo Burst Stealing 1 di 2
MBG = 1
DMAC
SI NO
MBR = 0
MRD = 1 Bcar = 1 Mbi = 1 , i=1..4 Ereg = 1 SI
MBR = 1 Dato Scritto=1
Viene richiesto il bus al Processore, da parte del DMAC, attraverso Il Memory Bus Request, funzionante in logica negata
Si attende che il PD32 abbia messo le sue uscite in alta impedenza, Il tutto avviene quando il segnale Memory Bus Grent, ascoltato dal DMAC, è posto ad uno dal PD32
Trasferimento del dato dall’MDR al registro interno della periferica
Enr = 1 Bmdr = 1
Un trasferimento è completato il DMAC rilascia il bus , il Processore si risveglia e continua il suo lavoro…
Il DMAC avverte la periferica che il dato è stato scritto nel REGIN Questa serie di segnali di controllo generati dal SCO del DMAC servono per selezionare i dati indirizzati dal CAR e depositarli Nel REGin della periferica
Settare i quattro segnali Mbi, i=1,..,4 significa ipotizzare di scrivere simultaneamente 4 Byte allineati in memoria
Macchina a stati finiti DMAC
(4) Trasferimento da memoria a disco di tipo Burst Stealing 2 di 2
WC = 0
DMAC
SI NO
Inc = 1 Dec = 1
Next Dato =1 NO
Nop
SI
Rstart = 1
Una volta effettuato il trasferimento viene incrementato di 4 il registro CAR e decrementato di 4 il registro WC
Si verifica se il World Counter è divenuto 0:
Se si il lavoro del DMAC è finito
Se no ci sono ancora dati da trasferire
Lo SCO del DMAC si mette in ascolto del segnale
“Next Dato”, il quale verrà posto ad uno dalla periferica quando sarà pronta a ricevere un nuovo dato, poi il DMAC andrà a chiedere di nuovo il Bus al Processore
Resetta il Flip Flop SR “START”