25
CALCOLATORI ELETTRONICI II • BUS I/O PD32 • POLLING / BUSY WAITING • PROGETTAZIONE INTERFACCE INPUT / OUTPUT

CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Embed Size (px)

Citation preview

Page 1: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

CALCOLATORI ELETTRONICI II

• BUS I/O PD32

• POLLING / BUSY WAITING

• PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Page 2: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

I/OBus PD32

I/O Address bus fatto da 8 bitQuante periferiche possiamocollegare al massimo?????

Page 3: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Istruzioni I/O PD32 Classe 7

TIPO CODICE OPERANDI C N Z V P I COMMENTO0 INs dev, D0 - - - - - - Il dato contenuto nel

buffer del device dev è trasferito nella

destinazione D0. dev ->d0

1 OUTs S,dev - - - - - - Il dato sorgente S viene trasferito nel

buffer del device dev.S->dev

2 START dev - - - - - - Viene azzerato il flip-flop STATUS del dev e

viene avviata l'operazione.

3 JR dev, D1 - - - - - - Se STATUS=1 salta alla destinazione D1

4 JNR dev, D1 - - - - - - Se STATUS=0 salta alla destinazione D1

Per la destinazione D0 sono ammessi tutti i tipi di indirizzamento tranne quello immediato.Per la destinazione D1 sono ammessi tutti i tipi di indirizzamento tranne quello con registro e immediato.

Page 4: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Formato istruzioni I/O

TIPO k I/O s ----- ----- MODO DEST

CLASSE

31 29 28 24 23 16 15 14 13 12 11 9 8 6 5 3 2 0

Per l’operando dev sono ammessi solo due modi di indirizzamento: diretto con registro ed assoluto. Per la codifica di questo campo sono usati i campi I/O e k.

Il campo I/O può assumere solo due valori:• 01 => indica che il contenuto di k è l’indirizzo del device• 10 => indica che l’indirizzo del device è contenuto nel registro generale specificato dai primi 3 bit del campo k

Poichè i campi modo sorgente e sorgente sono inutilizzati, la sorgente S viene specificata nei campi modo destinazione e destinazione.

111

Page 5: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Interazione con le periferiche

Esistono due tipologie di interazione con le periferiche:

• Sincrona• Asincrona

In questa parte faremo focus sull’interazione sincrona, successivamente verrà analizzata anche

quella asincrona.

Page 6: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Interazione Sincrona

Come tutte le comuni interazioni sincrone, il software si preoccupa di testare direttamente lo stato della periferica. L’architettura deve quindi dare la possibilità al processore di poter sapere in ogni istante la situazione attuale della periferica. Le tecniche più usare di interazione sincrona sono:• Busy Waiting• Polling

pd32 periferica 1

sei pronta??

si /no

Page 7: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Busy Waiting

Idea che sta dietro all’implementazione del busy waiting:

Loop:Salta a “Loop” se la periferica non è pronta

Si rimane in attesa attivaattesa attiva che la periferica abbia terminato. La CPU è impegnata al 100% in questo controllo.

Page 8: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Busy Waiting / Implementazione

Implementazone del busy waiting in assembly pd32:

Aspetta: Aspetta: JNR Device, AspettaJNR Device, Aspetta

L’istruzione JNR (Jump Not Ready) salta all’etichetta “Aspetta” se Device non è pronto, altrimenti se Device è Ready passiamo alle istruzioni successive.

Page 9: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Polling

verifica circolare se ogni DEVICE è pronto ad interagire

I/O ABI/O DBI/O CB

PD32

DEV 1 DEV 2 DEV 3 DEV 4

Page 10: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Polling / Implementazione

Implementazone del polling in assembly pd32:

POLL1: JR D1, Op_Dev_1POLL2: JR D2, Op_Dev_2POLL3: JR D3, Op_Dev_3JMP POLL1

Ciclicamente il software interroga le periferiche per sapere se qualcuna è pronta ad interagire. Altrimenti va avanti fino a che non arriva alla fine delle periferiche da controllare e con una jmp non condizionata torna sulla prima da controllare.

