Vous êtes sur la page 1sur 48

Cours #8

Conception et réalisation
de processeurs à usage général

Conception et implémentation de systèmes numériques


Plan
• Mise en contexte
• Retour sur les processeurs à usage spécifique
• Processeurs à usage général: introduction
• Chemin des données
• Unité de contrôle

Conception et implémentation de systèmes numériques


La machine distributrice

Moteurs des plateaux

Clavier Processeur
M
M
M
M

État
Gérer l’argent
actuateurs
Gérer l’inventaire
pour rendre
la monnaie
senseur de Comment réaliser ce processeur?
pièces Concevoir un processeur à usage
spécifique?
Utiliser un processeur à usage
général? affichages

Conception et implémentation de systèmes numériques


Deux types de processeurs
• Un processeur est un type spécial de système numérique dont le but est de
traiter des données par une succession d’étapes simples, pouvant résulter en un
traitement global complexe.
• Un processeur doit acquérir des données, les traiter, et produire un résultat sous
forme numérique ou vidéo.
• On distingue deux types principaux de processeurs :
– Les processeurs à usage général peuvent être programmés. Le programme
exécuté par un processeur est gardé en mémoire sous la forme d’une liste
d’instructions.
• On réfère souvent à ce type de processeur par le nom de « microprocesseur ».
• Un microcontrôleur est un cas particulier d’un processeur à usage général.
• Un processeur spécialisé est un processeur à usage général auquel on a ajouté des
instructions spéciales.
– Les processeurs à usage spécifique sont des processeurs non programmables qui sont conçus
dans le but de répondre à un besoin unique.
• Ils sont plus simples et plus efficaces que les processeurs à usage général.
• Ils ne peuvent pas en général être facilement reprogrammés.

Conception et implémentation de systèmes numériques


Parties d’un processeur
• Un processeur est composé de deux parties:
– Le chemin des données (datapath) traite les données. Il inclut:
• des registres;
• des unités fonctionnelles (comme une unité arithmétique et logique)
• un mécanisme de commutation pour transférer et manipuler les données.
– L’unité de contrôle (control unit) est responsable du séquençage des opérations à exécuter par
le chemin de données selon des entrées externes et le résultat des opérations.

Entrée des données Sortie des données


Chemin des données

Contrôle État

Entrées de contrôle Sorties de contrôle


Unité de contrôle

Conception et implémentation de systèmes numériques


Plan
• Mise en contexte
• Retour sur les processeurs à usage spécifique
• Processeurs à usage général: introduction
• Chemin des données
• Unité de contrôle

Conception et implémentation de systèmes numériques


Exemple de processeur à usage spécifique:
transmetteur RS-232

Le chemin des données ne contient que les registres nécessaires.


La machine à états de l’unité de contrôle ne peut faire qu’une seule tâche.
Conception et implémentation de systèmes numériques
Exemple: modèle de consommateur/producteur

Conception et implémentation de systèmes numériques


Du processeur à usage spécifique
au processeur à usage général
• Pour changer la tâche d’un processeur à usage spécifique, il faut:
– ajouter les registres et structures de calculs nécessaires à son chemin des
données;
– changer la machine à états de son unité de contrôle; et,
– changer les signaux de contrôle entre le chemin des données et l’unité de
contrôle.
• Un processeur à usage général doit pouvoir effectuer n’importe quelle tâche
qu’un processeur à usage spécifique, mais avec:
– un chemin des données fixe;
– une unité de contrôle fixe; et,
– des signaux de contrôle fixes.
• Un processeur à usage général doit pouvoir être programmé sans changer sa
structure ni ses interconnexions.
• Pour effectuer une tâche différente, au lieu de changer la machine à états, on la
traverse de différentes façons en fonction du programme entreposé en
mémoire.
Conception et implémentation de systèmes numériques
Plan

• Mise en contexte
• Retour sur les processeurs à usage spécifique
• Processeurs à usage général: introduction
• Chemin des données
• Unité de contrôle

Conception et implémentation de systèmes numériques


