Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Dubbio su esercizio nelle slide

P
Powner (5600 points)
36 68 85
in Programmazione in Assembly by (5.6k points)
closed by

Guardando gli esercizi nelle slide titolate esercizi_su_CPU_MIPS_a_1_ciclo_di_clock ho provato a svolgere l'esercizio la cui traccia è:

Aggiungere alla CPU l’istruzione jrr rs(Jump Relative to Register) di tipo R, che salta all’indirizzo (relativo al PC) contenuto nel registro rs

Ovvero che esegue come prossima istruzione quella all’indirizzo PC+4+Registri[rs] 

a)Modificate lo schema per realizzare l’istruzione 

b)Indicate tutti i segnali di controllo che la CU deve generare 

c)Calcolate il tempo di esecuzione della istruzione assumendo che: Accesso a memorie = 66ns, accesso ai registri = 33ns, ALU e sommatori = 100ns

Delle soluzioni, non ho capito un paio di cose:

  • perché il jump non andrebbe bene in questo caso, ma è necessario utilizzare un branch?
  • perché nei segnali di controllo della CU MemRead è posto a don't care e MemWrite è posto a 0? (come nei jump, tra l'altro) 
  • nel calcolo dei tempi di esecuzione, la fetch impiega 66 ns perché l'accesso alla memoria istruzioni è considerata "accesso alla memoria" giusto? Ovvero, in generale: i tempi di accesso alla memoria istruzioni sono sempre uguali a quelli di accesso alla memoria dati?

602 views
closed with the note: answered

1 Answer

andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
  1. si tratta di un salto relativo, quindi si può sfruttare l'hardware già presente per calcolare il salto relativo di un branch invece di aggiungere nuovi componenti funzionali 
  2. a) e MemWrite fosse 1 si modificherebbe un qualche indirizzo di memoria. b) RegWrite=0 e quindi qualsiasi cosa venga letta dalla memoria (assumendo che MemToReg=1) viene in ogni caso ignorata.
  3. La memoria istruzioni e quella dei dati sono realizzate con la stessa tecnologia e impiegano lo stesso tempo. (mentre i registri sono più veloci)
P
Powner (5600 points)
36 68 85
by (5.6k points)
Ok tutto chiaro grazie, unica cosa: per fare il jump perché servirebbero altri componenti funzionali? Nel disegno vedo che il circuito comprende gli elementi che ieri, in classe, ha spiegato essere necessari per eseguire il jump (ovvero il collegamento per ottenere 32 bit partendo dai 26 dell'immediate e la linea di controllo jump che proviene dalla CU). Cosa mi manca?
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Essendo un salto relativo è necessario sommare $rs a PC+4 con un sommatore. Se non usi quello del branch ne devi aggiungere uno apposta. (oppure usare l'ALU)