Vai al contenuto

Primario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Secondario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Sfondo: Blank Waves Squares Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Corsi di Laurea










ROX @ Unisa - Forum degli studenti di Ingegneria utilizza i cookie. Se prosegui la navigazione accetti il loro uso.    Accetto l'uso dei cookie
-->
Foto

Dubbio esercizi interfaccia


  • Effettua l'accesso per rispondere
Questa discussione ha avuto 7 risposta/e

#1
sabatinof

sabatinof

    Advanced Member

  • Utente
  • StellaStellaStella
  • 137 Messaggi:

Salve ragazzi,come da titolo ho un dubbio riguardante gli esercizi sull'interfaccia. Il dubbio è il seguente: quando nella traccia si dice che il processore oppure l'interfaccia scrivono qualcosa sull' address bus come bisogna fare nel disegno dell'interfaccia per recuperare il dato? Bisogna usare il decoder che ha in ingresso l'address bus nello schema dell'interfaccia standard oppure bisogna considerare quest'ultimo come un registro e da li recuperare il dato? Grazie in anticipo a chi risponderà.





#2
Marco Bassi

Marco Bassi

    Advanced Member

  • Utente
  • StellaStellaStella
  • 575 Messaggi:

Premesso che l'esame l'ho fatto tempo fa, il processore scrive sul data bus ponendo sull'address bus l'indirizzo della cella in cui scrivere.

Il mips è memory mapped, quindi lato processore (quando scrivi il driver) devi solo gestire i registri dell'interfaccia tramite i loro indirizzi.

Se stai disegnando l'interfaccia devi collegare il data bus ad ogni registro ed usare l'address bus per attivare i registri, ovvero devi dirgli che affacciandosi sul data bus troveranno il dato che gli serve. Se hai solo due registri nell'interfaccia, prendi l'ultimo bit dell'address bus e lo piazzi ai due registri che hai. In questo modo dici che utilizzi l'ultimo bit dell'address bus(il meno significativo) per distinguere fra i due registri che hai all'interno dell'interfaccia, se usi più registri ti tocca usare un decoder e prendere più di un bit dell'address bus, collegando sempre e solo una via ad ogni registro.



#3
sabatinof

sabatinof

    Advanced Member

  • Utente
  • StellaStellaStella
  • 137 Messaggi:

Innanzitutto grazie per la risposta. Ma quindi posso considerare l'address bus come un registro(il registro indirizzi) quando viene scritto qualcosa sopra e poi mando il contenuto di questo registro in ingresso ad un decoder che poi in uscita si collega al registro stato,al registro dati e mi da anche l'uscita realtiva a ciò che viene scritto sull'address bus?



#4
Marco Bassi

Marco Bassi

    Advanced Member

  • Utente
  • StellaStellaStella
  • 575 Messaggi:

Forse non ho capito che intendi ma l'address bus non è un registro e non devi portare il contenuto dell'address bus all'interno di un registro dell'interfaccia.

Ciò che si trova sull'address bus ti serve per capire a quale registro devi portare il contenuto del data bus.

Forse la confusione nasce quando leggi cose del tipo "il processore pone sull'address bus l'indirizzo..." una frase del genere, lato interfaccia, è da interpretare come se in quel momento ci sia su quel bus un indirizzo che ti serve ad identificare il registro che devi ATTIVARE.

Quindi usi i "fili" di questo bus per pilotare i registri dell'interfaccia.

Quindi fai entrare, ad esempio, le due cifre meno significative dell'address bus dentro un decodificatore. Da questo fuoriescono quattro fili da collegare all'ingresso di attivazione dei quattro registri dentro l'interfaccia. In base all'indirizzo, solo uno sarà attivato, in tal modo permetti solo ad un registro di affacciarsi in un certo istante sul data bus a prelevare il dato.

Se invece che quattro registri (che era solo un esempio per utilizzare un decoder) potresti avere solo un registro per i dati ed uno per lo stato e quindi bypassi il decoder collegando la cifra meno significativa ad entrambi questi registri.

Se avessi 8 registri potresti usare un decoder 3-8 etc etc...

Specifico che non devi usare tutto l'addres bus per identificare un registro all'interno di un'interfaccia.

Con l'esempio dei due registri che ti ho fatto, hai bisogno solo di un bit. Gli altri sarebbero necessari per "selezionare" l'interfaccia.

Come se i bit più significativi mi servissero per arrivare a casa tua e quelli meno significativi per arrivare, una volta entrato a casa tua, nella tua stanza.


  • A sabatinof piace questo post

#5
sabatinof

sabatinof

    Advanced Member

  • Utente
  • StellaStellaStella
  • 137 Messaggi:

Grazie mille ho capito, solo un'ultima domanda:quando scrivo il driver devo considerare un indirizzo anche per l'address bus per poterci scrivere sopra giusto?



#6
Marco Bassi

Marco Bassi

    Advanced Member

  • Utente
  • StellaStellaStella
  • 575 Messaggi:

Devi solo preoccuparti usare l'indirizzo giusto.

Hai il registro dati ad un presupposto indirizzo? scrivi il dato a quell'indirizzo con l'istruzione apposita. Sarà il processore a porre sull'address bus l'indirizzo e sul data bus il dato che vuoi scrivere in quel registro.

Quell'indirizzo servirà per attivare il registro in cui vuoi scrivere che memorizzerà ciò che troverà sul data bus, come ho scritto sopra.

 

Tieni a mente che le istruzioni del mips permettono di scrivere determinati bit alla volta in un registro (se non sbaglio c'è quella per un byte, quella da una parola e quella da mezza parola), quindi non ti conviene scegliere una dimensione dei registri arbitraria. Ciò impedirebbe al processore di coprire un registro intero con una scrittura (hai un registro a 3 byte che sono tre quarti di parola, come fai col driver a scrivere in tutti questi bit? avresti problemi a comporre la stringa, se non sbaglio ci sono istruzioni per fare ciò ma soprattuto non potresti scrivere in 3 byte per mancanza di un'istruzione per fare ciò). Per questo conviene usare solo registri da un byte, ti servono tre byte per il data bus?! usa tre registri da un byte. Lato driver hai un indirizzo per il primo di questi registri, per scrivere nel secondo shifti di uno, di due per il terzo. Lato interfaccia, fai quanto ti ho scritto sopra: ogni registro collegato al data bus e usi i bit meno significativi dell'addres bus per attivare ciò che hai selezionato dal driver, se ti serve usi il decoder.



#7
paulinhonambucano

paulinhonambucano

    Advanced Member

  • Utente
  • StellaStellaStella
  • 151 Messaggi:

Salve, scusate l'intromissione. Volevo chiedervi : i segnali in uscita dall'interfaccia e diretti verso il  dispositivo devono essere rappresentati mediante bit all'interno del registro di stato? O è una mia scelta?Inoltre se ,ad esempio ho una variabile di stato "tempo_trascorso", da calcolare mediante contatore, è possibile utilizzare l'uscita  div direttamente, anziché andarlo a memorizzare in un bit del registro di stato?

Grazie mille in anticipo.



#8
Marco Bassi

Marco Bassi

    Advanced Member

  • Utente
  • StellaStellaStella
  • 575 Messaggi:

Salve, scusate l'intromissione. Volevo chiedervi : i segnali in uscita dall'interfaccia e diretti verso il  dispositivo devono essere rappresentati mediante bit all'interno del registro di stato? O è una mia scelta?Inoltre se ,ad esempio ho una variabile di stato "tempo_trascorso", da calcolare mediante contatore, è possibile utilizzare l'uscita  div direttamente, anziché andarlo a memorizzare in un bit del registro di stato?

Grazie mille in anticipo.

Non puoi mandare un segnale direttamente da processore al dispositivo, devi quindi passare dall'interfaccia. Se il dubbio è dove mettere questi bit, allora puoi decidere tu. Logicamente se sono informazioni di controllo li metti nel registro di stato, se sono info crude le metti nel registro dati.

Per la seconda domanda: penso dipenda da cosa devi fare col temporizzatore(quello che tiene tracca del tempo è un temporizzatore, il contatore ti conta il numero di vole che gli arriva il segnale). Se lo scadere del tempo ti porta in uno stato che ti porta a fare delle cose, allora devi memorizzare questo bit per poi permettere al processore di leggere lo stato e capire che è finito il conteggio.

Comunque penso tu debba memorizzarlo in ogni caso, considera che sia il processore che il dispositivo lavorano con tempi diversi e fanno altre cose mentre "tu" conti il tempo. Se usi il segnale direttamente rischi di mandarlo, ad esempio, al dispositivo quando questo è impegnato.

L'interfaccia serve, tra l'altro, a rendere asincrone certe operazioni. Portandoti il segnale div fuori direttamente rompi questo obiettivo.


  • A paulinhonambucano piace questo post




Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi