1. Description de l'ALU
L'un des blocs majeurs de ce processeur est l'Unité Arithmétique et Logique (ALU en anglais), qui se charge d'effectuer les opérations arithmétiques et logiques (d'où le nom) sur deux nombres.
Pour nous, l'ALU est un bloc combinatoire, ses entrées-sorties sont:
- Une entrée qui spécifie le calcul à effectuer : I[3:0]
- Les données sur lesquelles on va effectuer les calculs : A[7:0], B[7:0] et Cin (retenue entrante). Remarque : en fonction du calcul à effectuer, toutes les entrées ne seront pas forcément utilisées...
- Une sortie S[7:0],
- Une retenue sortante Cout,
- Et un signal Z indiquant si le résultat de l'ALU est nul (Z=1 si S==0).
Les entrées A et B de l'ALU sont respectivement connectées aux signaux accu et ram_data du nanoprocesseur.
Le tableau suivant décrit les opérations que doit pouvoir réaliser l'ALU.
I[3:0] |
Mnémonique | Instruction | Sortie S | Sortie Cout |
1 |
XOR | XOR bit à bit de A et B | S ← A xor B |
0 |
2 |
AND | AND bit à bit de A et B | S ← A and B |
0 |
3 |
OR | OR bit à bit de A et B | S ← A or B |
0 |
4 |
ADD | Addition sans retenue entrante | S ← A + B |
retenue sortante |
5 |
ADC | Addition avec retenue entrante | S ← A + B + Cin |
retenue sortante |
6 |
SUB | Soustraction sans retenue entrante | S ← A - B |
retenue sortante |
7 |
SBC | Soustraction avec retenue entrante | S ← A - B - Cin |
retenue sortante |
8 |
ROL | Rotation à gauche | S[7:0] ← {A[6:0], Cin} |
A[7] |
9 |
ROR | Rotation à droite | S[7:0] ← {Cin, A[7:1]} |
A[0] |
| autres | ... | ... | S ← B |
0 |