Le microprocesseur proprement dit est structuré en quatres modules :
SEQ, qui lit séquentiellement
une instruction par cycle en mémoire ou saute à une adresse
qui lui est fournie comme entrée. Il possède aussi des entrées
enable et reset qui permette de suspendre la lecture ou de
recommencer à l'adresse 0h. Ce device est connecté
au décodeur des instructions et au bus mémoire. ALU. Comme son nom l'indique,
c'est le device qui effectue les opérations arithmétiques
et logiques. connecté au décodeur des instructions,
il sert aussi au calcul des adresses de saut.REG : ce sont les 32 registres du
microprocesseur. Il est connecté au device DECODE
DECODE : c'est lui qui décode
les instructions et connecte entres elles les différentes
entrées sorties des autres devices.
Il est bien sûr connecté au bus mémoire.
A ceci viens s'ajouter le bus mémoire qui gère aussi les entrées/sorties.

Schema général
Adressage virtuel
On a vu précédemment que toutes les instructions prenaient
la mê place en mémoire : 2 mots mémoire, or le micro, qui a le
droit de lire les instructions avec read ne voie
voit que des mots mémoire de 16 bits. Il faudrait donc 2 cycle
pour lire chaque instruction. Ce qui est génant car toutes les
opérations de l'ALU s'effectuent en 1 cycle. On a donc recours un
bus de donnée et d'adresses virtuel pour les opérations
read et write, tandis que le module
SEQ lit sur un bus de donnés de 32 bits
( 15 bits d'adresses) une instruction par cycle.
Accès à la mémoire
Le choix étant fait que la mémoire de code est aussi la
mémoire de données, il se pose le problème de l'accès à la mémoire :
comme SEQ lit à chaque cycle dans la mémoire, il
faut nécessairement interrompre cette lecture lors
d'une instruction read ( et pour rendre les choses
homogènes, on le fait aussi pour write ). Dans le cas
des instruction de lecture/écriture, on utilise donc deux cycles du
processeur : pendant le premier cycle, on lit l'instruction et
on calcule l'adresse mémoire où lire ou écrire les données,
pendant le second cycle, on lit/écrit à l'adresse calculée et
SEQ ne lit pas l'instruction suivante.
cd /home/heriard/jazz/micro/
make montre
jazz -O alu.jzz reg.jzz mem.jzz seq.jzz micro.jzz
%% The Jazz compiler version 0.3.5
%% Compilation: 2.54 s (2.70 s real)
%% Link: 0.06 s (0.06 s real)
%% Device "ALU". nets: 368, mux: 312, per: 53, op: 365, net/op: 1.00
%% Combinatorial depth: 57
%% Writing "./ALU.jzn"
%% Device "REG". nets: 671, reg: 512, mux: 1504, per: 17, &: 574, ~: 31, op: 2638, net/op: 0.25
%% Combinatorial depth: 6
%% Writing "./REG.jzn"
%% Device "MEM". nets: 3670, reg: 496, mux: 2338, per: 32, |: 10, &: 67, ~: 1, op: 2944, net/op: 1.24
%% Combinatorial depth: 13
%% Writing "./MEM.jzn"
%% Device "SEQ". nets: 181, reg: 15, mux: 15, per: 2, &: 15, ^: 15, ~: 1, op: 63, net/op: 2.87
%% Combinatorial depth: 17
%% Writing "./SEQ.jzn"
%% Device "MICRO". nets: 6079, reg: 1060, mux: 4275, per: 106, |: 31, &: 665, ^: 15, ~: 38, op: 6190, net/op: 0.98
%% Combinatorial depth: 69
%% Writing "./MICRO.jzn"
%% Execution: 8.24 s (8.24 s real)
make -C ./as ass
make[1]: Entering directory `/home/heriard/jazz/micro/as'
camlc -c mint.ml
camlc -c instr.mli
camlc -c instr.ml
camlc -c parsefuncs.ml
camlyacc parser.mly
camlc -c parser.mli
camlc -c parser.ml
camllex lexer.mll
70 states, 28 actions.
camlc -c lexer.ml
camlc -c as.ml
camlc -o ass mint.zo instr.zo parsefuncs.zo parser.zo lexer.zo as.zo
make[1]: Leaving directory `/home/heriard/jazz/micro/as'
mv -f ./as/ass ./bin/
make -C ./as blank
make[1]: Entering directory `/home/heriard/jazz/micro/as'
camlc -c blank.ml
camlc -o blank blank.zo
make[1]: Leaving directory `/home/heriard/jazz/micro/as'
mv -f ./as/blank ./bin/
./bin/ass < boot.src > boot.rom
./bin/blank 16 512 >> boot.rom
jazz -O clock_in.jzz
%% The Jazz compiler version 0.3.5
%% Compilation: 1.31 s (1.32 s real)
%% Link: 0.05 s (0.04 s real)
%% Device "INPUTS". nets: 514, per: 1, op: 1, net/op: 514.00
%% Combinatorial depth: 1
%% Writing "./INPUTS.jzn"
%% Execution: 0.08 s (0.07 s real)