Exemple: Un processeur 8 bits

publicité
Exemple:
Un processeur 8 bits
Eduardo Sanchez
Laboratoire de Systèmes Logiques
Ecole Polytechnique Fédérale de Lausanne
Les processeurs
u Deux éléments sont nécessaires pour réaliser un
traitement d’information:
• un algorithme (séquence d’opérations)
• les ressources pour exécuter l’algorithme (éléments de stockage
et de traitement)
u On appelle processeur l’ensemble de ressources
matérielles nécessaires à l’exécution d’un algorithme de
traitement d’information
Page 2
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
u Un processeur peut toujours être décomposé en deux parties:
• l’unité de contrôle (séquencement de l’algorithme)
• l’unité de traitement (élément de stockage et de traitement)
entrées de contrôle
CK
entrées de données
signaux de contrôle
unité
de
contrôle
signaux de status
sorties de contrôle
Page 3
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
unité
de
traitement
sorties de données
u A chaque coup d’horloge, l’unité de contrôle doit générer tous les bits qui
contrôlent les ressources de l’unité de traitement (signaux de contrôle): l’unité de
contrôle est une machine séquentielle
u L’ensemble de signaux de contrôle générés par cycle d’horloge est une microinstruction du processeur
entrées de contrôle
signaux de contrôle
système
logique
combinatoire
CK
Page 4
signaux de status
b
a
s
c
u
l
e
s
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
u Le système logique combinatoire de l’unité de contrôle peut être
réalisé de façon câblée ou programmée: on parle alors d’unité de
contrôle câblée ou microprogrammée.
Une unité de contrôle cablée est plus rapide que son équivalente
microprogramée, ainsi que plus petite en surface de circuit intégré.
Toutefois, une unité microprogrammée demande une conception
plus simple et c’est plus facile à corriger et à modifier.
Page 5
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Exemple de processeur
u Concevoir un processeur capable de compter le nombre de 1 présent
dans un mot d’entrée (32 bits)
u Un algorithme possible est:
data := inport
ocount := 0
mask := 1
while data ≠ 0 repeat
temp := data and mask
ocount := ocount + temp
data := data >> 1
end while
outport := ocount
Page 6
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
u De l’analyse de l’algorithme découle la structure globale de
l’unité de traitement:
• il y a 4 variables (data, mask, ocount, temp): il faut donc 4
éléments de stockage (registres)
• la seule entrée de données est formée par les 32 bits de inport
• la sortie de données est formée par les 6 bits de outport
• les opérations nécessaires sont: addition, and, décalage à droite,
chargement d’un registre avec une constante ou avec un autre
registre, comparaison avec 0
• le seul signal de status à envoyer vers l’unité de contrôle est le
résultat de la comparaison data≠0
u L’unité de contrôle aura une entrée de contrôle, start, pour
indiquer le début de l’opération, et une sortie de contrôle,
done, pour en indiquer la fin
Page 7
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
start
inport
reset
32
signaux de
contrôle
20
système
logique
combinatoire
CK
data≠0
b
a
s
c
u
l
e
s
data
ocount
mask
temp
and
+
shifter
comparateur
6
done
Page 8
outport
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Processeurs à plusieurs niveaux de langage
u Si l’on veut avoir un processeur non spécialisé, capable d’exécuter
plusieurs tâches, à volonté de l’utilisateur, il faut un processeur
avec un répertoire d’instructions.
Chaque instruction réalise un certain traitement sur les données
et il est possible de programmer l’algorithme à l’aide d’une suite
d’instructions
u Chaque instruction est donc une tâche simple, réalisée comme une
suite de micro-instructions
u Le répertoire d’instructions constitue le langage machine du
processeur ou langage d’assemblage
Page 9
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
u Pour faciliter l’écriture du programme, il est possible d’utiliser
d’autres langages, à un plus grand niveau d’abstraction que le
langage machine: ce sont les langages de haut niveau, tels que
Pascal, C, etc
u Le programme écrit dans un langage de haut niveau est traduit en
langage machine par un programme appelé compilateur
u Le programme en langage machine est stocké dans la mémoire de
l’ordinateur et le processeur exécute (interprète) chaque
instruction comme une suite de micro-instructions. Le nombre de
micro-instructions par instruction est variable, selon la complexité
de l’instruction
Page 10
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Page 11
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
contrôle
microprogramme
INTERPRETEUR
MOVE.L
MOVE.L
MOVE.L
START: ABCD
MOVE.B
TEST: CMPA
BNE
traitement
•
•
#2001,A0
#3001,A1
#4000,A2
-(A0),-(A1)
(A1),(A2)
#1001,A0
START
•
•
COMPILATEUR
begin
•
•
for i:=1 to 1000 do
C[i] := A[i] + B[i];
•
•
end.
processeur
mémoire
var
A,B,C : array[1..1000] of integer;
i : integer;
program toto;
u Le processeur effectue sans arrêt une boucle composée de trois
phases:
• recherche (fetch) de l’instruction: l’adresse en mémoire de l’instruction à
exécuter est stockée en permanence dans un registre du processeur, appelé
PC (Program Counter). L’instruction pointée par le PC est cherchée dans la
mémoire et stockée dans un autre registre du processeur: le IR (Instruction
Register)
• décodage de l’instruction (decode): chaque instruction est identifiée, grâce à
un code (opcode). En fonction de ce code, le processeur choisit la tâche à
exécuter, c’est-à-dire la séquence de micro-instructions à exécuter
• exécution (execute) de l’instruction: à la fin de cette phase, on retourne à la
première phase
Page 12
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
initialisation
initialisation
lecture
lecture de
de l’instruction
l’instruction
décodage
décodage
ADD
ADD
Page 13
MOVE
MOVE
•••••
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
LOAD
LOAD
STORE
STORE
Structure d’un ordinateur
processeur
contrôle
traitement
séquenceur
séquenceur
registres
registres
mémoire
micromémoire
micromémoire
entrées/sorties
opérateurs
opérateurs
bus d’adresse
bus de données
bus de contrôle
Page 14
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
PC
PC ←
← adresse
adresse initiale
initiale
MAR
MAR ←
← PC
PC
MDR
MDR ←
← M[PC]
M[PC]
PC
PC ←
← PC+1
PC+1
IR
IR ←
← MDR
MDR
décodification
décodification de
de IR
IR
opérande
opérande
chercher
chercher l’opérande
l’opérande
exécuter
exécuter
Page 15
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Exemple de processeur: structure générale
reset
processeur
mémoire
mémoire
de
de
données
données
mémoire
mémoire
d’instructions
d’instructions
CLK
8
16
11
Page 16
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
16
bus de données
bus d’adresse
bus de contrôle
Bus de contrôle
mémoire
mémoire
de
de
données
données
mémoire
mémoire
d’instructions
d’instructions
ADR
MEMI
CE
R/W
ADR
DATA
16
MEMD
CE
R/W
DATA
RWM
8
RWM
bus d’adresse
bus de données
bus de contrôle
Page 17
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Répertoire d’instructions
Rd,adr
Rd ← M[adr]
STORE adr,Rs
M[adr] ← Rs
MOVE
Rd,Rs
Rd ← Rs
SUB
Rd,Rs1,Rs2
Rd ← Rs1 - Rs2
ADD
Rd,Rs1,Rs2
Rd ← Rs1 + Rs2
CMP
Rs1,Rs2
flag ← Rs1 - Rs2
BR
offset
if flag then PC ← PC + offset
JMP
offset
PC ← PC + offset
LOAD
Page 18
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Format des instructions
15
LOAD
Rd,adr
0
0
15
STORE adr,Rs
0
0
15
MOVE
Rd,Rs
0
1
15
SUB
Rd,Rs1,Rs2
0
1
15
ADD
Rd,Rs1,Rs2
1
0
15
CMP
Rs1,Rs2
1
0
15
BR
offset
1
1
15
JMP
Page 19
offset
1
1
13
12 11
0
Rd
13
12 11
1
Rs
13
12 11
0
Rd
13
12 11
1
Rd
13
12 11
0
Rd
13
12 11
1
Ø
13
12 11
0
Ø
13
12 11
1
Ø
10
0
adr
10
0
adr
10
9
8
0
Rs
10
Ø
9
Rs1
10
9
Rs1
10
9
Rs1
8
7
6
Rs2
8
7
Ø
6
Rs2
8
7
0
0
Ø
6
0
Ø
Rs2
10
0
offset
10
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
0
offset
reset
IR ← M[PC]
PC ← PC+1
decode
if flag then PC ← PC+IR[10..0]
R[IR[12..11]] ← M[IR[10..0]]
PC ← PC+IR[10..0]
M[IR[10..0]] ← R[IR[12..11]]
R[IR[12..11]] ← R[IR[10..9]]
flag ← R[IR[10..9]]-R[IR[8..7]]
Page 20
R[IR[12..11]] ← R[IR[10..9]]-R[IR[8..7]]
R[IR[12..11]] ← R[IR[10..9]]+R[IR[8..7]]
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Structure du processeur
reset
CLK
unité
de
contrôle
unité
de
traitement
16
Page 21
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
11
bus de données
bus d’adresse
bus de contrôle
Unité de traitement
bus de données
[7..0]
[7..0]
OEALU
1 IR[10..0]
0
0
AW
AA
AB
R/W
CLK
IR[12..11]
IR[8..7]
RWREG
CLK
+
registres
registres
LDPC
RESET
0
1
IR[10..9]
OPALU
SELAA
IR
IR
LDIR
ALU
1
CLK
OPCODE
(IR[15..13])
INALU
ff
ll
aa
gg
CLK
LDFLAG
FLAG
OEPC
bus d’adresse
Page 22
PC
PC
B
0
IR[12..11]
SELPC
INREG
1
A
0
1
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
IR[10..0]
OEIR
IR ← M[PC]
bus de données
LDPC
PC
PC
RESET
IR
IR
CLK
OEPC
bus d’adresse
Page 23
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
LDIR
PC ← PC + 1
bus de données
1
+
LDPC
PC
PC
RESET
IR
IR
CLK
OEPC
bus d’adresse
Page 24
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
LDIR
DECODE
bus de données
1
+
LDPC
PC
PC
RESET
IR
IR
LDIR
CLK
OPCODE
(IR[15..13])
OEPC
bus d’adresse
Page 25
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
LOAD
bus de données
[7..0]
1
IR[12..11]
IR[8..7]
RWREG
CLK
AW
AA
AB
registros
registros
LOAD
CLK
A
B
+
LDPC
PC
PC
RESET
IR
IR
LDIR
CLK
OPCODE
(IR[15..13])
IR[10..0]
OEPC
bus d’adresse
Page 26
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
OEIR
STORE
bus de données
[7..0]
[7..0]
1
IR[12..11]
IR[8..7]
RWREG
CLK
AW
AA
AB
registros
registros
LOAD
CLK
A
B
+
LDPC
PC
PC
RESET
IR
IR
LDIR
CLK
OPCODE
(IR[15..13])
IR[10..0]
OEPC
bus d’adresse
Page 27
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
OEIR
MOVE
bus de données
[7..0]
[7..0]
OEALU
1
0
IR[12..11]
IR[8..7]
RWREG
CLK
1
AW
AA
AB
registros
registros
LOAD
CLK
A
B
INREG
+
LDPC
PC
PC
RESET
IR
IR
LDIR
CLK
OPCODE
(IR[15..13])
IR[10..0]
OEPC
bus d’adresse
Page 28
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
OEIR
Unité de contrôle
reset
RWM
MEMI
MEMD
CLK
Page 29
unité
de
contrôle
RWREG
SELAA
INREG
OPALU
INALU
OEALU
LDFLAG
LDPC
SELPC
OEIR
LDIR
OEPC
FLAG
OPCODE
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
unité
de
traitement
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
package procpack is
------------------component controleur
port (clk, reset : in std_logic;
flag : in std_logic;
opcode : in std_logic_vector(2 downto 0);
rwm, memi, memd : out std_logic;
rwreg, selaa, inreg, opalu, inalu, oealu, ldflag, ldpc,
selpc, oeir, ldir, oepc : out std_logic);
end component;
component traitement
port (clk, reset : in std_logic;
rwreg, selaa, inreg, opalu, inalu, oealu, ldflag, ldpc,
selpc, oeir, ldir, oepc : in std_logic;
flag : out std_logic;
opcode : out std_logic_vector(2 downto 0);
busadresse : out std_logic_vector(10 downto 0);
busdonnees : inout std_logic_vector(15 downto 0));
end component;
Page 30
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
component registres
port (clk : in std_logic;
entreebus, entreealu : in std_logic_vector(7 downto 0);
a, b : out std_logic_vector(7 downto 0);
aw, aa, ab : in std_logic_vector(1 downto 0);
inreg, rw, selaa : in std_logic);
end component;
component pc
port (clk, reset : in std_logic;
ldpc, selpc : in std_logic;
entreepc : in std_logic_vector(10 downto 0);
sortiepc : out std_logic_vector(10 downto 0));
end component;
component ir
port (clk : in std_logic;
ldir : in std_logic;
entreeir : in std_logic_vector(15 downto 0);
sortieir : out std_logic_vector(15 downto 0));
end component;
Page 31
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
component alu
port (clk : in std_logic;
inalu, opalu, ldflag : in std_logic;
flag : out std_logic;
entreea, entreeb : in std_logic_vector(7 downto 0);
resultat : out std_logic_vector(7 downto 0));
end component;
component memdata
port (adr : in std_logic_vector(10 downto 0);
data : inout std_logic_vector(7 downto 0);
ce, rw : in std_logic);
end component;
component meminstr
port (adr : in std_logic_vector(10 downto 0);
data : inout std_logic_vector(15 downto 0);
ce, rw : in std_logic);
end component;
end procpack;
Page 32
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use work.procpack.all;
entity traitement is
-------------------port (clk, reset : in std_logic;
rwreg, selaa, inreg, opalu, inalu, oealu, ldflag, ldpc,
selpc, oeir, ldir, oepc : in std_logic;
flag : out std_logic;
opcode : out std_logic_vector(2 downto 0);
busadresse : out std_logic_vector(10 downto 0);
busdonnees : inout std_logic_vector(15 downto 0));
end traitement;
Page 33
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
architecture synt of traitement is
---------------------------------signal
signal
signal
signal
sortieir : std_logic_vector(15 downto 0);
sortiepc : std_logic_vector(10 downto 0);
resultatalu : std_logic_vector(7 downto 0);
rega, regb : std_logic_vector(7 downto 0);
begin
a: registres port map (clk, busdonnees(7 downto 0), resultatalu, rega, regb,
sortieir(12 downto 11), sortieir(10 downto 9),
sortieir(8 downto 7), inreg, rwreg, selaa);
b: alu port map (clk, inalu, opalu, ldflag, flag,
rega, regb, resultatalu);
c: pc port map (clk, reset, ldpc, selpc, sortieir(10 downto 0), sortiepc);
d: ir port map (clk, ldir, busdonnees, sortieir);
opcode <= sortieir(15 downto 13);
busadresse <= sortieir(10 downto 0) when oeir='1' else
sortiepc when oepc='1' else
(others => 'Z');
busdonnees <= ("00000000" & resultatalu) when oealu='1' else
(others => 'Z');
end synt;
Page 34
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use work.procpack.all;
entity processeur is
-------------------port (clk, reset : in std_logic;
busadresse : out std_logic_vector(10 downto 0);
busdonnees : inout std_logic_vector(15 downto 0);
rwm, memi, memd : out std_logic);
end processeur;
architecture synt of processeur is
---------------------------------signal rwreg, selaa, inreg, opalu, inalu, oealu, ldflag, ldpc,
selpc, oeir, ldir, oepc, flag : std_logic;
signal opcode : std_logic_vector(2 downto 0);
begin
a: controleur port map (clk, reset, flag, opcode, rwm, memi, memd,
rwreg, selaa, inreg, opalu, inalu, oealu, ldflag, ldpc,
selpc, oeir, ldir, oepc);
b: traitement port map (clk, reset, rwreg, selaa, inreg, opalu, inalu, oealu,
ldflag, ldpc, selpc, oeir, ldir, oepc, flag, opcode,
busadresse, busdonnees);
end synt;
Page 35
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use work.procpack.all;
entity systeme is
----------------port (clk, reset
busadresse
busdonnees
rwm, memi,
end systeme;
Page 36
: in std_logic;
: out std_logic_vector(10 downto 0);
: inout std_logic_vector(15 downto 0);
memd : out std_logic);
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
architecture synt of systeme is
------------------------------signal ba : std_logic_vector(10 downto 0);
signal rw, mi, md : std_logic;
component processeur
port (clk, reset : in std_logic;
busadresse : out std_logic_vector(10 downto 0);
busdonnees : inout std_logic_vector(15 downto 0);
rwm, memi, memd : out std_logic);
end component;
begin
a: processeur port map (clk, reset, ba, busdonnees, rw, mi, md);
b: memdata port map (ba, busdonnees(7 downto 0), md, rw);
c: meminstr port map (ba, busdonnees, mi, rw);
busadresse <= ba;
rwm <= rw;
memi <= mi;
memd <= md;
end synt;
Page 37
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Programme de test
mémoire d’instructions:
LOAD
LOAD
ADD
SUB
SUB
L1: SUB
CMP
BRANCH
JMP
L2: JMP
R0,M[0]
R1,M[1]
R2,R0,R1
R3,R0,R1
R0,R0,R0
R2,R2,R3
R2,R0
L2
L1
L2
mémoire de données:
000 04
001 03
Page 38
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
000
001
002
003
004
005
006
007
008
009
0000
0801
9080
7880
6000
7580
A400
C001
E7FC
E7FF
architecture synt of meminstr is
-------------------------------type memitype is array(31 downto 0) of std_logic_vector(15 downto 0);
signal memoirei : memitype := (0 => "0000000000000000", 1 => "0000100000000001",
2 => "1001000010000000", 3 => "0111100010000000",
4 => "0110000000000000", 5 => "0111010110000000",
6 => "1010010000000000", 7 => "1100000000000001",
8 => "1110011111111100", 9 => "1110011111111111",
others => "0000000000000000");
signal adrint : std_logic_vector(4 downto 0);
signal outint : std_logic_vector(15 downto 0);
signal ceint : std_logic;
begin
adrint <= adr(4 downto 0);
ceint <= '1' when (ce='1' and conv_integer(adr)<=31) else
'0';
process (rw, ceint, adrint, data)
begin
outint <= memoirei(conv_integer(adrint));
if rw='0'
then if ceint='1'
then memoirei(conv_integer(adrint)) <= data;
end if;
end if;
end process;
data <= outint when (ceint='1' and rw='1') else
(others => 'Z');
end synt;
Page 39
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
architecture synt of memdata is
------------------------------type memdtype is array(31 downto 0) of std_logic_vector(7 downto 0);
signal memoired : memdtype := (0 => "00000100", 1 => "00000011",
others => "00000000");
signal adrint : std_logic_vector(4 downto 0);
signal outint : std_logic_vector(7 downto 0);
signal ceint : std_logic;
begin
adrint <= adr(4 downto 0);
ceint <= '1' when (ce='1' and conv_integer(adr)<=31) else
'0';
process (rw, ceint, adrint, data)
begin
outint <= memoired(conv_integer(adrint));
if rw='0'
then if ceint='1'
then memoired(conv_integer(adrint)) <= data;
end if;
end if;
end process;
data <= outint when (ceint='1' and rw='1') else
(others => 'Z');
end synt;
Page 40
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Téléchargement