Upload
phamduong
View
214
Download
0
Embed Size (px)
Citation preview
Eduardo SanchezLaboratoire de Systèmes Logiques
Ecole Polytechnique Fédérale de Lausanne
Exemple:Un processeur 8 bits
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 2
Les processeurs
uDeux é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)
uOn appelle processeur l’ensemble de ressources matérielles nécessaires à l’exécution d’un algorithme de traitement d’information
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 3
uUn 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 entrées de données
sorties de contrôle sorties de données
signaux de contrôle
signaux de statusCK
unitéde
contrôle
unitéde
traitement
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 4
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 micro-instruction du processeur
CK
systèmelogique
combinatoirebascules
signaux de contrôle
signaux de status
entrées de contrôle
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 5
u Le système logique combinatoire de l’unité de contrôle peut êtreréalisé de façon câblée ou programmée: on parle alors d’unité decontrôle câblée ou microprogrammée.Une unité de contrôle cablée est plus rapide que son équivalentemicroprogramé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.
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 6
Exemple de processeur
uConcevoir un processeur capable de compter le nombre de 1 présent dans un mot d’entrée (32 bits)
uUn algorithme possible est:
data := inportocount := 0mask := 1while data ≠ 0 repeat
temp := data and maskocount := ocount + tempdata := data >> 1
end whileoutport := ocount
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 7
uDe 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
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 8
startinport
doneoutport
signaux decontrôle
CK
20
data≠0
32
6
dataocountmasktemp
shifter
comparateur
systèmelogique
combinatoirebascules
and+
reset
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 9
Processeurs à plusieurs niveaux de langage
uSi 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éeset il est possible de programmer l’algorithme à l’aide d’une suite d’instructions
uChaque instruction est donc une tâche simple, réalisée comme unesuite de micro-instructions
u Le répertoire d’instructions constitue le langage machine du processeur ou langage d’assemblage
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 10
uPour 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 enlangage 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
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 11
prog
ramto
to;
var A,
B,C
: ar
ray[
1..1
000]
of i
nteg
er;
i : in
tege
r;
begi
n • • fo
ri:
=1to
1000
doC[
i] :
= A[
i] +
B[i
];• •
end.
• • MO
VE.L
#2
001,
A0
MOVE
.L #3
001,
A1
MOVE
.L #4
000,
A2
STAR
T: ABC
D -
(A0)
,-(A1)
MOVE
.B (A
1),(
A2)
TEST
: C
MPA
#
1001
,A0
BNE
STAR
T • •
COM
PILA
TEU
R
mém
oire proc
esse
ur
cont
rôle
trai
tem
ent
INTE
RPR
ETEU
R
mic
ropr
ogra
mm
e
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 12
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
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 13
lecture de l’instructionlecture de l’instruction
décodagedécodage
ADDADD MOVEMOVE LOADLOAD STORESTORE
initialisationinitialisation
•••••
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 14
Structure d’un ordinateur
processeur
mémoire entrées/sorties
bus d’adresse
bus de données
bus de contrôle
séquenceurséquenceur
micromémoiremicromémoire
registresregistres
opérateursopérateurs
contrôle traitement
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 15
MAR ← PCMDR ← M[PC]PC ← PC+1IR ← MDR
MAR ← PCMDR ← M[PC]PC ← PC+1IR ← MDR
chercher l’opérandechercher l’opérandeexécuterexécuter
PC← adresse initialePC← adresse initiale
décodification de IRdécodification de IR
opérandeopérande
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 16
Exemple de processeur: structure générale
processeurprocesseurmémoire
dedonnées
mémoirede
données
mémoired’instructions
mémoired’instructions
bus de donnéesbus d’adressebus de contrôle
reset
CLK
1611
8 16
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 17
Bus de contrôle
mémoired’instructions
mémoired’instructions
mémoirede
données
mémoirede
données
bus d’adressebus de donnéesbus de contrôle
ADR
DATA
ADR
DATA
CER/W
CER/W
RWM RWM
MEMI MEMD
816
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 18
Répertoire d’instructions
LOAD 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
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 19
Format des instructions
LOAD Rd,adr
JMP offset
BR offset
CMP Rs1,Rs2
ADD Rd,Rs1,Rs2
SUB Rd,Rs1,Rs2
MOVE Rd,Rs
STORE adr,Rs
Rd adr0 0 001011121315
Rs adr0 0 101011121315
Rd Rs0 1 001011121315 9 8
Ø
Rd Rs1 Rs20 1 101011121315 9 8 7 6
Ø
Rd Rs1 Rs21 0 001011121315 9 8 7 6
Ø
offset1 1 001011121315
Ø
offset1 1 101011121315
Ø
Rs1 Rs21 0 1 ØØ
01011121315 9 8 7 6
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 20
IR ← M[PC]PC ← PC+1
R[IR[12..11]] ← M[IR[10..0]]
M[IR[10..0]] ← R[IR[12..11]]
R[IR[12..11]] ← R[IR[10..9]]R[IR[12..11]] ← R[IR[10..9]]-R[IR[8..7]]
R[IR[12..11]] ← R[IR[10..9]]+R[IR[8..7]]flag ← R[IR[10..9]]-R[IR[8..7]]
if flag then PC ← PC+IR[10..0]
PC ← PC+IR[10..0]
reset
decode
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 21
Structure du processeur
unitéde
contrôle
unitéde
contrôle
bus de donnéesbus d’adressebus de contrôle
reset
CLK
16 11
unitéde
traitement
unitéde
traitement
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 22
Unité de traitementbus de données
bus d’adresse
registresregistres
flag
flag
PCPC IRIR
ALU
0
AWAAABR/WCLK
CLK
INREG
INALU
LDFLAGFLAG
OEPC OEIR
OPALU
LDIR
SELPC
OEALU
CLK
OPCODE(IR[15..13])
IR[10..0]
IR[10..0]
IR[12..11]
IR[8..7]
IR[12..11]
IR[10..9]
SELAA
RWREG LDPCRESET
CLK
[7..0][7..0]
+
1
A B
0 1
0 1
0 1
0
1
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 23
PCPCLDPCRESET
OEPC
CLK
IRIR LDIR
IR ← M[PC]
bus de données
bus d’adresse
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 24
PCPCLDPCRESET
OEPC
CLK
IRIR LDIR
+
1
PC ← PC + 1
bus de données
bus d’adresse
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 25
OPCODE(IR[15..13])
PCPCLDPCRESET
OEPC
CLK
IRIR LDIR
+
DECODE
1
bus de données
bus d’adresse
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 26
registrosregistros
AWAAABLOADCLKCLK
IR[12..11]
IR[8..7]
RWREG
[7..0]
A B
OEIR
IR[10..0]
OPCODE(IR[15..13])
PCPCLDPCRESET
OEPC
CLK
IRIR LDIR
+
LOAD
1
bus de données
bus d’adresse
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 27
registrosregistros
AWAAABLOADCLKCLK
IR[12..11]
IR[8..7]
RWREG
[7..0]
A B
OEIR
IR[10..0]
OPCODE(IR[15..13])
PCPCLDPCRESET
OEPC
CLK
IRIR LDIR
+
[7..0]
STORE
1
bus de données
bus d’adresse
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 28
registrosregistros
AWAAABLOADCLK
INREG
OEALU
CLK
IR[12..11]
IR[8..7]
RWREG
[7..0]
A B
0 1
OEIR
IR[10..0]
OPCODE(IR[15..13])
PCPCLDPCRESET
OEPC
CLK
IRIR LDIR
+
[7..0]
MOVE
1
bus de données
bus d’adresse
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 29
Unité de contrôle
unitéde
contrôle
unitéde
contrôle
unitéde
traitement
unitéde
traitement
reset
CLK
RWREGSELAA
OPALUINALU
INREG
OEALU
LDPCLDFLAG
FLAGOEPC
SELPCOEIRLDIR
OPCODE
MEMIMEMD
RWM
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 30
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;
package procpack is-------------------
component controleurport (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 traitementport (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;
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 31
component registresport (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 pcport (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 irport (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;
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 32
component aluport (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 memdataport (adr : in std_logic_vector(10 downto 0);
data : inout std_logic_vector(7 downto 0);ce, rw : in std_logic);
end component;
component meminstrport (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;
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 33
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;
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 34
architecture synt of traitement is----------------------------------
signal sortieir : std_logic_vector(15 downto 0);signal sortiepc : std_logic_vector(10 downto 0);signal resultatalu : std_logic_vector(7 downto 0);signal rega, regb : std_logic_vector(7 downto 0);
begina: 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;
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 35
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);
begina: 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;
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 36
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;
use work.procpack.all;
entity systeme 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 systeme;
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 37
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;
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 38
Programme de test
LOAD R0,M[0] 000 0000LOAD R1,M[1] 001 0801ADD R2,R0,R1 002 9080SUB R3,R0,R1 003 7880SUB R0,R0,R0 004 6000
L1: SUB R2,R2,R3 005 7580CMP R2,R0 006 A400BRANCH L2 007 C001JMP L1 008 E7FC
L2: JMP L2 009 E7FF
000 04001 03
mémoire d’instructions:
mémoire de données:
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 39
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;
beginadrint <= 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;
Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 40
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;
beginadrint <= 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;