Page 11: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Polling vs Busy Waiting

Che succede se nell’implementazione del polling esiste solo una periferica da interrogare??

Il busy waiting può essere interpretato come caso particolare del polling.

POLL1: JR D1, Op_Dev_1POLL2: JR D2, Op_Dev_2POLL3: JR D3, Op_Dev_3JMP POLL1

Page 12: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Progettazione Periferiche

Progettiamo la nostra interfaccia hardware con lo scopo di fornire i componenti e le interconnessioni di supporto alla “semantica” della periferica (ovvero cosa deve fare la periferica).

1. Si deve poter leggere e/o scrivere sulla periferica

2. Si deve poter selezionare la periferica tra tutte quelle collegate al bus

3. Si deve poter interrogare la periferica per sapere se ha completato il suo lavoro

4. Si deve poter avviare la periferica

Page 13: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Classico protocollo alto livello

In maniera molto astratta si dovranno eseguire almeno queste operazioni per interagire con le periferiche:

1. Aspettare che la periferica sia disponibile

2. Avviare la periferica

3. Scrivere / Leggere i dati d’interesse

Page 14: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Interfaccia di Input

I/O ABI/O DBI/O CB

SELECTREG

I/O RD START

STARTD O.C.

READY

SCOSCA

R Q

S Q

STATUS

PD32

I/O programmato – PROTOCOLLO DI HANDSHAKING IMPLEMENTATO A

SOFTWARE

STARTDEVCOMPLETE

“0”

WAIT

Page 15: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Interfaccia di Input / Impl

1. Aspettare finché la periferica DeviceIn non è disponibile2. Avvio la periferica così che possa produrre informazioni3. Aspetto la sua terminazione4. Leggo il risultati scquisiti.

Aspetta1: JNR DeviceIN, Aspetta1

START DeviceIN

Aspetta2: JNR DeviceIN, Aspetta2

INB DeviceIN, R0

Cosa implementa??Busy Waiting / Polling??

Page 16: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Interfaccia di Output

I/O ABI/O DBI/O CB

DEC

SELECT

REG

STARTI/O WR

STARTD O.C.

READY

SCOSCA

R Q

S Q

STATUS

PD32

STARTDEVCOMPLETE

I/O programmato – PROTOCOLLO DI HANDSHAKING IMPLEMENTATO A

SOFTWARE

Page 17: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Interfaccia di Output / Impl

Aspetta1: JNR DeviceOUT, Aspetta 1

OUT R0, DeviceOUT

START DeviceOUT

Aspetta2: JNR DeviceOUT, Aspetta2

1. Aspettare finché la periferica DeviceOut non è disponibile2. Scrivi il dato sul registro di interfaccia3. Avverto la periferica che può considerare un nuovo dato.4. Aspetto la sua terminazione

Cosa implementa??Busy Waiting / Polling??

Page 18: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Interfaccia di Output / Impl

Aspetta1: JNR DeviceOUT, Aspetta 1

OUT R0, DeviceOUT

START DeviceOUT

Aspetta2: JNR DeviceOUT, Aspetta2

1. Aspettare finché la periferica DeviceOut non è disponibile2. Scrivi il dato sul registro di interfaccia3. Avverto la periferica che può considerare un nuovo dato.4. Aspetto la sua terminazione

Page 19: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Esercizio Busy Waiting

Dato questo frammento di codice implementante il codice di una funzione chiamante, definire la subroutine IN_AD1 che legge 100 dati dalla periferica di input con indirizzo AD1 e li memorizza in un vettore a partire dall’indirizzo 1280. Si noti che i dati sono già nei registi R0 ed R1

…MOVL #100, R0 ; numero di dati da acquisireMOVL #1200, R1 ; ind.dell’area di memoriaJSR IN_AD1

Page 20: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Soluzione Busy Waiting

…MOVL #100, R0 ; numero di dati da acquisireMOVL #DATI, R1 ; ind.dell’area di memoriaJSR IN_AD1…IN_AD1: PUSH R0; salv. registri usati

PUSH R1PUSH R2

