Vous êtes sur la page 1sur 5

TD 2 19 20 TD 2

faire un ET logique entre le signal du décodeur et W ; le signal résultant est lui-même utilisé pour
TD 2 - C IRCUITS SÉQUENTIELS inhiber l’horloge entrant dans le registre à l’aide d’un autre ET logique.
Le banc de registres 1-bit est donné sur la figure 7. Voir le fichier reg.lgf.

Comparaison des circuits séquentiels élémentaires, banc de registres et registres à


décalages.
Page web : http://www-rocq.inria.fr/~ acohen/teach/archi.html
Support : wire.lgf comporte des « macros » pour faciliter le dessin de circuits ré-

"BANK_1b"
pétitifs et reg_mask.lgf propose un masque du banc de registres (avec les circuits
séquentiels de base).

AND_1x8b

BANK_1b
3->8
Exercice 2.1 - Banc de registres

W
CLOCK
On souhaite réaliser un banc de registres en DigLog.
Le banc de registres vu en cours comporte :

MUX8x1_1b
8 registres 1-bit
1. un circuit séquentiel de mémorisation, généralement une bascule D, pour chaque
bit de chaque registre du banc ;
2. un port d’écriture comportant un décodeur pour sélectionner le numéro de re-

MUX8x1_1b
gistre qui doit être modifié (e.g., le résultat d’une addition) ;
3. deux ports de lecture constitués de multiplexeurs pour sélectionner les deux re-
gistres que l’on souhaite lire (e.g., les opérandes d’une addition).
D’autre-part, on rappelle qu’une bascule D est constituée de deux latches en sé-
quence avec une horloge inversée ; ce circuit joue le rôle d’un « sas » dont les « portes »
s’activent lors des phases descendantes et ascendantes de l’horloge.
Question 2.1.1
Construire un banc de 8 registres 16-bits, avec un port d’écriture et deux ports de
lecture (pour la lisibilité du circuit, on construira en fait un banc de 8 registres 1-bit F IG . 7 – Banc de registres 1-bit
que l’on utilisera 16 fois).Penser à utiliser efficacement la composition hiérarchique
des éléments (bascules D, décodeur, multiplexeurs) en DigLog.
Réponse Exercice 2.2 - Registre à décalage
Il faut dupliquer la sortie de chaque registre car un même registre peut être lu deux fois au
même cycle (par exemple pour l’instruction ADD R0, R0 rightarrow R1). Outre les registres classiques, un processeur contient souvent des registres à déca-
Pour chaque port de lecture, on doit disposer d’un multiplexeur 8 × 1 ; ce multiplexeur est lage utilisés pour des manipulations de bits, des calculs d’adresses et des opérations
directement commandé par le numéro du registre à lire.
logiques. On veut maintenant construire un tel registre à décalage.
Pour l’écriture, on doit disposer d’un décodeur 3 → 8 ; chaque signal correspond à la com-
mande d’écriture d’un des registres. Comme l’écriture peut être inhibée par le signal W , il faut Question 2.2.1
En utilisant le registre 1-bit défini dans le fichier reg_mask.lgf, réaliser un re-
TD 2 21 22 TD 2
0
"SHIFT"
gistre 4-bits capable d’effectuer un décalage de 1 bit vers la gauche ou vers la droite SHIN_0 SHIFT DFLIPFLOP_1b SHOUT_0
NEW
en un cycle (à partir de la valeur enregistrée). On effectuera un décalage « logique »,
c’est-à-dire que l’on introduira des 0 à droite ou à gauche, respectivement. Le registre SHIN_1 SHIFT DFLIPFLOP_1b SHOUT_1 DIR
doit pouvoir se comporter soit comme un registre classique, soit comme un registre à
décalage ; on dispose pour cela d’un signal NEW (1 = registre classique, 0 = registre SHIFT
OUT
à décalage). On dispose également d’un signal DIR indiquant la direction du décalage SHIN_2 SHIFT DFLIPFLOP_1b SHOUT_2
LEFT
(1 = décalage à droite, 0 = décalage à gauche). IN

Réponse SHIN_3 SHIFT DFLIPFLOP_1b SHOUT_3 RIGHT


