L'unité arithmétique et logique

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