- Valerio Battaglia
-
- Ingegneria Informatica - Triennale
- Mercoledì, 09 Maggio 2007
- Subscribe via email
Comment
There are no comments made yet.
Accepted Answer
Pending Moderation
qlcno sa se la parte relativa al controllo dell input/interruzioni in Spim potrà essere nel compito ? mi ricordo che il professore aveva detto qlcsa a riguardo ma non ne sono sicuro.
bye
Lo presti ha detto ke al compito nn ci sarebbe stata quella parte sullo SPIM....
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 301
questa è una bella notizia :P :P
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 302
push rt M[R[29]]=R[rt], R[29]=R[29]-4, PC=PC+4.
vediamo se ho capito...
1: M[R[29]]=R[rt],
scrivo nella locazione di memoria indicata dal registro 29 il valore del registro rt.
2: Devo decrementare di 4 il valore del registro 29
3: incremento il PC.
Quello che non so fare è il resto, cioè disegnare qualcosa sul processore multiciclo e sull'automa a stati finiti.
Quello che mi viene da pensare è che:
-dovrò scrivere in memoria
-il registro rt è letto nel secondo passaggio dell'automa....
-dovrò passare il registro 29 alla ALU con un nuovo ingresso che vale 4 e specificare una sottrazione
Sbaglio qualcosa?
Che la sbagli o men, cosa dovrei fare con i 2 schemi?
vediamo se ho capito...
1: M[R[29]]=R[rt],
scrivo nella locazione di memoria indicata dal registro 29 il valore del registro rt.
2: Devo decrementare di 4 il valore del registro 29
3: incremento il PC.
Quello che non so fare è il resto, cioè disegnare qualcosa sul processore multiciclo e sull'automa a stati finiti.
Quello che mi viene da pensare è che:
-dovrò scrivere in memoria
-il registro rt è letto nel secondo passaggio dell'automa....
-dovrò passare il registro 29 alla ALU con un nuovo ingresso che vale 4 e specificare una sottrazione
Sbaglio qualcosa?
Che la sbagli o men, cosa dovrei fare con i 2 schemi?
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 303
Accepted Answer
Pending Moderation
Allora, cominciamo col dire che le istruzione vanno fatte dalla 3 alla prima: una push deve scrivere nello stack e devi fare a livello di cpu quello che facevi in assembler.
Quindi:
1) PC = PC+4
passo "jolly", nel senso che nelle prime due fasi della CPU, IF ed EX, si aggiorna il contatore facendo PC=PC+4 e si carica l'istruzione in memoria (oltre a calcolare l'indirizzo di branch nel caso l'istruzione si rivelasse tale)
2) R[29]=R[29]-4
Dobbiamo decrementare lo stack di 1 word (propri ocome in assembler quando dovevamo effettuare la chiamata ricorsiva salvando $ra).
Come puoi vedere il tutto consiste in 3 passaggi mentali: carico R[29], faccio la differenza R[29]-4 e butto il risultato dentro R[29].
Quindi dobbiamo dividere in diversi passaggi:
2.a) Carico il registro 29: dato che non viene passato in ingresso (ovvero il valore del registro non è dato nè attraverso rs, rt o rd, devo passarlo io manualmente alla CPU. Quindi per passarlo ed effettuare poi la sottrazione con 4 (che è uno dei valori in ingresso per il secondo valore della ALU) devo passarlo come primo valore: dato che devo leggere il valore dal registro lo devo passare come valore READ REGISTER 1. Aggiungo quindi il valore 29 in ingresso a read register 1. Qui però già entrava un altro valore, quindi inserisco un mux in modo che il controllore possa inviare l'input per scegliere tra i due a seconda dell'istruzione.
2.b) Già implementato: tramite READ DATA 1 viene salvato in A il valore R[29], il 4 è già in ingresso all'ALU, mentre la differenza è giù implementata.
2.c) Salviamo il valore in R[29]. Questo vuol dire che il registro 29 dovrà essere un valore di ingresso per WRITE REGISTER: diamo quindi in ingresso al campo write register il valore 29: questo campo era però già usato da ISTRUCTION 20-16 e 15-11: dobbiamo quindi allargare il mux esistente con un altro bit che avrà in ingresso il valore 29.
3) Manca l'ultimo passo: M[R[29]]=R[rt], ovvero salvare nella memoria il valore del registro rt: questo registro era passato giàcome READ REGISTER 2, quindi il valore verrà letto dal registro e uscirà da READ DATA 2 per finire in B: da B il valore va a finire in WRITE DATA, ovvero finirà come dato da scrivere nella locazione della memoria: la locazione era stata già calcolata al punto 2 decrementando lo stack e finiva in ADDRESS come risultato della somma dell'ALU (ovvero ALU OUT). Avendo tutti i dati l'operazione di write viene svolta e abbiamo quindi finito tutte le operazioni.
Spero di essere stato abbastanza chiaro, scusa se ho sbagliato la punteggiatura o altro ma sono tornato alle 6 dalla discoteca ^^.
Per quanto riguarda l'automa è ancora più facile:
i valore dell'autome 1 e 2 (IF ed EX) sono sempre uguali e non vanno modificati, ora dobbiamo capire cosa fa l'istruzione secondo quanto implementato nella CPU.
Ci troviamo dopo le prime due istruzioni nel blocco ISTRUCTION REGISTER: da qui devo leggere i due registri, quindi incontro il primo mux: questo ha un controllo ovviamente, chiamato dal professore READCtrl: dato che devo mandare in input il valore 29 sceglierò 1, creo quindi nell'automa un nuovo stato con solo quel valore (che non essendo specificato è posto a 1). Una volta letti i dati arriviamo quindi in A e B e finisce il ciclo di clock (il che vuol dire che avremo un nuovo stato).
Ora che siamo in A e B andiamo ovviamente nell'ALU per eseguire R[29]-4: è una sottrazione quindi il valore ALUOP lo poniamo a 01 (che rappresenta la sottrazione) dando in ingresso il valore di A ed il valore 4, ovvero SourceA=1 (valore del registro 29) e SourceB=01 (valore 4). Il risultato finisce in ALU OUT e termin quindi il ciclo di clock (dobbiamo creare quindi un altro stato).
Ora il nostro valore calcolato deve essere inviato alla memoria, poichè rappresenta l'indirizzo nel quale scrivere, ma devo anche aggiornare il valore dello stack nel registro facendo R[29]=R[29]-4: anzichè fare due operazioni, dato che in ogni ciclo di clock posso al accedere una volta a memoria, registro e alu, faccio tutto nello stesso passo (con un singolo stato quindi). Per quanto rigurda l'aggiornamento del registro avrò questi valori: MemToReg = 0, ovvero prendo il valore di ALu out (che era R[29]-4), RegWrite = 1 perchè devi scrivere nel registro e RegDst = 10, ovvero il valore in cui scrivere è dato dal registro 29.
Per quanto riguarda invece il salvataggio del valore in memoria avrò quindi : IorD=1 (ovvero prendo il risultato di Alu out), MemWrite=1 perchè scrivo nella memoria.
Ora non avendo altre operazioni finisce il ciclo di clock, termino l'istruzione push e torno quindi allo stato 0 (IF) per l'istruzione successiva.
Oddio, spero sia tutto chiaro, ho scritto proprio tanto
Quindi:
1) PC = PC+4
passo "jolly", nel senso che nelle prime due fasi della CPU, IF ed EX, si aggiorna il contatore facendo PC=PC+4 e si carica l'istruzione in memoria (oltre a calcolare l'indirizzo di branch nel caso l'istruzione si rivelasse tale)
2) R[29]=R[29]-4
Dobbiamo decrementare lo stack di 1 word (propri ocome in assembler quando dovevamo effettuare la chiamata ricorsiva salvando $ra).
Come puoi vedere il tutto consiste in 3 passaggi mentali: carico R[29], faccio la differenza R[29]-4 e butto il risultato dentro R[29].
Quindi dobbiamo dividere in diversi passaggi:
2.a) Carico il registro 29: dato che non viene passato in ingresso (ovvero il valore del registro non è dato nè attraverso rs, rt o rd, devo passarlo io manualmente alla CPU. Quindi per passarlo ed effettuare poi la sottrazione con 4 (che è uno dei valori in ingresso per il secondo valore della ALU) devo passarlo come primo valore: dato che devo leggere il valore dal registro lo devo passare come valore READ REGISTER 1. Aggiungo quindi il valore 29 in ingresso a read register 1. Qui però già entrava un altro valore, quindi inserisco un mux in modo che il controllore possa inviare l'input per scegliere tra i due a seconda dell'istruzione.
2.b) Già implementato: tramite READ DATA 1 viene salvato in A il valore R[29], il 4 è già in ingresso all'ALU, mentre la differenza è giù implementata.
2.c) Salviamo il valore in R[29]. Questo vuol dire che il registro 29 dovrà essere un valore di ingresso per WRITE REGISTER: diamo quindi in ingresso al campo write register il valore 29: questo campo era però già usato da ISTRUCTION 20-16 e 15-11: dobbiamo quindi allargare il mux esistente con un altro bit che avrà in ingresso il valore 29.
3) Manca l'ultimo passo: M[R[29]]=R[rt], ovvero salvare nella memoria il valore del registro rt: questo registro era passato giàcome READ REGISTER 2, quindi il valore verrà letto dal registro e uscirà da READ DATA 2 per finire in B: da B il valore va a finire in WRITE DATA, ovvero finirà come dato da scrivere nella locazione della memoria: la locazione era stata già calcolata al punto 2 decrementando lo stack e finiva in ADDRESS come risultato della somma dell'ALU (ovvero ALU OUT). Avendo tutti i dati l'operazione di write viene svolta e abbiamo quindi finito tutte le operazioni.
Spero di essere stato abbastanza chiaro, scusa se ho sbagliato la punteggiatura o altro ma sono tornato alle 6 dalla discoteca ^^.
Per quanto riguarda l'automa è ancora più facile:
i valore dell'autome 1 e 2 (IF ed EX) sono sempre uguali e non vanno modificati, ora dobbiamo capire cosa fa l'istruzione secondo quanto implementato nella CPU.
Ci troviamo dopo le prime due istruzioni nel blocco ISTRUCTION REGISTER: da qui devo leggere i due registri, quindi incontro il primo mux: questo ha un controllo ovviamente, chiamato dal professore READCtrl: dato che devo mandare in input il valore 29 sceglierò 1, creo quindi nell'automa un nuovo stato con solo quel valore (che non essendo specificato è posto a 1). Una volta letti i dati arriviamo quindi in A e B e finisce il ciclo di clock (il che vuol dire che avremo un nuovo stato).
Ora che siamo in A e B andiamo ovviamente nell'ALU per eseguire R[29]-4: è una sottrazione quindi il valore ALUOP lo poniamo a 01 (che rappresenta la sottrazione) dando in ingresso il valore di A ed il valore 4, ovvero SourceA=1 (valore del registro 29) e SourceB=01 (valore 4). Il risultato finisce in ALU OUT e termin quindi il ciclo di clock (dobbiamo creare quindi un altro stato).
Ora il nostro valore calcolato deve essere inviato alla memoria, poichè rappresenta l'indirizzo nel quale scrivere, ma devo anche aggiornare il valore dello stack nel registro facendo R[29]=R[29]-4: anzichè fare due operazioni, dato che in ogni ciclo di clock posso al accedere una volta a memoria, registro e alu, faccio tutto nello stesso passo (con un singolo stato quindi). Per quanto rigurda l'aggiornamento del registro avrò questi valori: MemToReg = 0, ovvero prendo il valore di ALu out (che era R[29]-4), RegWrite = 1 perchè devi scrivere nel registro e RegDst = 10, ovvero il valore in cui scrivere è dato dal registro 29.
Per quanto riguarda invece il salvataggio del valore in memoria avrò quindi : IorD=1 (ovvero prendo il risultato di Alu out), MemWrite=1 perchè scrivo nella memoria.
Ora non avendo altre operazioni finisce il ciclo di clock, termino l'istruzione push e torno quindi allo stato 0 (IF) per l'istruzione successiva.
Oddio, spero sia tutto chiaro, ho scritto proprio tanto
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 304
Accepted Answer
Pending Moderation
Ciao a tutti,
due domandine: 1.qual è l'intervallo di rappresentazione dei numeri floating point a doppia precisione?
2. Per l'esame bisogna sapere il circuito dell'unità aritmetica per la somma di numeri floating point?
Grazie!!
due domandine: 1.qual è l'intervallo di rappresentazione dei numeri floating point a doppia precisione?
2. Per l'esame bisogna sapere il circuito dell'unità aritmetica per la somma di numeri floating point?
Grazie!!
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 305
Accepted Answer
Pending Moderation
interessa anche a me!
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 306
Accepted Answer
Pending Moderation
prof, la sfida a calcetto no.. una sfida a quake?
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 307
la circuiteria dei floating point nn bisogna saperla... basta ricordare gli intervalli di rappresentazione e le condizioni di overflow...
invece della microprogrammazione cosa bisogna sapere?
invece della microprogrammazione cosa bisogna sapere?
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 308
Accepted Answer
Pending Moderation
1.qual è l'intervallo di rappresentazione dei numeri floating point a doppia precisione?
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 309
Accepted Answer
Pending Moderation
http://en.wikipedia.org/wiki/IEEE_float ... ion_64_bit
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 310
ragazzi scusate ma per quanto riguarda l'implementazione di nuove istruzioni nel multiciclo nn bisogna ottimizzare le prestazioni basta che funzioni tutto vero?
per esempio ho fatto una pop con otto step, compresi i primi due classici...
perchè nn ho capito bene cosa vuole dire il prof quando dice che in ogni step si può fare al più:
un'operazione con l'alu
un'accesso ai registri
un accesso alla memoria
un'ultima cosa: qualcuno può spiegare bene l'istruzione blt fatta in classe dal prof?
grazie...
per esempio ho fatto una pop con otto step, compresi i primi due classici...
perchè nn ho capito bene cosa vuole dire il prof quando dice che in ogni step si può fare al più:
un'operazione con l'alu
un'accesso ai registri
un accesso alla memoria
un'ultima cosa: qualcuno può spiegare bene l'istruzione blt fatta in classe dal prof?
grazie...
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 311
ragazzi ma come si sommano due numeri floating point se uno di essi è negativo?
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 312
Accepted Answer
Pending Moderation
ragazzi scusate ma per quanto riguarda l'implementazione di nuove istruzioni nel multiciclo nn bisogna ottimizzare le prestazioni basta che funzioni tutto vero?
per esempio ho fatto una pop con otto step, compresi i primi due classici...
perchè nn ho capito bene cosa vuole dire il prof quando dice che in ogni step si può fare al più:
un'operazione con l'alu
un'accesso ai registri
un accesso alla memoria
un'ultima cosa: qualcuno può spiegare bene l'istruzione blt fatta in classe dal prof?
grazie...
per le ottimizzazioni non importa, basta funzioni. Per le operazioni vuol dire chenello stesso ciclo di clock posso al massimo fare un accesso alla memoria ed una operazione (tipo l'ultimo stato della push per intenderci) mentre ad esempio non posso fare due somme nello stesso ciclo di clock (perchè non posso accedere due volre all'ALU).
Ancora la sto facendo (son delkl'altro canale), appena fatta te lo dico
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 313
Accepted Answer
Pending Moderation
ragazzi ma come si sommano due numeri floating point se uno di essi è negativo?
Me lo chiedevo ank'io!!
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 314
Allora già che ci sono posto io le mie spiegazioni per 3 istruzioni... che credo di NON aver capito...
1:
jal target PC=(PC+4)[31-28] || target<<2,
R[31]=PC+4;
1a: Bisogna prendere il registro 31 e farlo entrare nel register file nel'entrata Write Register perchè non è presente. Quindi nuova entrata nel multiplexer. Inoltre va scritto su quel registro il valore aggiornato del PC. Dunque si mette una bella freccia che fa dal PC al Write Data, perchè PC + 4 non è presente, aggiungendo ancora una entrata al MPX.
2a: L'istruzione target shiftato è già presente...
3a: ...così come l'istruzione PC + 4 concatenata a tale valore...
2:
jr rs PC=R[rs];
2a: non so...
3:
lui rt,imm R[rt]=(imm<<16), PC=PC+4
3a: semplicemente, shifto di 16 il campo imm del registro rt con una nuova unità...
1:
jal target PC=(PC+4)[31-28] || target<<2,
R[31]=PC+4;
1a: Bisogna prendere il registro 31 e farlo entrare nel register file nel'entrata Write Register perchè non è presente. Quindi nuova entrata nel multiplexer. Inoltre va scritto su quel registro il valore aggiornato del PC. Dunque si mette una bella freccia che fa dal PC al Write Data, perchè PC + 4 non è presente, aggiungendo ancora una entrata al MPX.
2a: L'istruzione target shiftato è già presente...
3a: ...così come l'istruzione PC + 4 concatenata a tale valore...
2:
jr rs PC=R[rs];
2a: non so...
3:
lui rt,imm R[rt]=(imm<<16), PC=PC+4
3a: semplicemente, shifto di 16 il campo imm del registro rt con una nuova unità...
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 315
ragazzi ma come si sommano due numeri floating point se uno di essi è negativo?
Me lo chiedevo ank'io!!
è un bel problema... non riesco a trovare nulla che mi faccia capire come si fa :roll:
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 316
Accepted Answer
Pending Moderation
Non mi è chiara una cosa, ma probabilmente è solo pignoleria.
A che serve il passo 1 dell'automa (Instruction decode/register fetch)???
Spiego...fa un'operazione (aggiungere a PC+4 il valore del campo immediate) che utilizzerà solo 1 volta su 4 nei BEQ...negli altri 3 casi (istruzioni di memoria, istruzioni R e istruzione J) del valore calcolato precedentemente non se ne fa nulla.
Non era meglio (= meno operazioni) includere lo stato 1 nel BEQ e allegerire tutte le altre istruzioni?
A che serve il passo 1 dell'automa (Instruction decode/register fetch)???
Spiego...fa un'operazione (aggiungere a PC+4 il valore del campo immediate) che utilizzerà solo 1 volta su 4 nei BEQ...negli altri 3 casi (istruzioni di memoria, istruzioni R e istruzione J) del valore calcolato precedentemente non se ne fa nulla.
Non era meglio (= meno operazioni) includere lo stato 1 nel BEQ e allegerire tutte le altre istruzioni?
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 317
Accepted Answer
Pending Moderation
Non mi è chiara una cosa, ma probabilmente è solo pignoleria.
A che serve il passo 1 dell'automa (Instruction decode/register fetch)???
Spiego...fa un'operazione (aggiungere a PC+4 il valore del campo immediate) che utilizzerà solo 1 volta su 4 nei BEQ...negli altri 3 casi (istruzioni di memoria, istruzioni R e istruzione J) del valore calcolato precedentemente non se ne fa nulla.
Non era meglio (= meno operazioni) includere lo stato 1 nel BEQ e allegerire tutte le altre istruzioni?
l'unica spiegazione che mi viene è che guardare di che operazione si tratta richiede comunque un ciclo quindi tanto vale avvantaggiare il possibile usando la ALU che altrimenti rimarrebbe ferma.
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 318
Accepted Answer
Pending Moderation
Non mi è chiara una cosa, ma probabilmente è solo pignoleria.
A che serve il passo 1 dell'automa (Instruction decode/register fetch)???
Spiego...fa un'operazione (aggiungere a PC+4 il valore del campo immediate) che utilizzerà solo 1 volta su 4 nei BEQ...negli altri 3 casi (istruzioni di memoria, istruzioni R e istruzione J) del valore calcolato precedentemente non se ne fa nulla.
Non era meglio (= meno operazioni) includere lo stato 1 nel BEQ e allegerire tutte le altre istruzioni?
l'unica spiegazione che mi viene è che guardare di che operazione si tratta richiede comunque un ciclo quindi tanto vale avvantaggiare il possibile usando la ALU che altrimenti rimarrebbe ferma.
esatto: il decode praticamente non è implementata per il calcolo dell'indirizzo di branch, ma per decodificare l'istruzione. Quindi dovendo decodificare l'istruzione (quindi mandare i valori in A e B, tanto vale inviare i vari input anche alle altre periferiche: l'invio non costa nulla perchè è semplicemente un impulso che arriva ad AlusrcB, mentre il creare un altro stato avrebbe significato un altro ciclo di clock perchè il valore dell'indirizzo sarebbe dovuto essere ricalcolato, quindi avrei dovuto avere due stati anzichè 1: il primo per fare la somma tra offset e pc+4, il secondo per scriverlo in PC :wink:
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 319
Accepted Answer
Pending Moderation
dell'istruzione...il decode dell'istruzione (meglio, dell'opcode) è affidato a PLA, ROM o tabelle di dispatch. Per decodificarla non occorre mandare i valori in A e B!
Se prendi le slide in PPT e vai a pagina 59 c'è la funzione "prossimo stato" e la prima riga manda tutti quanti a 0001. Se invece iniziasse da subito a mandare le istruzioni di tipo R in 6, i jump a 9, lw e sw a 2 e infine BEQ a 1 ci ritroveremmo ad avere che tutte le istruzioni richiedono un ciclo in meno tranne il BEQ che rimarrebbe invariato.
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 320
There are no replies made for this post yet.
Be one of the first to reply to this post!
Be one of the first to reply to this post!
Please login to post a reply
You will need to be logged in to be able to post a reply. Login using the form on the right or register an account if you are new here. Register Here »