On suppose que le registre 4-bits est initialisé à l’aide d’un signal NEW lors d’un top d’hor-
loge. On introduit un signal DIR de direction de décalage, et on suppose que le décalage ne se SHIN_4 SHIFT DFLIPFLOP_1b SHOUT_4
fait que lorsque NEW est à 0. La brique de base du registre à décalage est donc une bascule D
précédée d’un multiplexeur sélectionnant soit l’entrée d’initialisation — NEW = 1 — soit le bit DFLIPFLOP_1b

immédiatement à gauche dans les sorties des bascules — NEW = 0 et DIR = 1 — soit le bit SHIN_5 SHIFT DFLIPFLOP_1b SHOUT_5
immédiatement à droite dans les sorties des bascules — NEW = 0 et DIR = 0 ; l’entrée de gauche DLATCH_1b
DLATCH_1b

(resp. droite) du multiplexeur de poids le plus fort (resp. faible) étant relié au signal nul. "DFLIPFLOP_1b"
SHIN_6 SHIFT DFLIPFLOP_1b SHOUT_6
Voir le circuit de la figure 8 — réalisé pour un registre 16-bits — et le fichier shift.lgf.

Question 2.2.2 SHIN_7 SHIFT DFLIPFLOP_1b SHOUT_7


En utilisant un circuit combinatoire réalisé à la question précédente, construisez "DLATCH_1b"
"RS_1b"
maintenant un circuit capable d’effectuer d décalages, 0 ≤ d < 4, à droite ou à gauche
SHIN_8 SHIFT DFLIPFLOP_1b SHOUT_8 DLATCH_1b
sur un mot de 4 bits, en un seul cycle. Un tel circuit s’appelle un barrel shifter.
Réponse
SHIN_9 SHIFT DFLIPFLOP_1b SHOUT_9
On peut réaliser un circuit de taille n log2 n en enchaînant log2 n colonnes de n multiplexeurs RS_1b
4 × 1 dont les entrées sont décalées à droite ou à gauche de n, n/2, . . . , 2, et 1 bits respec-
tivement. Chaque multiplexeur est contrôlé par un signal DIR de direction et un signal SHk , SHIN_10 SHIFT DFLIPFLOP_1b SHOUT_10
RS_1b

k ∈ {1, 2, . . . , n/2, n} pour sélectionner une entrée décalée ou non. Le schéma de décalage à
gauche pour n = 8 est donné sur la figure 9.
Voir le circuit de la figure 10 — réalisé pour un registre 16-bits — et le fichier barrel.lgf, SHIN_11 SHIFT DFLIPFLOP_1b SHOUT_11
en ignorant les multiplexeurs 2 × 1 qui font partie de la correction de l’exercice suivant. 0
SHIN_12 SHIFT DFLIPFLOP_1b SHOUT_12

SHIN_13 SHIFT DFLIPFLOP_1b SHOUT_13 CLOCK

DIR
SHIN_14 SHIFT DFLIPFLOP_1b SHOUT_14
NEW

SHIN_15 SHIFT DFLIPFLOP_1b SHOUT_15


DIR 0
NEW
CLOCK

F IG . 8 – Registre à décalage
TD 2
24

0 1 0 1 0 1
D0 0 0 0 Q0
23

0 1 0 1 1
D1 0 0 0 Q1
F IG . 9 – Schéma d’un barrel shifter 8-bits (décalage à gauche)

0 1 1 1
D2 0 0 0 Q2

0 1 1 1
D3 0 0 0 Q3

1 1 1
D4 0 0 0 Q4

1 1 1
D5 0 0 0 Q5

1 1 1
D6 0 0 0 Q6
TD 2

1 1 1
D7 0 0 0 Q7

S2 S1 S0
TD 2 25 26 TD 2

0
SHIN_0 SHOUT_0
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
MUX2x1_1b MUX2x1_1b MUX2x1_1b MUX2x1_1b
SHIN_1 SHOUT_1
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
0
1
MUX2x1_1b
1 MUX2x1_1b MUX2x1_1b MUX2x1_1b
SHIN_2 SHOUT_2
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
"MUX2x1_1b" MUX2x1_1b MUX2x1_1b
SHIN_3 SHOUT_3
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
MUX2x1_1b MUX2x1_1b
SHIN_4 SHOUT_4
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
MUX2x1_1b
DIR SHIN_5 SHOUT_5
SHIFT SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
0
MUX2x1_1b
SHIFT_1b
SHIN_6 SHOUT_6
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
RIGHT
MUX2x1_1b
SHIN_7 SHOUT_7
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
LEFT
MUX2x1_1b

