MIC-1

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Il MIC-1 è un'architettura di processore inventata da Tanenbaum da utilizzare come esempio semplice ma completo per il suo libro Architettura dei calcolatori.

Consiste di una unità di controllo molto semplice che esegue microcodice da una memoria di 512 parole. Il linguaggio microcodice MAL (Micro-Assembly Language)[1] è realizzato per consentire la scrittura di un interprete IJVM (Integer Java Virtual Machine)[2] con semplicità.

Hardware[modifica | modifica wikitesto]

Percorso Dati[modifica | modifica wikitesto]

Il percorso dati (data path) è il cuore del Mic-1. Esso contiene i registri a 32 bit specificati prima, i bus di collegamento e la ALU.

BUS[modifica | modifica wikitesto]

Sono presenti due Bus da 32 linee ciascuno:

  • Bus B: collegato all'output dei registri e all'input della ALU
  • Bus C: collegato all'output dello shifter e all'input dei registri

Registri[modifica | modifica wikitesto]

I registri sono selezionati da due linee di controllo, una per abilitare il bus B e l'altra per abilitare il bus C. Il bus B può essere abilitato da un solo registro per volta, in quanto il trasferimento dei dati da parte di due registri contemporaneamente porterebbe a dei dati inconsistenti. Il bus C può essere invece abilitato da più di un registro contemporaneamente; lo stesso valore presente in esso può infatti essere scritto senza problemi su più di un registro.

Le operazioni di lettura e scrittura vengono effettuate in un solo ciclo di clock.

Il registro MBR pur essendo di sola lettura, possiede due linee di controllo. Essendo un registro a 8 bit, il suo output è collegato alle linee meno significative del bus B. Può essere impostato per fornire il suo output in due modi:

  • Complemento a due (MBR): vengono impostati i rimanenti 24 bit del bus a 1 se si tratta di un numero negativo oppure a 0 se si tratta di un numero positivo (estensione del segno)
  • Senza complemento (MBRU): vengono impostati i rimanenti 24 bit del bus a 0.

ALU[modifica | modifica wikitesto]

La ALU possiede le seguenti linee di input/output/controllo:

  • 2 linee di input da 32 bit per il bus B e per il bus che la collega direttamente al registro H
  • 1 linea di output da 32 bit collegata direttamente allo shifter
  • 6 linee di controllo per la selezione delle operazioni
  • 2 linee di output per i flag di stato N (negative) e Z (zero)

La ALU contiene al suo interno 32 circuiti combinatori. Ogni circuito combinatorio è capace di eseguire istruzioni logiche di AND, OR e NOT e istruzioni aritmetiche di somma.

Shifter[modifica | modifica wikitesto]

Lo shifter possiede un input e un output a 32 bit. L'output è collegato direttamente al bus C. Esso è utilizzato per effettuare operazioni di shift logico e shift aritmetico semplicemente impostando i due segnali di controllo SLL8 (Shift Left Logical o Scorrimento logico a sinistra) e SRA1 (Shift Right Arithmetic o scorrimento aritmetico a destra). Il suo funzionamento può essere anche trasparente trasferendo in output il segnale senza effettuare alcuna operazione.

RAM[modifica | modifica wikitesto]

La RAM del Mic-1 è una ram orientata al byte. Essa è costituita da parole di 4 celle, ogni cella è formata da 8 bit. Essa possiede 3 segnali di controllo, rispettivamente per abilitare le funzioni di Read, Write e Fetch. Con le operazioni di Read e Write si vanno a leggere e scrivere intere parole (4 celle) invece con Fetch si possono leggere le singole celle (8 bit).

Rappresentazione schematica:

Parola Cella Cella Cella Cella
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
... ... ... ... ...

Esempio di indirizzamento:

  • la parola 2 ha indirizzo 8
  • la parola 3 ha indirizzo 12
  • la cella 2 ha indirizzo 2

Registri del Mic-1[modifica | modifica wikitesto]

Il Mic-1 possiede i seguenti registri:

Registro Lettura Scrittura Lettura/scrittura 32 bit 8 bit
MAR
MDR
PC
MBR
MBRU
SP
LV
TOS
CPP
OPC
H

Tutti i registri tranne MBRU possono contenere numeri interi rappresentabili in complemento a due. Il registro MBRU può contenere solo numeri interi a 8 bit non negativi.

  • MAR: questo registro contiene indirizzi di memoria ed è collegato al bus indirizzi della RAM shiftato di 2 linee in modo da moltiplicare il suo valore per 4. Questa moltiplicazione è necessaria in quanto la RAM è una memoria orientata al byte e quindi l'indirizzo di ogni parola è specificato dall'indirizzo del suo primo byte (o della sua prima cella).
  • MDR: questo registro è direttamente collegato al bus dati della RAM
  • PC: come MAR è collegato al bus indirizzi della RAM però senza nessun shift delle sue linee. Con PC infatti si possono indirizzare le singole celle di memoria.

Micro-assembly language[modifica | modifica wikitesto]

Un programma scritto in MAL (Micro-assembly language) può essere considerato come una semplice sequenza di istruzioni in quanto non è possibile rappresentare concetti sintattici più complessi come blocco, procedura o metodo.

Semantica[modifica | modifica wikitesto]

Un'istruzione può avere la seguente forma:

<Istruzione> ::= [<Etichetta>] [<Assegnamento>;][<Lettura/scrittura>;][<Salto>]

Ogni parte è opzionale in quanto è possibile avere istruzioni vuote.

<Etichetta> ::= Qualsiasi carattere alfanumerico
<Assegnamento> ::= Var1 = Var2 = ... = Vari = <exp>[<shift>]

Si possono avere assegnamenti multipli, e le variabili Vari devono essere variabili in scrittura.

<Vari> ::= MDR|LV|MAR|...
<exp> ::=
<shift> ::= >1|<<8

Lo shift può essere di tipo aritmetico a destra di 1 bit (per effettuare ad esempio la divisione per 2) oppure logico a sinistra di 8 bit. register_std-logic _vector

Note[modifica | modifica wikitesto]

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica