Introduction

Dans cet article nous allons traité une partie importante du macro processeur si ce n'est pas la PARTIE IMPORTANTE de ce dispositif. Il s'agit de l'unité arithmétique logique, l'unité responsable d'effectuer toutes les opérations arithmétiques d'addition et de soustraction.

La soustraction binaire

Une méthode simple pour effectuer la soustraction binaire est d'utiliser la méthode du complément à 2 .
Considérons trois nombres binaires A, B et S tel que $S=A-B$. Or $S=A-B$ peut s'écrire $S=A+(-B)$, il nous reste maintenant à exprimer le nombre $-B$ en binaire, c'est là ou nous allons utiliser le complément à 2.
Le complément à 2 se calcule $-B=\overline{B}+1$, S s'écrit donc: $S=A+\overline{B}+1$.Maintenant nous allons$\overline{B}$ en utilisant la porte logique OU EXCLUSIVE: $\overline{B}=B \bigoplus 1$
Nous obtenons finalement $S=A-B=A+1+\overline{B}=A+1+B \bigoplus 1$.

La soustraction et addition en même temps

Une conception plus efficace peut joindre sur le même circuit l'addition et la soustraction. Pour cela nous allons utiliser un bit OP dit bit opération et S sera exprimé par cette équation $S=A+OP+(B \bigoplus OP)$. OP peut prendre deux valeurs:
1- OP=0 $S=A+0+(B \bigoplus 0) = A+B$
2- OP=1 $S=A+1+(B \bigoplus 1) = A+1+\overline{B}=A-B$

Circuits intégrés utilisés

Le 74xx86

Il s'agit d'un circuit intégré DIP avec 14 pins contenant 4 porte logique du type XOR. Le tableau suivant résume le pinout de ce circuit:

Pin# Function Equation Gate
1 Input  XOR A Pin3=Pin1⊕Pin2 A
2 Input XOR A
3 Output XOR A
4 Input XOR B Pin6=Pin4⊕Pin5 B
5 Input XOR B
6 Output XOR B
7 GND Ground
8 Output C Pin8=Pin9⊕Pin10 C
9 Input C
10 Input C
11 Output D Pin11=Pin12⊕Pin13 D
12 Input D
13 Input D
14 Vcc Power 5v

 

Le 74xx283

Il s'agit d'un circuit intégré DIP avec 16 pins donc la fonction est d'addition deux nombres binaires A et B chacun de 4 bits. Le tableau suivant résume le pinout de ce circuit:

Pin# Fonction Variable
5 A1

A

3 A2
14 A3
12 A4
6 B1

B

2 B2
15 B3
11 B4
4 S1

S La somme

1 S2
13 S3
10 S4
7 C0 Carry Input
14 C4 Carry Output
8 GND Ground
16 Vcc Alimentation

Code de VHDL sous XilinX

ibrary IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity AddSub8v1 is 
	Port(a : in  STD_LOGIC_VECTOR (7 downto 0);
	        b : in  STD_LOGIC_VECTOR (7 downto 0);
	        c0 : in  STD_LOGIC;
	        s : out  STD_LOGIC_VECTOR (7 downto 0);
	        cout : out  STD_LOGIC);
	end AddSub8v1;
	
	architecture Behavioral of AddSub8v1 is
		signal c7,c6,c5,c4,c3,c2,c1:std_logic;
		signal x0,x7,x6,x5,x4,x3,x2,x1: std_logic;
	begin
		x7<=b(7) xor c0;
		x6<=b(6) xor c0;
		x5<=b(5) xor c0;
		x4<=b(4) xor c0;
		x3<=b(3) xor c0;
		x2<=b(2) xor c0;
		x1<=b(1) xor c0;
		x0<=b(0) xor c0;
----Add0
		s(0)<=a(0) xor x0 xor c0;
		c1 <= ( (a(0) xor x0) and c0 ) or (a(0) and x0);
----Add1
		s(1)<=a(1) xor x1 xor c1;
		c2 <= ( (a(1) xor x1) and c1 ) or (a(1) and x1);
----Add2
		s(2)<=a(2) xor x2 xor c2;
		c3 <= ( (a(2) xor x2) and c2 ) or (x2 and x2);
----Add3
		s(3)<=a(3) xor x3 xor c3;
		c4 <= ( (a(3) xor x3) and c3 ) or (a(3) and x3);
----Add4
		s(4)<=a(4) xor x4 xor c4;
		c5 <= ( (a(4) xor x4) and c4 ) or (a(4) and x4);
----Add5
		s(5)<=a(5) xor x5 xor c5;
		c6 <= ( (a(5) xor x5) and c5 ) or (a(5) and x5);
----Add6
		s(6)<=a(6) xor x6 xor c6;
		c7 <= ( (a(6) xor x6) and c6 ) or (a(6) and x6);
----Add7
		s(7)<=a(7) xor x7 xor c7;
		cout <= ( (a(7) xor x7) and c7 ) or (a(7) and x7);
end Behavioral;	

Schémas électrique et PCB

Modèle 3D