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

Discutiamo gli esercizi proposti per il datapath


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

#1
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
Credo sia costruttivo condividere un po' lo svolgimento di questi esercizi, visto che non so proprio come fare per capire se ho fatto bene...
Negli esercizi da me svolti ho considerato la codifica espressa nella traccia come un esempio (infatti nel primo esercizio per esempio non vedo come dalla codifica si possa risalire al registro s0)

- 1° esercizio: istruzione bgtz s0, 500

Siccome il CODOP è specifico per questa istruzione, ho modificato l'intera fase di execute con i seguenti segnali:
ALUSrcA=1
ALUSrcB=00
ALUOp=01
PCSource=01
PC WriteMag=1

dove quest'ultimo segnale è stato aggiunto da me. Per il datapath ho aggiunto un'entrata all'OR che determina la scrittura del PC. Tale entrata è l'uscita di una AND i cui ingressi sono
PCWriteMag e msb(negato)

dove msb è il bit più significativo derivante dalla sottrazione fatta nell'execute.

- Posto il secondo esercizio non appena l'avrò terminato...



#2
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
2° esercizio: istruzione mflo t2

Secondo me non deve essere modificato nulla perchè nella fase di execute una generica istruzione di tipo R prevede già che il segnale ALUOp sia pari a 10, cioè segnale che impone all'ALU di effettuare l'operazione sulla base del campo funct...

e poi LO non è uno dei 32 registri del processore... e siccome viene utilizzato nelle divisioni e moltiplicazioni mi viene da pensare che sia un registro legato all'ALU... anche se nella traccia c'è scritto che è del processore...

#3
ziofabrix

ziofabrix

    Newbie

  • Utente
  • StellaStellaStella
  • 251 Messaggi:
bgtz (dollaro )s0, 500

Enrico io poichè l'istruzione è molto simile ad una di salto condizionato ho fatto queste considerazioni.Nella versione in bit sia il secondo campo che il terzo( che indicano i registri da cui prendere i valori in lettura) sono nulli.quindi ciò che cambia è sostanzialmente il cod operativo.Ho aggiunto al datapath un segnale dall'unità di controllo che nella fase di decode già invia un segnale al register file affinchè venga preso proprio il registro s0 in lettura,mentre il secondo registro rimane invariato ovvero REGzero. A questo punto poichè la Alu può verificare se un valore è maggiore di zero asserisce un segnale Maggiore se il valore è maggiore di zero. Questo segnale va in and PcWriteCond e poi il risultato in or con l'or già presente( diventa un or a tre ingressi).per quanto riguarda il diagramma degli stati la terza fase è identica alla tua,mentre nella seconda (decode) viene asserito anche un segnale BGTZ,diretto verso il file register.
Non preoccupatevi per il futuro:se la caverà benissimo anche senza di voi

#4
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
Ho 2 dubbi su quello che dici fabrì:
- Durante la fase di decode non dovrebbe essere possibile inviare segnali specifici visto che il CODOP è proprio in fase di "decodifica".
- Se le cose stessero come dici tu, vuol dire che questa istruzione può essere utilizzata solo per il registro s0, il ché non mi sembra possibile.

#5
ziofabrix

ziofabrix

    Newbie

  • Utente
  • StellaStellaStella
  • 251 Messaggi:
mflo (dollaro) t2

L'istruzione è di tipo R.Ciò che cambia è il campo funct.Quindi la modifica parte dal secondo passo.Il controllo Alu riceve i 6 bit e invia l'indirizzo del registro LO proprio sul bus che collega la memoria e il register file e dovrebbe effettare la sostituzione ke viene fatta anche nella jump,solo che questa volta vengono sostituiti tutti e cinque i bit.Per il resto tutto funziona come una somma normale tra il registro L0 e registro zero


Per quanto riguarda quello ke hai detto sopra,io credo che durante la decodifica i segnali possano essere inviati,altrimenti non avrebbe senso nemmeno lo stato 2 per cui si ottiene nell'Aluout il valore dell'indirizzo per la beq,conseguenza di specifici valori inviati dall'unità di controllo.Per il fatto del registro s0 penso ke il prof volesse farci capire ke il valore non è uno generico ke possiamo specificare anke nella versione in bit(infatti i registri in lettura sn entrambi nulli),ma specifico per l'istruzione.Ovvero la BGTZ seleziona proprio s0
Non preoccupatevi per il futuro:se la caverà benissimo anche senza di voi

#6
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:

mflo (dollaro) t2

L'istruzione è di tipo R.Ciò che cambia è il campo funct.Quindi la modifica parte dal secondo passo.Il controllo Alu riceve i 6 bit e invia l'indirizzo del registro LO proprio sul bus che collega la memoria e il register file e dovrebbe effettare la sostituzione ke viene fatta anche nella jump,solo che questa volta vengono sostituiti tutti e cinque i bit.Per il resto tutto funziona come una somma normale tra il registro L0 e registro zero


