Come funziona una CPU: accesso in memoria (MAR ed MDR) #0.4.4

Nell’articolo di oggi analizzeremo come avviene l’accesso in memoria tramite l’utilizzo dei registri MAR e MDR.

Negli articoli precedenti abbiamo visto:

Quando l’istruzione da eseguire è una Load o una Store, bisogna effettuare operazioni di lettura/scrittura sulla Memoria. Anche nella fase di Fetch, durante la quale l’UC trasferisce una singola istruzione all’interno dell’Instruction Register, il processore effettua un accesso in Memoria (in lettura, proprio per acquisire l’istruzione da trasferire all’IR).

Il processore utilizza i registri MAR (il quale è connesso al Data Bus interno) e MDR (il quale scrive o legge dal Data Bus esterno) per effettuare tali accessi in lettura/scrittura alla Memoria.

memoria

Il registro MAR serve a trasferire dal Bus interno all’Address Bus l’indirizzo con cui si vuole fare accesso alla Memoria (attivando MARin e MARout). Del trasferimento dei dati si occupa invece il registro MDR

memoria

Esso è bidirezionale (in lettura il valore proviene dal Bus esterno e deve andare al Bus interno, mentre in scrittura il valore del Bus interno deve andare sul Bus esterno). Si sfrutta quindi un Multiplexer con parallelismo uguale a quello del Bus interno e dei registri. In base al valore del segnale di controllo SEL del Multiplexer viene prediletta una direzione piuttosto che l’altra. Tramite 2 Buffer tri-state muniti di segnali di controllo MDR1 out ed MDR2 out si pilotano i 2 Bus. Si supponga di voler trasferire il valore di un registro in Memoria ad un certo indirizzo MEM[Ri]← Rj.

La sequenza di operazioni necessarie per far ciò, è la seguente:
• Riout (Ri contiene l’indirizzo);
• MARin;
• MARout;
• Rjout (Rj contiene il dato);
• SEL = 1;
• MDR1 out;

A questo punto la Memoria ha tutti i dati ed i segnali di controllo necessari, tuttavia necessita ugualmente di un certo intervallo di tempo per eseguire le operazioni. Si può immaginare che la Memoria richieda un tempo non prevedibile per completare tali operazioni e, pertanto, si supponga che un segnale MFC indichi quando un’operazione è stata terminata. Immaginiamo di voler fare un’operazione di lettura MEM[Ri]→Rj accedendo alla parola il cui indirizzo è contenuto in Ri e scrivere la parola prelevata dalla Memoria in Rj.

Sequenza di operazioni:
• Riout;
• MARin;
• MARout;
• RD (segnale di Read);
• attesa del segnale MFC;
• SEL = 0;
• MDRin;
• MDR2 out;
• Rjin;

Iscriviti ai nostri gruppi Telegram

Link utili

Seguici per non perdere le prossime novità!

Simone Candido è un ragazzo appassionato del mondo tech nella sua totalità. Simone ama immedesimarsi in nuove esperienze, la sua filosofia si basa sulla irrefrenabile voglia di ampliare a 360° le sue conoscenze abbracciando tutti i campi del sapere, in quanto ritiene che il sapere umano sia il connubio perfetto tra cultura umanistica e scientifica.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.