Processeurs à usage général
• Certains processeurs à usage général, comme les processeurs Pentium de Intel
et les processeurs Sparc de Sun, sont destinés principalement au marché des
stations de travail. Ce sont des circuits d’une complexité inouïe qui sont le
résultat du travail de centaines d’ingénieurs-années.
• D’autres processeurs, comme les ARM, MIPS, 8051 et TMS320 sont peu connus
mais sont fréquemment utilisés dans des applications embarquées comme les
téléphones cellulaires, les automobiles et les jeux vidéo.
• Les processeurs à usage général sont habituellement fabriqués à très, très
grande échelle. Leurs coûts de développement faramineux peuvent donc être
répartis sur un très grand nombre d’unités, rendant rentable leur production et
mise en marché.
• Il est intéressant d’observer que le développement de chaque nouvelle
génération de processeur se fait à l’aide de stations de travail équipées de
processeurs de la génération précédente. En d’autres mots, sans la puissance de
calcul des processeurs d’aujourd’hui, on serait incapable de concevoir les
processeurs de demain.
Conception et implémentation de systèmes numériques 11
Jeu d’instructions
• Le jeu d’instructions (Instruction Set Architecture – ISA) est la spécification de
toutes les instructions pouvant être effectuées par le processeur, leur encodage
numérique, et l’inventaire des ressources mises à la disponibilité des
programmeurs (comme des registres, des piles, des coprocesseurs, etc.). Le jeu
d’instructions est le contrat entre les concepteurs du processeur et les
programmeurs.
• On peut catégoriser les jeux d’instructions selon plusieurs dimensions. Une
dimension concerne la forme du chemin des données du processeur, selon qu’il
contient ou non des registres et de la mémoire.
• Les processeurs de type registre-registre (register-register ou load-store) sont les
plus populaires. Pour ce type de processeur, les opérations peuvent être
effectuées uniquement sur des valeurs gardées dans des registres. Il est possible
de transférer des données entre les registres et la mémoire.
• Aujourd’hui on considère des processeurs basés sur l’architecture Harvard, c'est-
à-dire qui ont des mémoires séparées pour le programme et les données
(contrairement à l’architecture Von Neumann).
Conception et implémentation de systèmes numériques 12
Micro-opérations du chemin des données
• Contrairement à un processeur à usage spécifique, la grande taille du jeu
d’instructions d’un processeur à usage général implique qu’il faut pouvoir
supporter un grand nombre de micro-opérations. On peut toutefois les classifier
en trois groupes :
– le chargement de données de l’extérieur ou une mémoire vers un bloc de
registres;
– la transformation des données grâce à une unité arithmétique et logique; et,
– l’entreposage de données en mémoire ou leur transfert vers l’extérieur.

Conception et implémentation de systèmes numériques 13


Exemple : Le processeur au complet

choixSource
registre d’état

0 état
constante 1 donnée
entréeExterne 2 A A
3

sortie bloc des registres UAL F

adresse
choixCharge B B
mémoire des données
charge
clk
choixA choixB opération
lecture/ecriture’
entree
clk

sortieExterne

registre
d’instructions etatUAL

sortie D Q

charge

signaux de controle
mémoire des instructions

contrôleur
compteur de
programme

adresse Q D

compte
charge
Conception et implémentation de systèmes numériques 14
Plan
• Mise en contexte
• Retour sur les processeurs à usage spécifique
• Processeurs à usage général: introduction
• Chemin des données
• Unité de contrôle

Conception et implémentation de systèmes numériques 15


Architecture d’un chemin des données
• Un chemin des données a deux parties principales:
– un bloc de registres qui conserve les données à traiter et des résultats
précédents, de façon à pouvoir combiner toutes ces valeurs dans de
nouveaux calculs.
– des unités fonctionnelles pour effectuer des opérations sur les données
conservées dans les registres.
• Des modules combinatoires permettent de choisir, router et contrôler le flot
d’information entre les registres et les unités fonctionnelles.

Entrées Unités fonctionnelles et Sorties


Registres
Horloge modules combinatoires
registres à registres à
charger charger lire opération état

L’unité fonctionnelle peut parfois avoir un état entreposé dans des éléments à mémoire.
• Information sur un calcul précédent (p. ex. négatif, zéro, etc.).

• Pour effectuer un calcul sur plusieurs cycles.

• Pour garder en mémoire une valeur spéciale (p. ex. un accumulateur).

Conception et implémentation de systèmes numériques 16


Chemin des données d’un processeur à usage général

choixSource
registre d’état

0 état
constante 1 donnée
entréeExterne 2 A A
3

sortie bloc des registres UAL F

adresse
choixCharge B B
mémoire des données
charge
clk
choixA choixB opération
lecture/ecriture’
entree
clk

sortieExterne

Conception et implémentation de systèmes numériques 17