LO non è compreso nei registri 0-31 del processore, quindi non è possibile farne riferimento tramite i soliti 5 bit riservati ai registri...

#7
BOJACK89

BOJACK89

    Newbie

  • Utente
  • StellaStellaStella
  • 141 Messaggi:
Salve ragazzi! In merito alla mflo io la penso come enrico, e cioè che il registro LO è un registro del processore ma non è accessibile come un normale registro. Tuttavia sono in parte d'accordo con quello che ha detto fabrizio, cioè la move è una pseudo-istruzione che sostanzialmente effettua la somma tra un registro e $zero

Io ho ragionato così ditemi che ne pensate:

-ho aggiunto un segnale (MFLO) al controllo alu, visto che solo in base ai 6 bit del campo funct si può determinare il tipo di istruzione

-il segnale MFLO l'ho collegato ad un MUX in modo da scegliere la sorgente per il primo operando dell'ALU: o il registro specificato dall'istruzione, o il registro LO (1- seleziona Lo; 0-seleziona rs)

L'unica cosa su cui prestare attenzione è che questo segnale deve essere sempre specificato per ogni altra istruzione di Tipo-R

Che ne pensate? Se non sono stato chiaro cerco di abbozzare le modifiche che ho ftt sul datapath. Grazie per l'ascolto :D
'A vita è 'nu muorzo!

#8
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
Il fatto è che siccome ALUOp può essere nella versione base di tre tipi
00= somma
01= sottrai
10= segui l'indicazione di funct

Allora vuol dire che quel campo "funct" dovrebbe già contenere al suo interno l'informazione "somma zero con LO"... quindi in parole povere LO "è già visibile alla ALU"... in conclusione rimane il mio dubbio...

#9
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
Ho pensato ad un'altra soluzione per la mflo:

- Riprendendo sempre la teoria secondo la quale il campo funct deve essere esaustivo per l'ALU (nel senso che tale campo dice all'ALU "somma zero con LO"), ho supposto questa volta che l'ALU non abbia visibilità sui registri (a differenza della prima soluzione da me proposta), e dunque LO deve essere passato come operando.

- Siccome la decodifica del campo funct avviene durante la fase 1 (in riferimento alla macchina della CU che sta sul libro), allora nei registri A e B ci sarà sicuramente zero (come espresso nella codifica dell'istruzione).

- Per cui non ho fatto altro che aggiungere un registro C nel quale dopo ogni decodifica viene sempre posto il contenuto di LO, tale registro non è nient'altro che "un terzo ingresso alla ALU" che però viene considerato tale solo se a presentarsi è il valore di funct pari a 010010, altrimenti gli operandi base rimangono i contenuti di A e B

Con questa soluzione non è necessario modificare i controlli della CU.

#10
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:

L'unica cosa su cui prestare attenzione è che questo segnale deve essere sempre specificato per ogni altra istruzione di Tipo-R


Questo è l'unico problema... credo che nel proporre le nostre soluzioni siamo vincolati a non modificare il controllo della CU per tutte le restanti istruzioni... in altre parole esse devono funzionare come hanno sempre funzionato.

#11
Ale89

Ale89

    Advanced Member

  • Utente
  • StellaStellaStella
  • 225 Messaggi:
Per quanto riguarda BGTZ....

Allora il cod operativo mi sembra unico ovvero identifica la sola bgtz, dunque questo va nell'unità di controllo che dice all'alu di fare la differenza tra i 2 registri: A e zero (zero è preselezionato dal compilatore che individuando la parola chiave bgtz lo mette nel campo registro B) ora x me si prende il bit piu' significativo che sarà 1 se il risultato è minore di zero (valore contenuto nel registro < 0) e 0 se è maggiore (tutto questo per la notazione in complemento a due). Ora questo bit ce lo portiamo in and con il segnale di pcwritecond che andrà in or con pcwrite (Ovviamente il bit sarà negato in quanto se è maggiore di zero il bit restituito dall'alu sarà 0). Il tutto mentre l'indirizzo label sarà in gola al PC!
Fieru cu biessi quiddhu ca tie 'uè biessi e none quiddhu ca l'auri te dicenu cu 'sinti! SUD SOUND SYSTEM - Nun me fannu paura
Hey Bobby Marley sing something to me. This world go crazy, it's an emergency! MANU CHAO - Mr Bobby

#12
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:

Per quanto riguarda BGTZ....

Allora il cod operativo mi sembra unico ovvero identifica la sola bgtz, dunque questo va nell'unità di controllo che dice all'alu di fare la differenza tra i 2 registri: A e zero (zero è preselezionato dal compilatore che individuando la parola chiave bgtz lo mette nel campo registro B) ora x me si prende il bit piu' significativo che sarà 1 se il risultato è minore di zero (valore contenuto nel registro < 0) e 0 se è maggiore (tutto questo per la notazione in complemento a due). Ora questo bit ce lo portiamo in and con il segnale di pcwritecond che andrà in or con pcwrite (Ovviamente il bit sarà negato in quanto se è maggiore di zero il bit restituito dall'alu sarà 0). Il tutto mentre l'indirizzo label sarà in gola al PC!


