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) è realizzato per consentire la scrittura di un interprete IJVM (Integer Java Virtual Machine) con semplicità.
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.
Sono presenti due Bus da 32 linee ciascuno:
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:
La ALU possiede le seguenti linee di input/output/controllo:
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.
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.
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:
|
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.
|
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.
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|<<8Lo 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