Effectuer des opérations
• Pour effectuer une instruction avec le chemin des données proposé, il s’agit de
donner les bonnes valeurs aux différents signaux de contrôle.
• Supposons que le bloc des registres contient quatre registres R0, R1, R2, R3 et
que la mémoire contient 256 cellules.
• Par exemple, pour copier le contenu du registre R1 dans le registre R0, il faut:
– aiguiller la valeur du registre R1 à l’extérieur du bloc des registres;
– indiquer à l’UAL de n’effectuer aucune opération;
– passer à travers du multiplexeur de sélection de source;
– revenir à l’entrée du bloc des registres, et aiguiller cette valeur dans R0;
– le signal sur le port B du bloc des registres n’est pas utilisé et est sans
importance;
– la mémoire ne doit pas charger de nouvelle valeur pendant cette opération.

Conception et implémentation de systèmes numériques 18


Effectuer l’opération R0 ← R1

0
choixSource
registre d’état

0 état
1
R0
constante
donnée
entréeExterne 2 A A
3
R1
sortie bloc des registres UAL F
choixCharge
l 0 R2
- adresse e charge B B
mémoire des données
c c
c 1
h h o
t clk R3 choixA choixB opération
u
1 o
lecture/ecriture’ o
c centreec
p
r
clk i i é
h h h e
instruction
x
S
x
C
a o o
r
a
E 1 - 7
r i i c sortieExterne
o h t
g x x r
u a i
e A B i
r r o
t
c g n case op is
u when 0 => F <= A + B;
e e when 1 => F <= A - B;
r when 2 => F <= shift_right(A, 1);
e when 3 => F <= shift_left(A, 1);
when 4 => F <= not(A);
’ when 5 => F <= A and B;
when 6 => F <= A or B;
when 7 => F <= A;
R0 ← R1 0 0 1 1 - 7 1 when others => F <= (others => 'X');
end case;
R2 ← R1 + R3 0 2 1 1 3 0 1
R2 ← R2 ET R3 0 2 1 2 3 5 1
R3 ← M[25]Conception
3 et implémentation
3 1 - de- systèmes
- 1
numériques 19
Effectuer l’opération R0 ← R1

l
e
c c c
h h t
o
o o u
c c c p
i i r
h h h é
x x e
a o o r
instruction S C E
r i i a
o h c
g x x ti
u a ri
e A B o
r r t
n
c g u
e e r
e

R0 ← R1 0 0 1 1 - 7 1
R2 ← R1 + R3 0 2 1 1 3 0 1
R2 ← R2 ET R3 0 2 1 2 3 5 1
R3 ← M[25] 3 3 1 - - - 1
M[25] ← R0 - - 0 - 0 - 0

Conception et implémentation de systèmes numériques


Effectuer l’opération R2 ← R1 + R3

0
choixSource
registre d’état

0 état
constante 1 donnée R0
entréeExterne 2 A A
3
R1
sortie bloc des registres
+
UAL F
2 choixCharge
R2
- adresse
mémoire des données 1 charge B B

clk R3
choixA choixB opération
1 lecture/ecriture’
entree
clk

1 3 0
sortieExterne

lect
choi choi opé
char choi choi ureE
instruction xSo xCh rati case op is
ge xA xB critu when 0 => F <= A + B;
urce arge on when 1 => F <= A - B;
re’ when 2 => F <= shift_right(A, 1);
when 3 => F <= shift_left(A, 1);
when 4 => F <= not(A);
R0 ← R1 0 0 1 1 - 7 1 when 5 => F <= A and B;
when 6 => F <= A or B;
R2 ← R1 + R3 0 2 1 1 3 0 1 when 7 => F <= A;
when others => F <= (others => 'X');
R2 ← R2 ET R3 0 2 1 2 3 5 1 end case;
R3 ← M[25] 3 3 1 - - - 1
M[25] ← R0 - - 0 - 0 - 0
Conception et implémentation de systèmes numériques 21
Effectuer l’opération R2 ← R2 ET R3

0
choixSource
registre d’état

0 état
constante 1 donnée R0
entréeExterne 2 A A
3
R1
sortie bloc des registres
ET
UAL F
2 choixCharge
R2
- adresse
mémoire des données 1 charge B B

clk R3
choixA choixB opération
1 lecture/ecriture’
entree
clk

2 3 5
sortieExterne