"SHIFT_1b" SHIN_8 SHOUT_8


SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
MUX2x1_1b
SHIN_9 SHOUT_9
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
MUX2x1_1b
SHIN_10 SHOUT_10
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
0 MUX2x1_1b
SHIN_11 SHOUT_11
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
MUX2x1_1b
SHIN_12 SHOUT_12
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
MUX2x1_1b MUX2x1_1b
SHIN_13 SHOUT_13
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
MUX2x1_1b MUX2x1_1b
SHIN_14 SHOUT_14
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
MUX2x1_1b MUX2x1_1b MUX2x1_1b
SHIN_15 SHOUT_15
SHIFT_1b SHIFT_1b SHIFT_1b SHIFT_1b
MUX2x1_1b MUX2x1_1b MUX2x1_1b MUX2x1_1b

ARITH
ROTATE
DIR
SH_8
SH_4
SH_2
SH_1

SH_1
SH_2 SHIN_12
SHIN_13 SHIN_8
SHIN_9 SHIN_4
SHIN_5 SHIN_0
SHIN_1
SH_4
SH_8 SHIN_14
SHIN_15 SHIN_10
SHIN_11 SHIN_6
SHIN_7 SHIN_2
SHIN_3

DIR
ARITH
ROTATE SHOUT_12
SHOUT_13 SHOUT_8
SHOUT_9 SHOUT_4
SHOUT_5 SHOUT_0
SHOUT_1
SHOUT_14
SHOUT_15 SHOUT_10
SHOUT_11 SHOUT_6
SHOUT_7 SHOUT_2
SHOUT_3

F IG . 10 – Circuit du barrel shifter


TD 2 27 28 TD 2
Question 2.2.3 Réponse
Pour un mot de n bits, quel est le nombre de multiplexeurs qu’un bit donné doit On ajoute une porte ET entre le signal ARITH et le bit de poids fort de l’entrée IN15 . Voir la
traverser lors d’un décalage de d bits, 0 ≤ d < n ? figure 10 et le fichier barrel.lgf.
Quelles seraient les conséquences si l’on cherchait à réduire encore la latence de
traversée du registre à décalage ?
Réponse
Sur le circuit précédent, il y a log2 n étapes de traversée quelle que soit la valeur de d .
Le barrel shifter est un compromis entre taille du circuit et latence de traversée. Si l’on
cherchait à obtenir une latence indépendante de n, on obtiendrait nécessairement un circuit de
taille exponentielle (un multiplexeur par valeur de d et une porte OU à n entrées par signal de
sortie ; un tel circuit ne serait réalisable que pour de petites valeurs de n.
Exercice 2.3 (facultatif) - Compléments sur le décalage
On étend le registre à décalage avec des opérations supplémentaires.
Question 2.3.1
Modifier le barrel shifter pour permettre le décalage logique, ainsi que la rotation
de d bits vers la gauche ou vers la droite.
Réponse
À chaque étage, on ajoute des multplexeurs 2 × 1 en amont des multiplexeurs de décalage.
Ceux-ci permettent de choisir entre un remplissage par des 0 ou par les bits évincés lors du
décalage — afin d’effectuer une rotation. Chaque bit rempli par un 0 ou un bit évincé nécessite
un muliplexeur 2 × 1 :
– le premier étage en nécessite 16, les 8 bits de poids fort (resp. faible) sont remplis lors
d’une rotation à droite (resp. gauche) ;
– le deuxième en nécessite 8, les 4 bits les plus à gauche et les 4 bits les plus à droite ;
– le troisième en nécessite 4 ;
– le quatrième en nécessite 2.
On peut remarquer que ces multiplexeurs peuvent être remplacés par des portes ET, l’une de leurs
entrées étant toujours nulle. Voir le circuit de la figure 10 et le fichier barrel.lgf.
Question 2.3.2
Si l’on considère maintenant que le registre à décalage ci-dessus contient un nombre
représenté en complément à 2, quel est l’effet d’un décalage à droite ? à gauche ? En
quoi le décalage d’un nombre est-il différent du décalage logique ? Le décalage d’un
nombre s’appelle le décalage « arithmétique ». Modifier le circuit ci-dessus pour qu’il
puisse effectuer soit un décalage logique, soit un décalage arithmétique.

Vous aimerez peut-être aussi