è possibile aumentare l'offset in un jm (comando di salto all'interno)?

2

Questo è il mio primo post qui e sono felice di unirmi a questa grande comunità e spero di imparare molto qui e di aiutare se posso (anche se sono un principiante).

Ho una domanda teorica:

Sto provando ad aggiungere al singolo datapath il ciclo il seguente comando jm IMM ($ rs), che, usando l'indirizzo nel comando, salterà di un valore dalla parola presa dalla memoria dati. (l'offset è 16 bit)

Quindi in pratica il risultato sarà: j MEM [$ rs + sign extend (IMM)].

La mia domanda è: è effettivamente possibile aumentare / estendere l'offset (add / imm) nel comando dato? Se sì, cosa è necessario implementarlo?

Da quanto ho capito, caricare una parola da un indirizzo effettivo ($ rs + offset) è in realtà abbastanza simile a 'lw', mentre in lw lo inseriremmo nel registro, ma penso che ora abbiamo bisogno di mettilo nel pc.

Gradirei davvero imparare dalle tue spiegazioni.

Modifica: Un'altra domanda è sorta quando l'ho guardata. se voglio riempire i dettagli nella tabella per jmp (quello in basso) - I valori rimangono gli stessi di J o calcolati usando l'offset? sarebbe davvero interessato a capire questo.

    
posta csnoobie 22.08.2018 - 23:03
fonte

1 risposta

2

La tua architettura non ha un percorso diretto dalla memoria al PC - l'unica cosa che si può fare con il risultato di una lettura di memoria è memorizzarla in un registro.

Per implementare un salto indiretto, è necessario aggiungere un percorso dalla memoria al percorso dati utilizzato per aggiornare il contatore del programma. Ciò si ottiene semplicemente aggiungendo un ulteriore mux dopo i due che sono già sul percorso di ritorno al PC (tornando in cima al diagramma), con il suo input aggiuntivo proveniente dalla linea di lettura della memoria.

Per quanto riguarda l'estensione dell'intervallo, vale la pena notare che il proprio formato di istruzioni ha due campi a 4 bit per selezionare i registri, ma solo uno di questi viene effettivamente utilizzato da tale istruzione. Aggiungendo un percorso alternativo attorno al blocco 'sign extend' andando alla voce in fondo della ALU si potrebbe fornire un'opzione per usare quei 4 bit come parte dell'offset immediato, consentendo quindi offset a 20 bit anziché 16 per questa istruzione, che consentirebbe una notevole quantità di campo aggiuntivo (+/- 512 KiB piuttosto che +/- 32 KiB con la disposizione esistente).

    
risposta data 23.08.2018 - 03:06
fonte