MIC-1
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
Percorso Dati
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
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
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
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
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
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:
| Esempio di indirizzamento:
|
Registri del Mic-1
Il Mic-1 possiede i seguenti registri:
| 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.
|
Micro-assembly language
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
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
- ^ http://www.ontko.com/mic1/mal.html
- ^ http://www.ontko.com/mic1/jas.html
Voci correlate
- MIC-2
- MIC-3
- MIC-4
Collegamenti esterni
- mic1, un emulatore MIC-1 open source, che include gli assemblatori MAL e IJVM
- emuMIC Archiviato il 15 dicembre 2008 in Internet Archive. altro emulatore open source sviluppato da studenti di informatica dell'università di Catania
- Mic-1 Simulator Simulatore Mic-1 scritto in C++ robusto e semplice da installare (non richiede Java)
- Mic-1 VHDL Versione VHDL della Mic-1 sintetizzabile