Se metti il bit che esce dall'ALU in AND con PCWriteCond succederà che una qualsiasi istruzione di salto condizionato salterà (oltre che per le condizioni di sempre) ogni volta che l'ALU durante l'esecuzione di tale istruzione darà un risultato pari ad 1... invece come sappiamo la beq deve saltare solo se i 2 operandi sono uguali e non anche quando il primo è maggiore del secondo!

#13
Ale89

Ale89

    Advanced Member

  • Utente
  • StellaStellaStella
  • 225 Messaggi:
Scusa ma x PCWriteCond indico un segnale di controllo aggiuntivo che sarà asserito quando la control unit si "accorgerà" che si tratti di una bgtz!!! Per me era chiaro!! Non essere pignolo!!! prrr
Fieru cu biessi quiddhu ca tie 'uè biessi e none quiddhu ca l'auri te dicenu cu 'sinti! SUD SOUND SYSTEM - Nun me fannu paura
Hey Bobby Marley sing something to me. This world go crazy, it's an emergency! MANU CHAO - Mr Bobby

#14
Ale89

Ale89

    Advanced Member

  • Utente
  • StellaStellaStella
  • 225 Messaggi:
X quanto riguarda la MFLO
Per me è una addizione tra LO e zero, oserei dire che LO e zero sono lo stesso registro in quanto hanno lo stesso indirizzo
Inoltre se vedi nei registri del simulatore il registro zero non esiste il che mi ha fatto pensare questa cosa... Che ne dite?
Fieru cu biessi quiddhu ca tie 'uè biessi e none quiddhu ca l'auri te dicenu cu 'sinti! SUD SOUND SYSTEM - Nun me fannu paura
Hey Bobby Marley sing something to me. This world go crazy, it's an emergency! MANU CHAO - Mr Bobby

#15
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:

Scusa ma x PCWriteCond indico un segnale di controllo aggiuntivo che sarà asserito quando la control unit si "accorgerà" che si tratti di una bgtz!!! Per me era chiaro!! Non essere pignolo!!! prrr


Ci sono momenti nei quali si è costretti ad essere pignoli... e questo è uno di quelli visto che dobbiamo fare un esame... e poi come faceva ad essere chiaro se gli hai dato lo stesso nome??? :bash:

Comunque adesso mi trovo... solo che non ho capito perchè parli di compilatore...

#16
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:

X quanto riguarda la MFLO
Per me è una addizione tra LO e zero, oserei dire che LO e zero sono lo stesso registro in quanto hanno lo stesso indirizzo
Inoltre se vedi nei registri del simulatore il registro zero non esiste il che mi ha fatto pensare questa cosa... Che ne dite?


zero ed LO non sono lo stesso registro, infatti zero è protetto da scrittura mentre LO se non mi sbaglio in genere contiene il quoziente di una divisione...

#17
Ale89

Ale89

    Advanced Member

  • Utente
  • StellaStellaStella
  • 225 Messaggi:
Non ti sbagli è proprio cosi... Però avendo lo stesso indirizzo...
Fieru cu biessi quiddhu ca tie 'uè biessi e none quiddhu ca l'auri te dicenu cu 'sinti! SUD SOUND SYSTEM - Nun me fannu paura
Hey Bobby Marley sing something to me. This world go crazy, it's an emergency! MANU CHAO - Mr Bobby

#18
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
Ma come fanno 2 registri diversi ad avere lo stesso indirizzo?! Poi il registro nominato "zero" è codificato 0, mentre Lo non rientra tra i 32...

#19
Ale89

Ale89

    Advanced Member

  • Utente
  • StellaStellaStella
  • 225 Messaggi:
Vedi nella codifica binaria... rt e rs hanno tutti 0... allora o hanno lo stesso indirizzo oppure rt e rs specificano o solo LO o solo zero... Forse c'e' qualcosa nel campo Funct... EDIT: Il campo funct è specifico per la MFLO, ovvero non è una semplice addizione!
Fieru cu biessi quiddhu ca tie 'uè biessi e none quiddhu ca l'auri te dicenu cu 'sinti! SUD SOUND SYSTEM - Nun me fannu paura
Hey Bobby Marley sing something to me. This world go crazy, it's an emergency! MANU CHAO - Mr Bobby

#20
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:

Vedi nella codifica binaria... rt e rs hanno tutti 0... allora o hanno lo stesso indirizzo oppure rt e rs specificano o solo LO o solo zero... Forse c'e' qualcosa nel campo Funct...


Ecco appunto... le codifiche tutte a 0 non identificano zero ed LO, ma identificano entrambe il registro zero, poi attraverso il campo funct si ha la notizia che l'operazione deve essere svolta con il registro LO... è stata questa la mia interpretazione, come puoi vedere dalla soluzione da me proposta...




Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi