La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT."— Transcript della presentazione:

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

2 I/OBus PD32 I/O Address bus fatto da 8 bit Quante periferiche possiamo collegare al massimo?????

3 Istruzioni I/O PD32 Classe 7 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.

4 Formato istruzioni I/O TIPOkI/Os----- MODODEST CLASSE Per loperando 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 è lindirizzo del device 10 => indica che lindirizzo 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

5 Interazione con le periferiche Esistono due tipologie di interazione con le periferiche: Sincrona Asincrona In questa parte faremo focus sullinterazione sincrona, successivamente verrà analizzata anche quella asincrona.

6 Interazione Sincrona Come tutte le comuni interazioni sincrone, il software si preoccupa di testare direttamente lo stato della periferica. Larchitettura 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

7 Busy Waiting Idea che sta dietro allimplementazione del busy waiting: Loop: Salta a Loop se la periferica non è pronta attesa attiva Si rimane in attesa attiva che la periferica abbia terminato. La CPU è impegnata al 100% in questo controllo.

8 Busy Waiting / Implementazione Implementazone del busy waiting in assembly pd32: Aspetta: JNR Device, Aspetta Listruzione JNR (Jump Not Ready) salta alletichetta Aspetta se Device non è pronto, altrimenti se Device è Ready passiamo alle istruzioni successive.

9 Polling verifica circolare se ogni DEVICE è pronto ad interagire I/O AB I/O DB I/O CB PD32 DEV 1DEV 2DEV 3DEV 4

10 Polling / Implementazione Implementazone del polling in assembly pd32: POLL1: JR D1, Op_Dev_1 POLL2: JR D2, Op_Dev_2 POLL3: JR D3, Op_Dev_3 JMP 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.

11 Polling vs Busy Waiting Che succede se nellimplementazione del polling esiste solo una periferica da interrogare?? Il busy waiting può essere interpretato come caso particolare del polling. POLL1: JR D1, Op_Dev_1 POLL2: JR D2, Op_Dev_2 POLL3: JR D3, Op_Dev_3 JMP POLL1

12 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

13 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 dinteresse

14 Interfaccia di Input I/O AB I/O DB I/O CB SELECT REG I/O RDSTART STARTD O.C. READY SCO SCA R Q S Q STATUS PD32 I/O programmato – PROTOCOLLO DI HANDSHAKING IMPLEMENTATO A SOFTWARE STARTDEV COMPLETE 0 WAIT

15 Interfaccia di Input / Impl 1.Aspettare finché la periferica DeviceIn non è disponibile 2.Avvio la periferica così che possa produrre informazioni 3.Aspetto la sua terminazione 4.Leggo il risultati scquisiti. Aspetta1: JNR DeviceIN, Aspetta1 START DeviceIN Aspetta2: JNR DeviceIN, Aspetta2 INB DeviceIN, R0 Cosa implementa?? Busy Waiting / Polling??

16 Interfaccia di Output I/O AB I/O DB I/O CB DEC SELECT REG START I/O WR STARTD O.C. READY SCO SCA R Q S Q STATUS PD32 STARTDEV COMPLETE I/O programmato – PROTOCOLLO DI HANDSHAKING IMPLEMENTATO A SOFTWARE

17 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 è disponibile 2.Scrivi il dato sul registro di interfaccia 3.Avverto la periferica che può considerare un nuovo dato. 4.Aspetto la sua terminazione Cosa implementa?? Busy Waiting / Polling??

18 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 è disponibile 2.Scrivi il dato sul registro di interfaccia 3.Avverto la periferica che può considerare un nuovo dato. 4.Aspetto la sua terminazione

19 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 dallindirizzo Si noti che i dati sono già nei registi R0 ed R1 … MOVL #100, R0; numero di dati da acquisire MOVL #1200, R1; ind.dellarea di memoria JSR IN_AD1

20 Soluzione Busy Waiting … MOVL #100, R0; numero di dati da acquisire MOVL #DATI, R1; ind.dellarea di memoria JSR IN_AD1 … IN_AD1: PUSH R0; salv. registri usati PUSH R1 PUSH R2 IN_1:JNR AD1, IN_1; attende che AD1 sia pronto IN_2:START AD1;avvia lacquisizione di un dato IN_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 memoria SUBL #1, R0; decremento del contatore JNZ IN_2; acquisizione di un altro dato se non si è azzerato; il contatore POP R2; ripristino dei registri usati POP R1; POP R0; RET; ritorno al programma chiamante

21 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 dallindirizzo I 100 dati possono essere letti non necessariamente rispettando lordine 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 acquisire MOVL #1200, R1; ind.dellarea di memoria JSR IN_AD1

22 Soluzione Polling IN_AD1: PUSH R0; salv. registri usati PUSH R1 PUSH R2 POLL1:JR AD1, IN_1; attende che AD1 sia pronto POLL2: JR AD2, IN_2 POLL3: JR AD3, IN_3 POLL4: JR AD4, IN_4 JMP POLL1 … IN_i:START ADi; avvia lacquisizione di un dato WAIT:JNR ADi, WAIT; attende che il dato sia stato prodotto INW ADi, R2; prelievo del dato e…. MOVW R2, (R1)+ ; … suo trasferimento in memoria SUBL #1, R0; decremento del contatore JZ EXIT JMP POLL_i+1; continua a interrogare le altre periferiche EXIT:POP R2; ripristino dei registri usati POP R1; POP R0; RET; ritorno al programma chiamante

23 Esercizio Una stanza e monitorata da 4 sensori di temperatura, i quali sono pilotati da un PD32. Questultimo 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 unapposita periferica, detta ALARM. Il segnale dallarme utilizzato e il valore 1 codificato con 8 bit. Se la temperatura ritorna allinterno dellintervallo [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.

24 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] / -

25 Diagramma di flusso T_media=T s1 =T s2 =T s3 =T s4 = = (Tmin+Tmax)/2 Stato=IN_RANGE dev i ready? controlla dev.succ Polling NO SI Ricalcola media: T_media=T_media+(new_T_si-old_T_si)/4 T_media in_range? SI Stato = 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


Scaricare ppt "CALCOLATORI ELETTRONICI II BUS I/O PD32 POLLING / BUSY WAITING PROGETTAZIONE INTERFACCE INPUT / OUTPUT."

Presentazioni simili


Annunci Google