lect
cho cho op
ure case op is
ixS ixC cha cho cho éra
instruction Ecri when 0 => F <= A + B;
our har rge ixA ixB tio when 1 => F <= A - B;
tur when 2 => F <= shift_right(A, 1);
ce ge n
e’ when 3 => F
when 4 => F
<=
<=
shift_left(A, 1);
not(A);
R0 ← R1 0 0 1 1 - 7 1 when 5 => F <= A and B;
when 6 => F <= A or B;
R2 ← R1 + R3 0 2 1 1 3 0 1 when 7 => F <= A;
R2 ← R2 ET R3 0 2 1 2 3 5 1 when others
end case;
=> F <= (others => 'X');

R3 ← M[25] 3 3 1 - - - 1
M[25] ← R0 - - 0 - 0 - 0
Conception et implémentation de systèmes numériques 22
Effectuer l’opération R3 ← M[25]

3
choixSource
registre d’état

0 état
constante 1 donnée R0
entréeExterne 2 A A
3
R1
sortie bloc des registres UAL F

3 choixCharge
R2
25 adresse
23des données
mémoire 1 charge B B

clk R3
choixA choixB opération
1 lecture/ecriture’
24
entree
clk
25 - - -
sortieExterne

lectu
choix choix
char choix choix opér reEcr
instruction Sour Char
ge A B ation iture
ce ge

R0 ← R1 0 0 1 1 - 7 1
R2 ← R1 + R3 0 2 1 1 3 0 1
R2 ← R2 ET R3 0 2 1 2 3 5 1
R3 ← M[25] 3 3 1 - - - 1
M[25] ← R0 - - 0 - 0 - 0
Conception et implémentation de systèmes numériques 23
Effectuer l’opération M[25] ← R0

-
choixSource
registre d’état

0 état
constante 1 donnée R0
entréeExterne 2 A A
3
R1
sortie bloc des registres UAL F

- choixCharge
R2
25 adresse
23des données
mémoire 0 charge B B

clk R3
choixA choixB opération
0 lecture/ecriture’
24
entree
clk
25 - 0 -
sortieExterne

choix choix lectu


charg choix choix opér
instruction Sourc Char reEcr
e A B ation
e ge iture’
R0 ← R1 0 0 1 1 - 7 1
R2 ← R1 + R3 0 2 1 1 3 0 1
R2 ← R2 ET R3 0 2 1 2 3 5 1
R3 ← M[25] 3 3 1 - - - 1
M[25] ← R0 - - 0 - 0 - 0
Conception et implémentation de systèmes numériques 24
Éléments à mémoire pour chemins des données
Bloc de registres
donnée D Q

charge
R0
charge
choixA

D Q A
2:4
R1
0
charge
choixCharge
1
2
3

D Q

R2
choixB
charge

D Q

R3 Un bloc de registre peut avoir plusieurs ports


charge
d’entrée et de sortie.

Un registre peut à la fois être la cible d’une


écriture et la source pour l’un des ports de sortie.

Conception et implémentation de systèmes numériques


Version coûteuse en multiplexeurs!
25
Éléments à mémoire pour chemins des données
Bloc de registres: code VHDL

-- dans la partie déclarative de l’architecture


type lesRegistres_type is array(0 to Nreg - 1) of signed(Wd - 1 downto 0);
signal lesRegistres : lesRegistres_type;
signal A : signed(Wd - 1 downto 0);
signal choixA : integer range 0 to Nreg - 1;
signal B : signed(Wd - 1 downto 0); Dans cette description du bloc des registres:
signal choixB : integer range 0 to Nreg - 1; • le nombre de ports d’entrée est fixé à 1
signal donnee : signed(Wd - 1 downto 0);
• le nombre de ports de sortie est fixé à 2
signal choixCharge : integer range 0 to Nreg - 1;
• le nombre de registres est déterminé par le paramètre Nreg
signal charge : std_logic;
• la largeur des registres est déterminée par le paramètre Wd
-- dans le corps de l’architecture
process (CLK, reset)
begin
if rising_edge(CLK) then
if reset = '1' then
lesRegistres <= (others => (others => '0'));
else
if charge = '1' then
lesRegistres(choixCharge) <= donnee;
end if;
end if;
end if;
end process;

-- signaux de sortie du bloc des registres


A <= lesRegistres(choixA);
B <= lesRegistres(choixB);
sortieExterne <= B;

Conception et implémentation de systèmes numériques 26


Unité arithmétique et logique
-- dans la partie déclarative de l’architecture

signal F : signed(Wd - 1 downto 0);