IN_1: JNR AD1, IN_1 ; attende che AD1 sia prontoIN_2: START AD1 ;avvia l’acquisizione di un datoIN_3: JNR AD1, IN_3 ; attende che il dato sia stato prodotto

INW AD1, R2 ; prelievo del dato e….MOVW R2, (R1)+ ; … suo trasferimento in memoriaSUBL #1, R0 ; decremento del contatoreJNZ IN_2 ; acquisizione di un altro dato se non si è azzerato; il contatorePOP R2 ; ripristino dei registri usatiPOP R1 ;POP R0 ;RET ; ritorno al programma chiamante

Page 21: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Esercizio Polling

Dato questo frammento di codice implementante il codice di una funzione chiamante, definire la subroutine IN_AD1 che legge 100 dati da quattro periferiche di input con indirizzo AD1, AD2, AD3, AD4 e li memorizza in un vettore a partire dall’indirizzo 1280. I 100 dati possono essere letti non necessariamente rispettando l’ordine delle periferiche, ovvero 25 da AD1, 25 da AD2…….

Si noti che i dati sono già nei registi R0 ed R1…MOVL #100, R0 ; numero di dati da acquisireMOVL #1200, R1 ; ind.dell’area di memoriaJSR IN_AD1

Page 22: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Soluzione Polling

IN_AD1: PUSH R0 ; salv. registri usatiPUSH R1PUSH R2

POLL1: JR AD1, IN_1 ; attende che AD1 sia prontoPOLL2: JR AD2, IN_2POLL3: JR AD3, IN_3POLL4: JR AD4, IN_4

JMP POLL1…IN_i: START ADi ; avvia l’acquisizione di un datoWAIT: JNR ADi, WAIT ; attende che il dato sia stato prodotto

INW ADi, R2 ; prelievo del dato e….MOVW R2, (R1)+ ; … suo trasferimento in memoriaSUBL #1, R0 ; decremento del contatoreJZ EXITJMP POLL_i+1 ; continua a interrogare le altre periferiche

EXIT: POP R2 ; ripristino dei registri usatiPOP R1 ;POP R0 ;RET ; ritorno al programma chiamante

Page 23: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Esercizio

Una stanza e’ monitorata da 4 sensori di temperatura, i quali sono pilotati da un PD32. Quest’ultimo controlla costantemente che il valor medio della temperatura rilevata nella stanza sia compreso tra i valori [Tmin-Tmax]. Nel caso in cui il valor medio della temperatura non cada in tale intervallo, il microprocessore inviera’ un segnale di allarme su un’apposita periferica, detta ALARM. Il segnale d’allarme utilizzato e’ il valore 1 codificato con 8 bit. Se la temperatura ritorna all’interno dell’intervallo [Tmin-Tmax], la CPU invia sulla periferica ALARM il valore 0.

I sensori ritornano la temperatura misurata come un numero intero ad 8 bit, usando i decimi di gradi Celsius come unita’ di misura.

Scrivere il codice assembly per il controllo dei sensori di temperatura e della periferica di allarme.

Page 24: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Macchina a stati finiti

T_media in[Tmin-Tmax]

T_media fuori da[Tmin-Tmax]

newTemp,T_media NON in [Tmin-Tmax] /Alarm_ON

Legenda per le transizioni:

Input, Condizione / Output

newTemp,T_media in [Tmin-Tmax] /Alarm_OFF

newTemp,T_media NON in [Tmin-Tmax]/

-

newTemp,T_media in [Tmin-Tmax] /

-

Page 25: CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT

Diagramma di flussoT_media=Ts1=Ts2=Ts3=Ts4=

= (Tmin+Tmax)/2Stato=IN_RANGE

dev iready?

controlla dev.succ

Polling

NO

SI

Ricalcola media: T_media=T_media+(new_T_si-old_T_si)/4

T_mediain_range?

SIStato =IN

SI

Stato =OUT

SI

OUTPUT:ALARM OFF

NO

OUTPUT:ALARM ON

Input da dev_i: new_T_si

NO

Stato=IN Stato=OUT

NO