signal Z : std_logic;
signal N : std_logic;
signal op : integer range 0 to 7; -- registre d'état de l'UAL
process(clk, reset)
-- dans le corps de l’architecture begin
if rising_edge(clk) then
process(A, B, op) if reset = '1' then
begin Z <= '0';
case op is N <= '0';
when 0 => F <= A + B; else
when 1 => F <= A - B; if (etat = opUAL) then
when 2 => F <= shift_right(A, 1); if F = 0 then
when 3 => F <= shift_left(A, 1); Z <= '1';
when 4 => F <= not(A); else
when 5 => F <= A and B; Z <= '0';
when 6 => F <= A or B; end if;
when 7 => F <= A; N <= F(F'left);
when others => F <= (others => 'X'); end if;
end case; end if;
end process; end if;
end process;

Dans cette description de l’UAL:


• les opérations sont fixes

• l’encodage est fixe

• la façon d’établir la valeur des bits d’état est fixe

• la largeur de l’UAL est déterminée par le paramètre Wd

Conception et implémentation de systèmes numériques 27


UAL - suite
• Plusieurs auteurs distinguent l’UAL et le module de décalage. Nous choisissons
ici de les joindre, c'est-à-dire que l’UAL est capable d’effectuer des opérations
arithmétiques, logiques et de décalage.
• L’UAL inclut ici un registre d’état. La fonction de ce registre est d’entreposer un
mot d’information sur la dernière opération effectuée, comme un résultat
négatif ou nul, un débordement ou la génération d’une retenue. Ici l’état se
résume à 2 bits, Z et N, indiquant respectivement un résultat nul ou négatif.
• Lors d’une opération sur l’UAL, le résultat est entreposé dans un registre du bloc
des registres. L’état correspondant est entreposé dans le registre d’état. Cette
approche simplifie la synchronisation avec l’unité de contrôle.
• La complexité de l’UAL est une fonction de sa largeur et du nombre d’opérations
qu’elle doit supporter.

Conception et implémentation de systèmes numériques 28


Mémoire des données
• En théorie, un processeur avec un bloc des registres suffisamment grand n’aurait
pas besoin d’une mémoire des données associée. C’est souvent le cas pour les
processeurs spécialisés. En pratique cependant, un processeur à usage général a
toujours besoin d’une telle mémoire.
• Pour la plupart des processeurs, la mémoire des données est placée à l’extérieur
de celui-ci.
• La mémoire des données a en général un port de sortie, un port d’entrée, un
port d’adresse et un port de contrôle de l’opération. La mémoire peut avoir
plusieurs ports d’entrée et de sortie. En général, il est utile que les cellules de la
mémoire aient est la même taille que celles du bloc des registres, mais ce n’est
pas strictement nécessaire.
• Le port d’adresse spécifie une cellule de la mémoire en particulier. Le signal
lecture/ecriture’ détermine si la cellule sera lue (1) ou écrite (0).

Conception et implémentation de systèmes numériques 29


Mémoire des données en VHDL
• Une mémoire vive peut être vue comme un bloc de registres de très grande
taille, avec:
– un (parfois deux) port de sortie
– un (parfois deux) port d’entrée
– un (parfois deux) port d’adresse
– un port de contrôle de l’opération.
• La description d’une mémoire des données en VHDL peut prendre plusieurs
formes, selon une multitude de paramètres. Ceux-ci incluent, entre autres :
– le nombre de ports d’entrée et de sortie;
– le fait que les sorties soient synchrones ou asynchrones;
– le nombre de cycles nécessaires à la mémoire pour déplacer des données;
– la présence de signaux d’activation; et,
– la spécification de valeurs initiales.
Il faut consulter la documentation du synthétiseur pour
adopter le bon patron de code VHDL correspondant aux
paramètres de la mémoire RAM désirée.

Conception et implémentation de systèmes numériques 30


Mémoire des données en VHDL

-- dans la partie déclarative de l’architecture


type memoireDonnees_type is array(0 to 2 ** Md - 1) of signed(Wd - 1 downto 0);
signal memoireDonnees : memoireDonnees_type;
signal sortieMemoireDonnees : signed(Wd - 1 downto 0);
signal adresseMemoireDonnees : integer range 0 to 2 ** Md - 1;
signal lectureEcritureN : std_logic;

-- dans le corps de l’architecture


-- mémoire des données
process (CLK)
begin Important: pas de signal de réinitialisation
if rising_edge(CLK) then dans le modèle, ce qui empêcherait le
if lectureEcritureN = '0' then
memoireDonnees(adresseMemoireDonnees) <= B; synthétiseur d’utiliser la mémoire distribuée.
end if;
end if;
end process;

sortieMemoireDonnees <= memoireDonnees(adresseMemoireDonnees);

Dans cette description de la mémoire:


• le nombre de mots est déterminée par le paramètre Md

• la taille des mots est déterminée par le paramètre Wd

• habituellement, la lecture d’une donnée nécessite un

cycle d’horloge pour charger l’adresse, ce n’est pas


Conception et implémentation de systèmes numériques modélisé ici 31
Plan
• Mise en contexte
• Retour sur les processeurs à usage spécifique
• Processeurs à usage général: introduction
• Chemin des données
• Unité de contrôle

Conception et implémentation de systèmes numériques 32


Unité de contrôle du processeur à usage général

registre
d’instructions etatUAL

sortie D Q

charge

signaux de controle
choixSource
mémoire des instructions choixCharge
charge
contrôleur choixA
compteur de choixB
programme reset
depart

opération
lectureEcriture’
adresse Q D quérir
IR <= MI[PC]
PC <= PC + 1

compte
décoder

charge exécuter

Conception et implémentation de systèmes numériques 33


Unité de contrôle du processeur à usage général
• L’unité de contrôle du processeur doit effectuer les opérations en fonction des
instructions du programme à exécuter.
• L’unité de contrôle est composée des blocs suivants :
– une mémoire des instructions contenant le programme à exécuter;
– un compteur de programme (Program Counter – PC) qui pointe à la
prochaine instruction à exécuter;
– un registre d’instruction (Instruction Register – IR) qui contient l’instruction
courante; et,
– un contrôleur qui implémente une machine à états et qui génère les signaux
de contrôle pour le chemin des données.
• Certains auteurs séparent la mémoire du programme et l’unité de contrôle, mais
ici nous les combinons. On peut aussi considérer le registre d’états de l’UAL
comme faisant partie de l’unité de contrôle.

Conception et implémentation de systèmes numériques 34


Choix d’approche pour l’encodage des instructions
• Le code d’une instruction doit permettre de spécifier sans ambiguïté tous les
signaux de contrôle du chemin des données.
• Il y a trois grandes approches: CISC, RISC et NISC

Nous choisissons l’approche RISC.

•Les signaux de contrôle du chemin


des données sont encodés, ce qui
réduit la taille du programme.

•La spécification du processeur


monte alors au niveau du jeu
d’instructions.

L’implémentation peut être


différente pour deux processeurs qui


ont le même comportement.

NISC Technology and Toolset, University of California Irvine, [en ligne:


http://www.ics.uci.edu/~nisc/], consulté le 2009/11/11

Conception et implémentation de systèmes numériques 35


Cycle des instructions et machine à états
• Pour exécuter une instruction, l’unité de contrôle doit exécuter la séquence de
tâches suivante :
– Aller quérir l’instruction à exécuter (fetch).
•Le registre des instructions est chargé avec le contenu de la cellule de la mémoire des
instructions pointée par le compteur de programme.
• Le compteur de programme est incrémenté pour pointer à la prochaine instruction ou à
des données emmagasinées immédiatement après l’instruction en cours.
– Décoder l’instruction (decode).
• Le contrôleur décode l’instruction obtenue afin de générer les signaux de contrôle pour le
chemin des données.
– Exécuter l’instruction (execute).
• Le chemin des données exécute l’instruction.
• Cette étape peut être décomposée en plusieurs états selon la complexité de l’instruction.

Conception et implémentation de systèmes numériques 36


Cycle des instructions et machine à états

reset
depart

Le registre des instructions est chargé avec le


contenu de la cellule de la mémoire des
instructions pointée par le compteur de
quérir
IR <= MI[PC] programme.
PC <= PC + 1
Le compteur de programme est incrémenté pour
pointer à la prochaine instruction ou à des
données emmagasinées immédiatement après
registre
d’instructions etatUAL
l’instruction en cours.
sortie D Q

Le contrôleur décode l’instruction obtenue afin


charge
décoder
signaux de controle

mémoire des instructions de générer les signaux de contrôle pour le


contrôleur chemin des données.
compteur de
programme

adresse Q D

compte
charge

exécuter
Le chemin des données exécute l’instruction.

Conception et implémentation de systèmes numériques 37


Encodage des instructions en mémoire
• Suppositions:
– le chemin des données contient 16 registres de 16 bits, R0 à R15
– l’ALU peut exécuter les 8 instructions énumérées précédemment; et,
– les mémoires des données et des instructions contiennent 256 mots de 16
bits.instruction bits 15-12 bits 11-8 bits 7-4 bits 3-0

Rdest ← Rsource1 ◊ Rsource2 {0|op2|op1|op0} destination source1 source2


Rdest ← MD[adresse] 1000 destination adresse[7:4] adresse[3:0]
MD[adresse] ← Rsource 1001 source adresse[7:4] adresse[3:0]
JUMP adresse 1100 condition adresse[7:4] adresse[3:0]
STOP 1111 - - -

bits 11-8 de Pour l’instruction qui nécessite un traitement par l’ALU, les
instruction condition
l’instruction 3 bits {op2|op1|op0} correspondent à l’encodage des
JUMP aucune 0000 opérations de l’ALU.
JZ zéro 0001
Pour l’instruction JUMP, les différentes combinaisons des
JNZ pas zéro 0010 bits 11-8 de l’instruction permettent d’avoir jusqu’à 16
JNeg négatif 0011 conditions différentes. Ce tableau en propose cinq.
JPos positif 0100
Conception et implémentation de systèmes numériques 38
Exemples d’encodage d’instructions

instruction bits 15-12 bits 11-8 bits 7-4 bits 3-0

R7 ← R5 + R2 0000 0111 0101 0010


R9 ← R0 – R11 0001 1001 0000 1011
R8 ← R4 0111 1000 0100 ----
R12 ← MD[240] 1000 1100 1111 0000
MD[28] ← R10 1001 1010 0001 1100
JZ 2 1100 0001 0000 0010

On observe que plusieurs codes ne sont pas valides, comme


par exemple ceux qui commencent par 101. De plus, certaines
opérations n’utilisent pas tous les champs. Bien que cela
signifie que plus de bits sont utilisés que nécessaire, cela
donne de la flexibilité pour ajouter des instructions au
processeur.

Conception et implémentation de systèmes numériques 39


Mémoire des instructions en VHDL
• La mémoire des instructions n’est que lue pendant l’opération du processeur.
• L’écriture initiale n’est faite que lors de la configuration du dispositif.
• La mémoire est définie dans la partie déclarative de l’architecture comme un
tableau constant à deux dimensions dans lequel on place les valeurs des
instructions du programme.
• Le code suivant définit une mémoire qui contient les 6 instructions données en
exemple, suivies de 250 cases contenant FFFF (instruction STOP).

-- dans la partie déclarative de l’architecture


type memoireInstructions_type is array (0 to 2 ** Mi - 1)
of std_logic_vector(Wi - 1 downto 0);
constant memoireInstructions : memoireInstructions_type :=
(x"0752", x"190b", x"7840", x"8cf0", x"9a1c", x"c102", others => x"FFFF");

Conception et implémentation de systèmes numériques 40


Machine à états plus détaillée

reset
depart

quérir
IR <= MI[PC]
PC <= PC + 1

L’état ‘exécuter’ a été remplacé par d’autres


états.
décoder type = stop STOP

À partir de l’état décoder, la machine peut


type = déplacement vers la mémoire passer à l’un de cinq états, correspondant aux
cinq types d’instructions du processeur.
type = chargement de la mémoire

type = JUMP Dans chacun des ces états, les signaux de


type = UAL contrôle appropriés doivent être générés pour le
chemin des données.

UAL
écrire dans lire la
registre- JUMP
la mémoire mémoire
registre

Conception et implémentation de systèmes numériques


Code VHDL pour l’unité de contrôle (1/3)
-- dans la partie déclarative de l’architecture
type type_etat is (depart, querir, decoder, stop, ecrireMemoire, lireMemoire, opUAL, jump);
signal etat : type_etat;
signal PC : integer range 0 to (2 ** Mi - 1); -- compteur de programme
signal IR : std_logic_vector(Wi - 1 downto 0); -- registre d'instruction

-- dans le corps de l’architecture


process (CLK, reset)
begin
if rising_edge(CLK) then
if reset = '1' then
etat <= depart;
else
case etat is
when depart =>
PC <= 0;
etat <= querir;
when querir =>
IR <= memoireInstructions(PC);
PC <= PC + 1;
etat <= decoder;

Conception et implémentation de systèmes numériques 42


Code VHDL pour l’unité de contrôle (2/3)
when decoder =>
if (IR(15) = '0') then
etat <= opUAL;
else
case IR(14 downto 12) is
when "000" => etat <= lireMemoire;
when "001" => etat <= ecrireMemoire;
when "100" => etat <= jump;
when "111" => etat <= stop;
when others => etat <= stop;
end case;
end if;
when opUAL | lireMemoire | ecrireMemoire =>
etat <= querir;
when jump =>
if (IR(11 downto 8) = "0000") or -- branchement sans condition
(IR(11 downto 8) = "0001" and Z = '1') or -- si = 0
(IR(11 downto 8) = "0010" and Z = '0') or -- si /= 0
(IR(11 downto 8) = "0011" and N = '1') or -- si < 0
(IR(11 downto 8) = "0100" and N = '0') -- si >= 0
then
PC <= to_integer(unsigned(IR(7 downto 0)));
end if;
etat <= querir;
when stop =>
etat <= stop;
when others =>
etat <= depart;
end case;
end if;
end if;
end process;

Conception et implémentation de systèmes numériques 43


Code VHDL pour l’unité de contrôle (3/3)

adresseMemoireDonnees <= to_integer(unsigned(IR(7 downto 0)));

lectureEcritureN <= '0' when etat = ecrireMemoire else '1';

choixSource <= 0 when etat = opUAL else 3;

choixCharge <= to_integer(unsigned(IR(11 downto 8)));

choixA <= to_integer(unsigned(IR(7 downto 4)));

choixB <= to_integer(unsigned(IR(11 downto 8))) when etat = ecrireMemoire else


to_integer(unsigned(IR(3 downto 0)));

charge <= '1' when etat = opUAL or etat = lireMemoire else '0';

op <= to_integer(unsigned(IR(14 downto 12)));

L’adresse de la mémoire des données est contenue dans les bits 7 à 0 du registre
d’instructions, sauf pour les instructions concernant l’UAL.

Cependant, comme la sortie de la mémoire n’est pas sollicitée pour les instructions
concernant l’UAL, on peut se permettre de simplifier la description et ne pas
inclure de condition en rapport avec l’état de la machine.

Conception et implémentation de systèmes numériques 44


Exemple de programme

instruction bits 15-12 bits 11-8 bits 7-4 bits 3-0

R0 ← M[0] 8 0 0 0

R1 ← M[1] 8 1 0 1

R12 ← R0 – R1 1 C 0 1

JPos 5 C 4 0 6

R12 ← R1 – R0 1 C 1 0

M[3] ← R12 9 C 0 3

STOP F - - -

Conception et implémentation de systèmes numériques 45


Le processeur au complet

choixSource
registre d’état

0 état
constante 1 donnée
entréeExterne 2 A A
3

sortie bloc des registres UAL F

adresse
choixCharge B B
mémoire des données
charge
clk
choixA choixB opération
lecture/ecriture’
entree
clk

sortieExterne

registre
d’instructions etatUAL

sortie D Q

charge

signaux de controle
mémoire des instructions

contrôleur
compteur de
programme

adresse Q D

compte
charge
Conception et implémentation de systèmes numériques 46
Prochaine étape …
• L’écriture directe d’un programme en codes de 16 bits est ardue.
• Pour simplifier la tâche, on peut utiliser un programme spécial appelé
assembleur qui donne automatiquement les codes numériques des instructions
à partir de leur représentation symbolique.
• Pour les programmes très complexes, cependant, on utilise plutôt un
compilateur qui accepte en entrée un programme dans un langage de haut
niveau comme C ou Python et qui produit les codes des instructions.
• Le compilateur doit s’appuyer sur une connaissance approfondie des
instructions pouvant être réalisées par le processeur ainsi que des architectures
de son chemin des données et de son unité de contrôle.
• Un simulateur et un débogueur seraient bien aussi … 

Conception et implémentation de systèmes numériques 47


Fréquence maximale d’horloge et chemin critique
Exemple
• Considérons le circuit suivant. Supposons:
– les bascules ont un temps de préparation de 1 ns et un délai de propagation de 2 ns;
– les portes logiques INV, ET, OU et OUX ont des délais de propagation de 1, 2, 2 et 3
ns, respectivement.
– on peut négliger les délais de propagation des interconnexions.
• Dans ce cas, le chemin critique est B – INV – OUX – OU – F et la période
minimale d’horloge est 2 + 1 + 3 + 2 + 1 = 9 ns.

D Q
A D Q
D Q
CLK B
F
CLK D Q
CLK
C
CLK

Tmin = td + tcomb + t prop + t su


Conception et implémentation de systèmes numériques

Vous aimerez peut-être aussi