Organisation et contrôle d`un ordinateur de base

Transcription

Organisation et contrôle d`un ordinateur de base
CEG2536 : ARCHITECTURE DES ORDINATEURS I
Laboratoire : Organisation et contrôle d’un ordinateur
de base
Notes
•
•
Une pénalité de 10 points sera appliquée pour chaque jour de retard. Une heure de retard
sera considéré comme un jour!
Tous les étudiants doivent être au courant du règlement de l’université concernant la
fraude scolaire, et doivent être conscients des sanctions applicables en cas de fraude :
http://www.uottawa.ca/academic/info/regist/fraud_f.html
http://www.uottawa.ca/plagiat.pdf
http://www.sass.uottawa.ca/redaction/plagiarism-f.pdf
1.
Objectifs
Dans ce laboratoire, les étudiants vont mettre au point le contrôleur d’un ordinateur de base, et
utiliser des opcodes pour y écrire des programmes simples. La conception doit fonctionner en simulation,
et également dans la carte de développement UP2 d’Altera. Ce laboratoire est une sorte de préparation
au lab 4, dans lequel les étudiants devront concevoir un contrôleur plus sophistiqué, qui utilisera des
micro-programmes.
2.
Equipements
•
•
•
3.
Le logiciel Quartus II
La carte UP2 d’Altera avec câble Byte blaster et l’appareil EPF10K20RC240-4 PLD
De petites pinces dont le but sera de changer les “jumpers” de position.
Références
•
•
•
•
Vous avez à votre disposition tous les fichiers .bdf nécessaires, sauf un. Les schémas sont
montrés à la fin de ce document.
Chapitres 5 et 6 du livre: Computer Systems Architecture, Morris Mano, 3rd edition, 1993, ISBN
0-13-175563-3.
Le guide d’utilisateur du kit de développement UP2 d’Altera
(http://www.altera.com/literature/univ/upds.pdf). La carte décrite dans ce document est identique
aux cartes de nos labs, sauf qu’ils utilisent l’appareil EPF10K70 PLD. L’emplacement des pins
est le même sur les deux cartes.
La fiche technique de la famille des appareils FLEX 10K
(http://www.altera.com/literature/ds/dsf10k.pdf)
4.
Présentation du laboratoire
4.1
Vue d’ensemble
Ce laboratoire met en oeuvre une structure d’ordinateur très proche de celle présentée à la figure
5-4 de la page 130 de votre manuel. Il y a cependant deux différences majeures. D’abord, une mémoire
de 256x8 est utilisée dans le lab pour ranger les programmes et les données. Dans le livre, la mémoire
utilise des mots de 16 bits, et les instructions de référence à la mémoire (qui consistent en un opcode et
une adresse mémoire) tiennent dans un seul mot. Dans ce lab, la référence à la mémoire nécessite deux
cycles de lecture: un pour aller chercher l’opcode de 8 bits, et un autre pour récupérer l’adresse de la
donnée que l’opcode va utiliser. La deuxième différence majeure réside dans les circuits additionnels qui
permettront à un utilisateur de visualiser le contenu de la mémoire pendant le déroulement du
programme sur la carte UP2. Lorsqu’une adresse est sélectionnée par les interrupteurs DIP du FLEX
10K, alors le contenu de la mémoire à cette adresse sera montré en format hexadécimal sur les
afficheurs 7 segments de la carte.
Le système global est schématisé à la figure 1. Les fichiers .bdf de tous les blocs, sauf le
contrôleur, seront fournis aux étudiants. Le contrôleur fonctionne suivant une séquence temporelle qui est
déterminée par le compteur de séquence. Ce compteur compte à partir de 0 à chaque instruction du
programme, et est remis à 0 aussitôt que l’instruction est terminée. Le décodeur convertit la sortie de 4
bits du compteur de séquence en des signaux de temps distincts pour chaque sortie possible du
compteur (par exemple, lorsque la sortie du compteur est 0010, alors la sortie du décodeur, qu’on
appellera T2, se mettra au niveau haut, sinon elle demeurera au niveau bas pour toute autre sortie du
compteur). Le contrôleur est un circuit purement combinatoire. En d’autres termes, il ne contient aucun
Lab Université d’Ottawa
Page 2 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
registres, et n’est pas piloté par une horloge. Il est composé uniquement de portes ET, OU, et NON. Ceci
a été choisi pour ne pas que les étudiants se retrouvent face à des problèmes complexes de
synchronisation et de gestion du temps. Une banque de registres est utilisée pour stabiliser les
commandes qui sortent du contrôleur.
Output data register
(OUTD)
Data[7..0]
256x8 memory
Seven-segment
display controllers
Seven-segment
displays
Data[7..0]
Stop register
Address[7..0]
Address register (AR)
Bus
selector
Sequence
counter (SC)
Program counter (PC)
Decoder
Data register (DR)
IR[7..0]
Controller
Instruction register (IR)
DR[7..0]
Register bank
ALU
DIP switches
Accumulator (AC)
Output address register
(OUTA)
Control commands to
counters, registers, bus
multiplexer and ALU
Figure 1: Vue d’ensemble du système
Lab Université d’Ottawa
Page 3 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
À chaque cycle d’instruction, les étapes suivantes sont suivies:
1. L’adresse de sortie à être affichée, qui est spécifiée par les interrupteurs DIP, est chargée du
registre OUTA vers le registre AR.
2. Le contenu de la mémoire à cette adresse est chargé dans le registre OUTD, puis envoyé vers
les afficheurs 7 segment. Ces deux premières étapes sont toujours menées à terme, même si le
reste du système est en halte.
3. Le contenu du registre PC est chargé dans AR. PC est un compteur ordinal qui détermine
l’adresse à laquelle devra être lue la prochaine instruction. Puisque PC est remis à 0 lorsque la
carte est programmée, votre première instruction doit se trouver à l’adresse mémoire 00 (hex).
4. Le compteur ordinal est incrémenté.
5. L’instruction est importée de la mémoire et déposée dans l’IR.
6. L’instruction est décodée par le contrôleur.
7. Si l’instruction est référencée à un registre, passer à l’étape 10.
8. Si l’instruction est référencée à la mémoire, le PC est à nouveau transféré vers AR. L’adresse
dans AR est utilisée pour lire la mémoire, qui contient l’adresse de la donnée à être manipulée.
Ce nombre est chargé directement dans AR. Si l’adressage est indirect, la mémoire est lue une
seconde fois, et le résultat est chargé encore une fois dans AR.
9. La mémoire est lue pour importer la donnée, et le PC est incrémenté.
10. Le reste de l’instruction est implémenté, ce qui requiert typiquement plusieurs étapes.
11. Le compteur de séquence est remis à 0, et la procédure reprend à l’étape 1.
Ces étapes sont discutées en détail ci-dessous.
4.2
L’appareil EPF10K20
L’appareil EMP7128, qui a été utilisé dans les labs 1 et 2, n’est pas assez puissant pour
implémenter un ordinateur de base. Il est donc nécessaire d’utiliser l’appareil programmable logique
(PLD) FLEX 10K, qui se trouve sur le côté droit de la carte UP2. Ceci n’implique que très peu de
changements dans les procédures à suivre:
1. Il est nécessaire de modifier les positions des « jumpers » sur la carte UP2. Ceci sera expliqué
dans la section « procédure ».
2. L’appareil est programmé en utilisant un fichier .sof, et non plus un fichier .pof.
3. Vous utiliserez un nouveau type de fichier, un fichier d’initialisation de mémoire (.mif), pour
spécifier le contenu de la mémoire. A chaque fois que vous changez le contenu de ce fichier, il
faut recompiler le projet. Pour ce lab, le fichier .mif sera toujours appelé memorycontents8.mif.
4. A chaque fois que vous voulez exécuter le programme que vous avez chargé dans la mémoire, il
vous faut reprogrammer l’appareil.
Lab Université d’Ottawa
Page 4 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
4.3
Syntaxe des instructions de l’ordinateur
Les instructions qui doivent être exécutées par l’ordinateur sont montrées dans la Table 1. Le premier
bit détermine si l’instruction est directe ou indirecte, tandis que les 7 bits restants forment un opcode.
Pour les instructions référencées à la mémoire, un deuxième accès mémoire est nécessaire pour lire
l’opérande.
Table 1: Instructions de l’ordinateur
Type
d’Instruction
Référence à la
mémoire
Référence à un
registre
AND
ADD
SUB
LDA
STA
BUN
Codes binaires/hex
I=0
I=1
00 000001 / 01
10 000001 / 81
00 000010 / 02
10 000010 / 82
00 000011 / 03
10 000011 / 83
00 000100 / 04
10 000100 / 84
00 001000 / 08
10 001000 / 88
00 010000 / 10
10 010000 / 90
ISZ
00 100000 / 20
Symbole
10 100000 / A0
CLA
CMA
ASL
ASR
INC
01 000001 / 41
01 000010 / 42
01 000100 / 44
01 001000 / 48
01 010000 / 50
HLT
01 100000 / 60
Description
Faire un ET de la mémoire avec AC
Ajouter un mot de la mémoire à AC
Soustraire de AC un mot de la mémoire
Charger un mot de la mémoire vers AC
Charger le contenu de AC dans la mémoire
Embranchement inconditionnel
Incrémenter le nombre dans la mémoire, et
sauter l’instruction suivante si le nombre
incrémenté est 0
Remise à 0 de AC
Complément de AC
Décalage à gauche arithmétique de AC
Décalage à droite arithmétique de AC
Incrémentation de AC
Halte. Met un bit d’arrêt à 1, ce qui empêche le
compteur ordinal PC d’être incrémenté.
Considérons maintenant le fichier qui montre un programme simple dan la mémoire. La première colonne
indique l’adresse dans la mémoire tandis que la deuxième indique l’instruction. Le symbole % délimite
les commentaires. Le programme commence à l’adresse 00, et charge le registre AC avec le nombre qui
se trouve à l’adresse 80. Ce nombre est 1A. L’instruction suivante est une instruction référencée à un
registre, ASL, qui est effectuée en une seule lecture de mémoire. Le contenu de AC est décalé à gauche
et devient 34. La commande suivante additionne le nombre rangé à l’adresse 81 et AC, c’est à dire, fait
34 + 2B = 5F. Ce nombre est rangé à l’adresse A0. La commande suivante est une soustraction
indirecte. L’adresse 90 contient un pointeur à l’adresse 82, qui contient le nombre à être soustrait, 65.
L’opération est alors 5F – 65 = FA. Le nombre FA est alors rangé à l’adresse mémoire A1, puis le
programme est arrêté. En choisissant les adresses A0 et A1 par les interrupteurs DIP, il serait alors
possible de visualiser les nombres 5F et FA sur les afficheurs 7 segment. Le fichier .mif qui représente ce
programme est montré dans figure 2.
Lab Université d’Ottawa
Page 5 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
Exemple d’un programme dans la memoire :
%
00
01
02
03
04
05
06
07
08
09
0a
0b
LE PROGRAMME SE TROUVE DANS LA PLAGE D’ADRESSES 00 A 7F %
: 04;
% LDA (direct) %
: 80;
% de l’adresse 80; AC contient alors le nombre 1a
: 44;
% ASL (direct); AC contient maintenant 34 %
: 02;
% ADD (direct) %
: 81;
% le nb a l’adresse 81 vers AC; AC contient 5F %
: 08;
% STA (direct) %
: a0;
% AC vers l’adresse mémoire a0 %
: 83;
% SUB (indirect) %
: 90;
% nb est pointe par l’adresse 90; 5F – 65 = FA %
: 08;
% STA (direct) %
: a1;
% AC vers l’adresse mémoire a1 %
: 60;
% HLT %
%
80
81
82
LES DONNEES SE TROUVENT AUX ADRESSES 80 A FF
: 1a;
: 2b;
: 65;
%
%
90 : 82;
%
%
adresse a0 est reservee pour le resultat de l’addition %
adresse a1 est reservee pour le resultat de la soustraction %
Figure 2: Fichier .mif qui représente le programme
Université d’Ottawa
Lab CEG2536: Architecture des Ordinateurs I (Automne 2007)
Page 6 de 23
A partir de la Table 1, on observe que les trois types de commandes distinctes peuvent être
différenciés en regardant les deux bits les plus significatifs du registre d’instruction:
1.
X 0 = IR7 IR6 dénote une instruction avec référence directe à la mémoire;
2.
X1 = IR7 IR6 dénote une instruction avec référence à un registre; et
3.
X 2 = IR7 IR6 dénote une instruction avec référence indirecte à la mémoire.
Les sept instructions de référence à la mémoire peuvent aussi être séparées par les signaux de contrôle
suivants (notez que X 0 + X 2 = IR6 ).
1.
Y0 = IR6 IR1IR0 : AND;
2.
Y1 = IR6 IR1 IR0 : ADD;
3.
Y2 = IR6 IR1IR0 : SUB;
4.
Y3 = IR6 IR2 : LDA;
5.
Y4 = IR6 IR3 : STA;
6.
Y5 = IR6 IR4 : BUN; et
7.
Y6 = IR6 IR5 : ISZ.
Ces désignations pour X et Y seront utilisés dans la section suivante.
Lab Université d’Ottawa
Page 7 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
4.4
Description détaillée des fonctions de contrôle
Les trois tables suivantes détaillent le cycle d’instruction; lisez-les attentivement et assurez-vous
que vous comprenez bien chaque étape. Ces tables vont vous aider à concevoir le contrôleur de
l’ordinateur. La table de fonction de l’ALU est décrite en Table 5.
Table 2: Début du cycle d’instruction (commun à tous les types d’instruction)
Instant
Notation RTL
T1
Description
Charger le contenu du registre de sortie d’adresse OUTA
dans AR
Lire la mémoire et charger le registre de sortie de données,
OUTD
T2
Charger le compteur ordinal PC dans AR, et incrémenter le
compteur ordinal.
T2 : AR ← PC
T0
T3
T4
Lire l’instruction de la mémoire, et mettre le résultat de la
lecture dans le registre d’instruction IR
Ceci est un cycle non alloué pour permettre à la nouvelle
valeur de l’instruction de se propager dans le contrôleur.
Si X 1 , exécuter une instruction référencée à un registre.
T5
Si X 0 ou X 2 , lire l’adresse mémoire de l’opérande et la
mettre dans AR, et incrémenter le PC. Rappelez vous que
T6
T7
T8 et après
T0 : AR ← OUTA
T1 : OUTD ← M [AR ]
T2 S : PC ← PC + 1
T3 : IR ← M [AR]
(rien)
T5 X 1 : exécute une instruction de la Table 3.
T5 X1 : SC ← 0
T5 IR6 : AR ← PC
( X 0 + X 2 ) = IR6 .
T5 IR6 S : PC ← PC + 1
Lire l’adresse mémoire dans AR
T6 IR 6 : AR ← M [AR ]
Si la référence à la mémoire est indirecte, lire l’adresse
mémoire à nouveau dans AR
(Si la référence à la mémoire est directe, aucune action
supplémentaire n’est nécessaire)
Exécuter les instructions de référence à la mémoire décrites
à la Table 4.
T7 X 2 : AR ← M [AR]
T7 X 0 : (rien!)
(voir Table 4)
Table 3: Contrôle des instructions référencées à un registre
Lab Université d’Ottawa
Symbole
CLA
Notation RTL
CMA
T5 X1IR1 : AC ← AC
ASL
ASR
INC
HLT
T5 X1IR2 : AC ← ashl AC
T5 X1 IR0 : AC ← 0
T5 X1IR3 : AC ← ashr AC
T5 X1IR4 : AC ← AC + 1
T5 X1IR5 : S ← 1
Page 8 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
Table 4: Contrôle des instructions référencées à la mémoire
Symbole
Notation RTL
T8Y0 : DR ← M [AR]
AND
T9Y0 : AC ← AC ∧ DR, SC ← 0
T8Y1 : DR ← M [AR]
ADD
T9Y1 : AC ← AC + DR, SC ← 0
T8Y2 : DR ← M [AR ]
SUB
T9Y2 : AC ← AC − DR, SC ← 0
T8Y3 : DR ← M [ AR]
LDA
T9Y3 : AC ← DR, SC ← 0
T8 : (cycle non alloué pour permettre au bus d’adresse de
STA
se stabiliser)
BUN
T8Y5 : PC ← AR, SC ← 0
T9Y4 : M [AR ] ← AC , SC ← 0
ISZ
(sous-entend
que
l’instruction suivante est
une instruction référencée à
la mémoire, deux adresses
plus loin)
T8Y6 : DR ← M [ AR]
T9Y6 : DR ← DR + 1
T10Y6 : M [ AR] ← DR
T11Y6 : si ( DR = 0) alors (S : PC ← PC + 1)
T12Y6 : si ( DR = 0) alors (S : PC ← PC + 1), SC ← 0
Table 5: Table de function de l’ALU
S2
0
0
0
0
1
1
1
1
Lab Université d’Ottawa
S1
0
0
1
1
0
0
1
1
S0
0
1
0
1
0
1
0
1
Operation
AC + DR
AC + DR’ + 1
ashl AC
ashr AC
AC ∧ DR
AC ∨ DR
DR
AC’
Description
Addition
Soustraction: AC-DR
Décalage arithmétique à gauche de AC
Décalage arithmétique à droite de AC
ET logique
OU logique
Transfer de DR
Complément de AC
Page 9 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
5.
Préparation / Prélab
5.1
Analyse des fichiers disponibles
Dans cette section, il vous faut analyser les fichiers .bdf qui vous sont fournis. Vous pouvez faire
cela soit en utilisant Quartus II, soit en observant les schémas à la fin de ce document (3 - 11). Vous
n’êtes pas obligés de comprendre en détail la façon dont la RAM fonctionne (ram256x8), ni le contrôleur
d’affichage 7 segments. Le schéma du compteur de séquence de 4 bits n’est pas inclus dans les figures
ci-dessous, car le compteur possède la même architecture que le compteur de 8 bits, mais tronqué à 4
bits. Finalement, le code VHDL du multiplexeur du bus est inclus dans la Table 7. Bien que vous n’ayez
pas encore vu le VHDL, vous verrez que le code est facile à comprendre, et beaucoup plus simple à
implémenter que ne le serait un .bdf.
En utilisant les schémas, répondez aux questions suivantes :
1. Faites un diagramme qui montre la hiérarchie des fichiers, avec lab3top au sommet. Pour les
fichiers lab3controller, ram256x8, et sevensegcontroller, vous n’avez pas à identifier de sousfichiers.
2. Comment est-on assuré, en observant les fichiers, que seul un registre à la fois placera sa sortie
sur le bus de données à chaque instant ?
3. Les commandes de remise à 0 des registres sont-elles synchrones ou asynchrones ? Expliquez
votre réponse. Notez que toutes les commandes sont actives au niveau haut (c’est-à-dire qu’un
« 1 » va remettre un registre à 0).
4. Que se passe-t-il si une commande de chargement et de remise à 0 sont simultanément
envoyées à un registre? Pourquoi?
5. Pourquoi le registre d’adresse a-t-il une connexion directe à la mémoire?
6. Pourquoi est-ce que le compteur ordinal, le registre de données, et l’accumulateur sont-ils
implémentés comme des compteurs ?
7. Parmi les trois commandes des compteurs (Remise à 0, incrémentation, et chargement), laquelle
a la priorité ? Laquelle a la plus basse priorité ? Expliquez votre réponse.
8. Est-il possible de lire une valeur directement de la mémoire dans le registre accumulateur ?
Expliquez.
9. Analysez l’ALU et déterminez une table de vérité qui décrit les 8 opérations qui peuvent être
sélectionnées en utilisant les trois lignes de contrôle. Les opérations de décalage sont-elles
logiques ou bien arithmétiques ?
5.2
Analyse du programme
1. Analysez le programme donné ci-dessous. Examinez les instructions une par une, en inspectant
les valeurs rangées dans l’AC et dans la mémoire, jusqu’à ce que vous compreniez bien ce que
fait le programme.
2. Ecrivez un pseudo-code simple pour décrire le programme. Donnez les noms suivants aux
variables rangées aux adresses mémoire A0 – A3:
Adresse
A0
A1
A2
A3
Nom de variable
Compteur
X
Y
Z
Notez que X, Y et Z sont des pointeurs.
3. Qu’est-ce que le programme calcule?
4. Pourquoi est-il pratique pour ce programme d’utiliser des instructions avec références indirectes
à la mémoire (en d’autres termes, des instructions qui utilisent des pointeurs)?
Lab 4
Université d’Ottawa
Page 10 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
%
00
01
02
03
04
05
06
07
08
09
LE PROGRAMME SE TROUVE DANS LA PLAGE D’ADRESSES 00 A 7F
: 04;
% LDA (direct) %
: a0;
% de l’adresse a0 %
: 42;
% CMA %
: 08;
% STA (direct) %
: a0;
% AC vers l’adresse a0 %
: 20;
% ISZ (direct) %
: a0;
% le compteur rangé à a0 %
: 10;
% BUN (direct) %
: 20;
% vers l’adresse 20 %
: 60;
% HLT %
20
21
22
23
24
25
26
27
28
29
2a
2b
2c
2d
2e
2f
30
31
32
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
84;
a1;
82;
a2;
88;
a3;
04;
a1;
50;
08;
a1;
50;
08;
a2;
50;
08;
a3;
10;
05;
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
LDA (indirect) %
le nombre pointé par la location mémoire a1
ADD (indirect) %
le nombre pointé par la location mémoire a2
STA (indirect) %
dans la location mémoire pointee par a3 %
LDA (direct) %
l’adresse rangée dans a1 %
INC %
STA (direct) %
AC vers la location mémoire a1 %
INC %
STA (direct) %
AC vers la location mémoire a2 %
INC %
STA (direct) %
AC vers la location mémoire a3 %
BUN (direct) %
vers l’adresse mémoire 05 %
% LES DONNEES SE TROUVENT AUX ADRESSES 80 A FF
80 : 01;
81 : 01;
a0
a1
a2
a3
:
:
:
:
0a;
80;
81;
82;
%
%
%
%
compteur
pointeur
pointeur
pointeur
%
%
%
%
de boucle, qui sera parcourue 10 (A) fois %
au premier nombre à etre ajouté %
au deuxieme nombre à etre ajouté %
à la location où le resultat sera rangé %
Conception du contrôleur
5.3
En utilisant les expressions RTL dans la Table 2, la Table 3, et la Table 4, écrivez des
expressions logiques pour chacun des signaux de contrôle suivants:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
memwrite
AR_Load
PC_Load
PC_Inc
DR_Load
DR_Inc
IR_Load
AC_Clear
AC_Load
AC_Inc
Lab 4
Université d’Ottawa
Page 11 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
11.
12.
13.
14.
15.
16.
17.
18.
19.
OUTD_Load
ALU_Sel2
ALU_Sel1
ALU_Sel0
BusSel2
BusSel1
BusSel0
SC_Clear
Halt
Les entrées du contrôleur sont : le registre d’instruction IR[7..0], le registre de données DR[7..0], le
registre de temps T[12..0], et la commande d’arrêt (Stop) du registre Stop. Il vous est conseillé
d’implémenter les désignations X et Y à l’intérieur du contrôleur, pour simplifier la structure intérieure du
bloc.
En termes pratiques, la meilleure approche est d’examiner les tables, de déterminer quels
signaux doivent être activés pour exécuter chaque ligne RTL. Pour chaque signal de contrôle, faites une
liste des conditions sous lesquelles ce signal est activé. Apres avoir dressé une liste pour un signal
particulier, vous pouvez simplement faire un OU de chaque condition pour obtenir l’expression de
contrôle finale.
Par exemple, considérons le multiplexeur du bus, qui possède trois lignes de sélection,
BusSel[2..0]. Faisons la table des conditions sous lesquelles chaque appareil doit placer sa sortie sur le
bus:
Sélecteurs du bus
BusSel2 BusSel1 BusSel1
Circuit qui écrit sur le bus
Conditions de contrôle
T1
T3
0
0
0
Mémoire
T6 IR6
T7 X 2
T8 (Y0 + Y1 + Y2 + Y3 + Y6 )
0
0
1
AR
0
1
0
PC
0
1
1
1
1
1
0
0
1
1
1
0
1
0
1
DR
IR
AC
OUTA
(non utilisé)
T8Y5
T2
T5
T10Y6
(n’arrive jamais)
T9Y4
T0
(indifférent)
A partir de cette table, on voit facilement que BusSel 2 = T0 + T9Y4 . Des expressions similaires peuvent être
générées pour tous les autres signaux de contrôle. Faites bien attention quand vous faites vos listes! Une
erreur dans cette section pourrait vous causer de nombreuses heures de malheur au lab!!
5.4
Conception du programme
1. Ecrivez un programme qui additionne les deux séquences de nombres hexadécimaux suivantes:
21, B5, 37, 08, 5C, 84, A1, 1D, 72, FF, F6, 43, 03, A9, D4, 19, 31, D9, 47, 82, 14, 52, 07, CA, 04
jusqu’à ce que la somme soit égale à zéro, auquel cas le programme s’arrête et place en
mémoire le dernier nombre à être ajouté.
2. (Bonus *) Ecrivez un programme qui peut multiplier n’importe quel nombre non signé de 4 bits.
Lab 4
Université d’Ottawa
Page 12 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
Ecrivez les programmes dans le format des fichiers .mif.
Il est important de comprendre comment la commande ISZ fonctionne. Supposons que vous
vouliez sauter l’instruction suivante si le nombre rangé à l’adresse B0 est égal à FF (hex). Notez que FF
correspond à 11111111 (en binaire), ce qui est aussi le complément à 2 de –1 (en décimal). Dans ce cas,
l’instruction ISZ B0 va lire le nombre FF, le mettre dans le registre de données, et l’incrémenter à
00.Puisque le registre de données est maintenant égal à 0, la prochaine instruction sera sautée. Si toute
autre valeur que FF se trouve à l’adresse B0, alors la prochaine instruction sera exécutée.
Notez que si vous voulez sauter l’instruction suivante lorsque le nombre rangé à l’adresse B0 est
égal à 00, il vous faut d’abord le complémenter à FF pour que la condition ISZ soit remplie. Ceci peut se
faire sans perdre les données de B0 en utilisant la séquence de commandes LDA B0; CMA; STA B1; ISZ
B1. On suppose que B1 est une adresse qui n’a pas encore été utilisée, et qui est disponible pour une
variable temporaire.
* : les détails de la valeur de ce bonus seront expliqués dans le barème du laboratoire.
Lab 4
Université d’Ottawa
Page 13 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
6.
Procédure
6.1
Construisez et testez le contrôleur
1. Ouvrez le fichier lab3controller.bdf (qui donne la liste des pins d’entrée et de sortie dans l’ordre
requis pour générer le même symbole par défaut qui est montré dans le fichier lab3top.bdf).
Utilisez des portes ET, OU et NON pour implémenter les expressions booléennes que vous avez
établies au prélab, pour les signaux de contrôle (section 5.3). Il vous est conseillé de faire des
connexions virtuelles en donnant des noms aux fils (cliquez simplement sur un fil et entrez le
nom ; les fils qui ont le même nom sont automatiquement connectés par le compilateur). Si vous
n’utilisez pas de connexions virtuelles, votre fichier va rapidement se transformer en un amas de
spaghettis incompréhensible. Finalement, essayez de réduire au maximum le nombre d’éléments
logiques qu’un signal doit traverser. La période d’horloge de la carte UP2 est seulement de 40 ns,
et donc des erreurs peuvent survenir si les délais de signaux dépassent cette période.
2. Assurez-vous que votre contrôleur compile sans erreurs.
3. Assignez lab3top.bdf au projet (set as top level component), et choisissez l’appareil
EPF10K20RC240-4. Assignez les pins comme sur la Table 6. Compilez le projet.
Table 6: Assignation des pins
Nom de la
pin
clk
DIP7
DIP6
DIP5
DIP4
DIP3
DIP2
DIP1
DIP0
A1
B1
C1
D1
E1
F1
G1
Dec1
A2
B2
C2
D2
E2
F2
G2
Dec2
Numéro de pin
91
41
40
39
38
36
35
34
33
6
7
8
9
11
12
13
14
17
18
19
20
21
23
24
25
4. Créez un nouveau fichier .vwf appelé lab3top.vwf. Choisissez une taille de grille de 20 ns et une
fin de simulation à 5 us. Faites un clic droit et sélectionnez “Insert Node or Bus…”. Cliquez sur
Lab 4
Université d’Ottawa
Page 14 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
« node finder », puis « List ». Sélectez clk, DIP[7..0] et tous les groupes de OUTD[7..0] à SC[3..0]
(laissez les sorties du 7 segment hors du fichier ; ils n’aideront pas votre simulation).
5. Une dernière fois, choisissez « Insert Node or Bus…”.». Cette fois, sélectionnez « Design Entry
(all names) » pour l’entré « Filter ». Sélectionnez tous les signaux de contrôle reconnaissables,
qui commencent par |controlregister. Sélectionnez également le signal dont l’étiquette est
|register1bit:100|Q.Q (B); ceci est le registre d’arret. Entrez-les dans le fichier .vwf et arrangez-les
comme vous le désirez.
6. Mettez en place une horloge de 40 ns, et fixez les interrupteurs DIP à l’adresse A0. Démarrez la
simulation. Si votre contrôleur fonctionne, le registre OUTD devrait au bout d’un moment contenir
la valeur 5F, et le bit d’arrêt devrait s’activer à environ 2.7 us. Si vous redémarrez la simulation
avec DIP[7..0] mis à A1, le registre OUTD devrait finalement contenir FA. Montrez cette
simulation au TA.
7. Si votre simulation ne fonctionne pas, il va vous falloir trouver la source du problème. Vérifiez la
séquence des signaux de contrôle pour voir s’ils correspondent à l’ordre décrit dans les tables 2 –
4. Gardez à l’esprit que les signaux n’arrivent qu’un cycle d’horloge après le compteur de
séquence, à cause du registre de contrôle. Une autre bonne technique de vérification est
d’observer ce qui est écrit en mémoire. Examinez les signaux sur les bus d’adresse et de
données à chaque fois que le signal memwrite est sollicité; ceci devrait vous aider à identifier
l’endroit où votre programme provoque une erreur.
8. Si la simulation fonctionne comme prévu, sauvegardez une copie du fichier .vwf, puis configurez
les « jumpers » pour permettre la programmation de l’appareil FLEX 10K PLD. Assurez-vous
que la carte est hors tension lorsque vous changez les « jumpers » de position. Les 4
jumpers sont situés au dessus de l’EPM7128, à coté d’un régulateur de puissance muni d’un
élément absorbant la chaleur. Les deux jumpers de gauche doivent se connecter entre les deux
pins du bas, et les deux jumpers de droite doivent rester en place entre les deux pins du haut.
Attention à ne pas endommager la carte ! Si vous n’êtes pas certains de ce que vous faites,
demandez à votre TA.
9. Programmez l’appareil en ouvrant le programmeur et en choisissant « Programmer ». Utilisez les
interrupteurs DIP pour choisir les adresses pour les données. Un interrupteur levé correspond à
un 1, et un interrupteur baissé est un 0. Le MSB de l’adresse pointe vers le bas de la carte.
Assurez-vous que les valeurs correctes sont affichées.
10. Entrez le programme de la section Section 5.2 dans memorycontents8.mif. Programmez
l’appareil et utilisez les interrupteurs DIP pour observer la mémoire. Votre analyse du programme
était-elle correcte ? Faites cette demonstration au TA.
6.2
Testez vos programmes
Entrez les programmes que vous avez écrits à la section 5.4 dans memorycontents8.mif (un par
un, évidemment). Utilisez le simulateur pour les débugger ; il est possible que vous ayez besoin de
simulations qui s’étendent jusqu’à 50 – 100 us. Une fois que vous êtes certains que vos programmes
fonctionnent, configurez le EPF10K20 avec ceux-ci. Utilisez les interrupteurs DIP et les afficheurs 7
segments, et assurez-vous que les programmes fonctionnement comme prévu. Montrez vos
simulations, et faites une demonstration au TA.
Lab 4
Université d’Ottawa
Page 15 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
7.
Rapport
Le rapport de laboratoire doit être remis deux semaines après la première session du lab. Vous
devez inclure les éléments suivants dans votre rapport :
1. un diagramme schématique du contrôleur que vous avez conçu; et
2. des copies des fichiers de simulation .scf, sur une disquette, pour:
a. les programmes d’addition et de soustraction de la section 4.3, et
b. les sommes (et la multiplication si faite) de la section 5.4.
Un TA va vérifier que votre conception et vos programmes fonctionnent en simulation et sur la carte UP2
avant que vous ne quittiez le lab. Préparez vous à répondre à des questions à propos du lab lorsque
vous ferez la démonstration de votre travail.
Lab 4
Université d’Ottawa
Page 16 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
OUTPUT DATA REGISTER
CONTROLLER FOR 7-SEGMENT DISPLAYS
register8bits
DIP SWITCHES
DIP7
33
DIP6
32
DIP5
31
DIP4
30
DIP3
37
36
35
34
DIP2
DIP1
DIP0
Low
OUTD_Load
clk
(MSB)
DIP6
DIP5
DIP4
DIP3
DIP2
DIP1
DIP0
Clear
q[7..0]
sevensegcontroller
a1
OUTD[7..0]
b1
Load
c1
clk
d1
e1
66
f1
MEMORY
g1
ram256x8
data[7..0]
memw rite
(LSB)
q[7..0]
input[7..0]
MEMOUT[7..0]
dec1
a2
b2
we
address[7..0]
c2
d2
e2
104
clk
INPUT
VCC
clk
38
DIP7
INPUT
VCC
INPUT
VCC
INPUT
VCC
INPUT
VCC
INPUT
VCC
INPUT
VCC
INPUT
VCC
INPUT
VCC
d[7..0]
f2
g2
ADDRESS BUS
dec2
ADDRESS REGISTER
OUTPUT
13
OUTPUT
17
OUTPUT
16
OUTPUT
14
OUTPUT
15
OUTPUT
21
OUTPUT
20
OUTPUT
18
OUTPUT
19
OUTPUT
25
OUTPUT
24
OUTPUT
23
OUTPUT
22
OUTPUT
28
OUTPUT
27
OUTPUT
26
a1
b1
c1
d1
e1
f1
g1
dec1
a2
b2
c2
d2
e2
f2
g2
dec2
12
register8bits
VCC
41
d[7..0]
Low
AR_Load
clk
High
Low
Clear
q[7..0]
AR[7..0]
clk
69
GND
42
PROGRAM COUNTER
counter8bits
Low
PC_Load
Clear
Load
PC_Inc
INPUT BUS
Increment
q[7..0]
PC[7..0]
OUTPUT BUSES
d[7..0]
clk
clk
60
DATA REGISTER
counter8bits
Low
DR_Load
DR_Inc
Clear
Load
Increment
q[7..0]
DR[7..0]
d[7..0]
clk
clk
59
INSTRUCTION REGISTER
register8bits
d[7..0]
Low
IR_Load
clk
Clear
q[7..0]
IR[7..0]
Load
clk
lab3controller
IR7
IR6
IR5
IR4
IR3
IR2
IR1
IR0
DR7
Load
BUSMULTIPLEXER
BusSel[2..0]
Sel[2..0]
64
IR7
IR6
IR5
IR4
DR6
DR5
DR4
DR3
DR2
DR1
DR0
Stop
T12
T11
T10
T9
T8
T7
T6
T5
T4
T3
T2
T1
T0
ALU_Sel2
ALU_Sel1
ALU_Sel0
Sel2
Sel1
Sel0
AC[7..0]
Sum[7..0]
AR_Load
AR_Load_in
memwrite
IR0
PC_Load
PC_Load_in
AR_Load
DR7
PC_Inc
PC_Inc_in
PC_Load
DR6
DR_Load
DR5
DR_Inc
DR4
IR_Load
DR3
AC_Clear
DR_Load_in
AC_Inc
DR0
OUTD_Load
DR_Inc
AC_Clear_in
IR_Load
AC_Load_in
AC_Clear
AC_Inc_in
AC_Load
OUTD_Load_in
AC_Inc
Stop
ALU_Sel2
ALU_Sel2_in
OUTD_Load
T12
ALU_Sel1
ALU_Sel1_in
ALU_Sel2
T11
ALU_Sel0
ALU_Sel0_in
ALU_Sel1
T10
BusSel2
BusSel2_in
ALU_Sel0
T9
BusSel1
BusSel1_in
BusSel2
T8
BusSel0
BusSel0_in
BusSel1
T7
SC_Clear
T6
Halt
SC_Clear_in
clk
High
T4
T3
D3[7..0]
Load
Increment
q[7..0]
BusSel0
Halt_in
SC_Clear
clk
Halt
CLRN
101
T2
T1
T0
16dmux
107
Q15
Q14
Q13
Q12
Q11
Q10
Y[7..0]
D5[7..0]
d[7..0]
D6[7..0]
clk
D7[7..0]
58
STOP REGISTER
D4[7..0]
AC[7..0]
67
Low
Halt
High
clk
OUTPUT ADDRESS REGISTER
register1bit
Clear
Load
Stop
Q
SC0
SC1
SC2
SC3
D
clk
A
B
C
D
100
register8bits
DIP[7..0]
Low
High
clk
d[7..0]
Clear
q[7..0]
SEQUENCE COUNTER
OUTA[7..0]
counter4bits
SC_Clear
High
clk
Load
clk
Clear
Increment
98
Figure 3: lab3top.gdf
Lab 4
CEG2536: Architecture des Ordinateurs I (Automne 2007)
q[3..0]
SC[3..0]
clk
63
DataBus[7..0]
PC_Inc
DR_Load
DR_Inc
IR_Load
AC_Clear
AC_Load
AC_Inc
OUTD_Load
ALU_Sel2
ALU_Sel1
ALU_Sel0
BusSel2
BusSel1
BusSel0
SC_Clear
Halt
DR_Load
IR_Load_in
T5
memw rite
AR_Load
PC_Load
PC_Inc
DR_Inc_in
AC_Load
DR1
47
Université d’Ottawa
memwrite_in
D2[7..0]
Clear
clk
DR[7..0]
memwrite
IR1
D1[7..0]
counter8bits
AC_Clear
AC_Load
AC_Inc
alu8bits
IR2
DR2
D0[7..0]
ACCUMULATOR
controlregister
IR3
Page 17 de 23
99
Q9
Q8
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
16 BIT DEMUX
T12
T11
T10
T9
T8
T7
T6
T5
T4
T3
T2
T1
T0
DFF
memw rite_in
D
DFF
PRN
Q
memw rite
DR_Inc_in
D
CLRN
D
Q
AR_Load
AC_Inc_in
D
Q
PC_Load
OUTD_Load_in
D
AR_Load_in
19 PC_Load_in
PC_Inc_in
20
21 DR_Load_in
DR_Inc_in
22
23 IR_Load_in
AC_Clear_in
24
103AC_Load_in
100 AC_Inc_in
OUTD_Load_in
97
94ALU_Sel2_in
90ALU_Sel1_in
87ALU_Sel0_in
85 BusSel2_in
82 BusSel1_in
129 BusSel0_in
131SC_Clear_in
Halt_in
132
18
D
Q
PC_Inc
ALU_Sel2_in
Q
DR_Load
D
ALU_Sel1_in
D
Q
IR_Load
ALU_Sel0_in
D
DFF
Q
AC_Clear
BusSel2_in
D
CLRN
INPUT
VCC
PRN
Q
Q
ALU_Sel1
PRN
Q
ALU_Sel0
PRN
Q
BusSel2
memw rite
AR_Load
PC_Load
PC_Inc
DR_Load
DR_Inc
IR_Load
AC_Clear
AC_Load
AC_Inc
OUTD_Load
ALU_Sel2
ALU_Sel1
ALU_Sel0
BusSel2
BusSel1
BusSel0
SC_Clear
Halt
CLRN
84
D
DFF
PRN
Q
AC_Load
BusSel1_in
D
CLRN
26
PRN
DFF
PRN
DFF
INPUT
GND
D
PRN
Q
BusSel1
CLRN
81
Figure 4: controlregister.gdf
Prof. Wail Gueaieb
Université d’Ottawa
Halt
ALU_Sel2
CLRN
CLRN
clk
Q
88
7
25
PRN
DFF
PRN
CLRN
D
Halt_in
CLRN
CLRN
6
8
OUTD_Load
91
DFF
AC_Load_in
Q
134
CLRN
AC_Clear_in
SC_Clear
DFF
PRN
DFF
PRN
5
D
Q
CLRN
DFF
IR_Load_in
PRN
CLRN
93
D
D
DFF
PRN
4
DR_Load_in
SC_Clear_in
CLRN
CLRN
memw rite_in
AR_Load_in
PC_Load_in
PC_Inc_in
DR_Load_in
DR_Inc_in
IR_Load_in
AC_Clear_in
AC_Load_in
AC_Inc_in
OUTD_Load_in
ALU_Sel2_in
ALU_Sel1_in
ALU_Sel0_in
BusSel2_in
BusSel1_in
BusSel0_in
SC_Clear_in
Halt_in
AC_Inc
96
DFF
BusSel0
133
CLRN
3
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
INPUT
GND
Q
DFF
PRN
Q
DFF
PRN
CLRN
DFF
PRN
CLRN
99
D
D
128
CLRN
17 memw rite_in
BusSel0_in
DFF
PRN
2
PC_Inc_in
DR_Inc
102
DFF
PC_Load_in
Q
CLRN
1
AR_Load_in
DFF
PRN
Lab 3
CEG2536: Architecture des Ordinateurs I (Automne 2007)
Page 18 de 23
OUTPUT
9
OUTPUT
10
OUTPUT
11
OUTPUT
12
OUTPUT
13
OUTPUT
14
OUTPUT
15
OUTPUT
16
OUTPUT
104
OUTPUT
101
OUTPUT
98
OUTPUT
95
OUTPUT
92
OUTPUT
89
OUTPUT
86
OUTPUT
83
OUTPUT
130
OUTPUT
135
OUTPUT
136
memw rite
AR_Load
PC_Load
PC_Inc
DR_Load
DR_Inc
IR_Load
AC_Clear
AC_Load
AC_Inc
OUTD_Load
ALU_Sel2
ALU_Sel1
ALU_Sel0
BusSel2
BusSel1
BusSel0
SC_Clear
Halt
8
Clear
INPUT
VCC
9
Load
INPUT
VCC
counter1bit
AND2
NOT
counter1bit
Clear
14
16
AND3
NOT
10
Increment
INPUT
VCC
Increment_In
Load
d0
15
Out
Increment_Out
Increment_In
Load
d4
In
17
Clear
q0
clk
49
50
counter1bit
counter1bit
Clear
Increment_In
Load
Out
Clear
q1
Increment_Out
Increment_In
Load
d5
In
Out
q5
Increment_Out
In
clk
clk
48
51
counter1bit
counter1bit
Clear
Increment_In
Load
d2
q4
In
clk
d1
Out
Increment_Out
Out
Clear
q2
Increment_Out
Increment_In
Load
d6
In
Out
q6
Increment_Out
In
clk
clk
47
52
q[7..0]
11
d[7..0]
INPUT
VCC
d[7..0]
counter1bit
counter1bit
Clear
Increment_In
Load
d3
Out
Clear
q3
Increment_Out
In
Increment_In
Load
d7
In
clk
clk
46
12
clk
Out
Increment_Out
53
INPUT
VCC
Figure 5: counter8bits.gdf
Université d’Ottawa
Lab 4
CEG2536: Architecture des Ordinateurs I (Automne 2007)
Page 19 de 23
q7
OUTPUT
18
q[7..0]
register1bit
Clear
Load
d7
q7
Q
D
clk
30
register1bit
Clear
Load
d6
q6
Q
D
clk
29
register1bit
Clear
Load
d5
q5
Q
D
clk
28
register1bit
Clear
Load
d4
q4
Q
D
clk
27
14
d[7..0]
INPUT
VCC
d[7..0]
q[7..0]
OUTPUT
13
register1bit
Clear
Load
d3
Q
q[7..0]
q3
D
clk
26
register1bit
Clear
Load
d2
Q
q2
D
clk
25
register1bit
Clear
Load
d1
Q
q1
D
clk
24
register1bit
Clear
Load
d0
Q
q0
D
clk
23
9
10
11
Clear
Load
clk
INPUT
VCC
INPUT
VCC
INPUT
VCC
Figure 6: register8bits.gdf
Lab 4
Université d’Ottawa
Page 20 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
4
5
6
7
8
Sel2
Sel1
Sel0
INPUT
VCC
INPUT
VCC
INPUT
VCC
AC[7..0]
DR[7..0]
INPUT
VCC
INPUT
VCC
Sum[7..0]
AC[7..0]
DR[7..0]
alu1bit
Sel2
Sel1
Sel1
Sum
X
CarryProp_N
Y
CarryGen_N
Sum0
CP0N
CG0N
Xleftshift
AC1
Sel0
AC4
DR4
C4
AC3
AC5
Carry_in
Xrightshift
9
GND
20
CarryProp_N
Y
CarryGen_N
Sum4
CP4N
CG4N
Xleftshift
Xrightshift
16
alu1bit
alu1bit
Sel2
Sel1
Sel0
AC1
DR1
C1
AC0
AC2
Sum
X
CarryProp_N
Y
CarryGen_N
Sel1
Sum1
CP1N
CG1N
Sel0
AC5
DR5
C5
AC4
AC6
Carry_in
Xleftshift
Xrightshift
10
CarryProp_N
Y
CarryGen_N
Carry_in
Xleftshift
Xrightshift
alu1bit
Sel2
Sel2
Sel1
Sel1
Sum
X
CarryProp_N
Y
CarryGen_N
Sum2
CP2N
CG2N
Sel0
AC6
DR6
C6
AC5
AC7
Carry_in
Xleftshift
Xrightshift
11
Sum
X
CarryProp_N
Y
CarryGen_N
Sum6
CP6N
CG6N
Carry_in
Xleftshift
Xrightshift
14
alu1bit
alu1bit
Sel2
Sel2
Sel1
Sel0
AC3
DR3
C3
AC2
AC4
Sum5
CP5N
CG5N
15
Sel0
AC2
DR2
C2
AC1
AC3
Sum
X
alu1bit
Sum
X
CarryProp_N
Y
CarryGen_N
Sel1
Sum3
CP3N
CG3N
Sel0
AC7
DR7
C7
AC6
Carry_in
Xleftshift
Sum
X
CarryProp_N
Y
CarryGen_N
Sum7
CP7N
CG7N
Carry_in
Xleftshift
Xrightshift
Xrightshift
12
CG0N
CG1N
CG2N
CG3N
CP0N
CP1N
CP2N
CP3N
Sum
X
Carry_in
Sel2
2
Sum[7..0]
alu1bit
Sel2
Sel0
AC0
DR0
OUTPUT
17
13
CARRY GEN.
CI
GN0
GN1
CX
GN2
CY
GN3
CZ
PN0
GN
PN1
PN
PN2
PN3
74182
21
C1
C2
C3
AND2
NOT
24
22
OR2
C4
NOT
25
23
C4
CG4N
CG5N
CG6N
CG7N
CP4N
CP5N
CP6N
CP7N
CARRY GEN.
CI
GN0
GN1
CX
GN2
CY
GN3
CZ
PN0
GN
PN1
PN
PN2
PN3
C5
C6
C7
74182
Figure 7: alu8bits.gdf
Lab 4
Université d’Ottawa
Page 21 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
12
INPUT
VCC
Clear
9
Load
INPUT
VCC
8
D
INPUT
VCC
2
clk
AND3
NOT
17
NOT
16
OR2
DFF
4
PRN
D
18
VCC
OUTPUT
3
Q
14
AND3
Q
CLRN
13
1
11
VCC
INPUT
VCC
Figure 8: register1bit.gdf
4
6
5
INPUT
VCC
INPUT
VCC
INPUT
VCC
Clear
Increment_In
Load
2
JKFF
OR2
AND2
J
INPUT
VCC
In
7
PRN
Q
11
OR3
14
AND2
10
12
1
Out
OUTPUT
16
Increment_Out
AND2
17
VCC
15
INPUT
VCC
clk
8
OUTPUT
20
K
CLRN
NOT
13
VCC
Figure 9: counter1bit.gdf
4
Sel2
Sel1
Sel0
INPUT
VCC
INPUT
VCC
INPUT
VCC
7
X
INPUT
VCC
8
Y
INPUT
VCC
2
3
9
Carry_in
INPUT
VCC
81mux
partialadder1bit
XOR
18
X_in
Sum_out
Y_in
P_outN
Carry_in
G_outN
A
B
C
D0
D1
D2
D3
D4
D5
D6
D7
GN
21
10
11
Xleftshift
Xrightshift
INPUT
VCC
INPUT
VCC
AND2
13
OR2
1
14
5
Y
OUTPUT
6
Sum
OUTPUT
12
OUTPUT
20
CarryProp_N
CarryGen_N
WN
MULTIPLEXER
GND
NOT
16
Figure 10: alu1bit.gdf
Lab 4
Université d’Ottawa
Page 22 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)
8
X_in
Y_in
INPUT
VCC
INPUT
VCC
9
Carry_in
INPUT
VCC
4
XOR
XOR
1
6
NOT
14
NAND2
13
OUTPUT
5
Sum_out
OUTPUT
12
P_outN
OUTPUT
11
G_outN
Figure 21 : partialadder1bit.gdf
Table 7: Code VHDL pour le multiplexeur du bus
LIBRARY ieee;
USE ieee.std_logic_1164.all;
-- Title "Bus multiplexer";
-- File: busmux.vhd
ENTITY busmultiplexer IS
PORT ( Sel
: IN STD_LOGIC_VECTOR
D0
: IN STD_LOGIC_VECTOR
D1
: IN STD_LOGIC_VECTOR
D2
: IN STD_LOGIC_VECTOR
D3
: IN STD_LOGIC_VECTOR
D4
: IN STD_LOGIC_VECTOR
D5
: IN STD_LOGIC_VECTOR
D6
: IN STD_LOGIC_VECTOR
D7
: IN STD_LOGIC_VECTOR
Y
: OUT STD_LOGIC_VECTOR
END busmultiplexer;
ARCHITECTURE busmuxarch OF
BEGIN
Y <=
D0 WHEN Sel = "000"
D1 WHEN Sel = "001"
D2 WHEN Sel = "010"
D3 WHEN Sel = "011"
D4 WHEN Sel = "100"
D5 WHEN Sel = "101"
D6 WHEN Sel = "110"
D7;
END busmuxarch;
Lab 4
Université d’Ottawa
(2
(7
(7
(7
(7
(7
(7
(7
(7
(7
DOWNTO
DOWNTO
DOWNTO
DOWNTO
DOWNTO
DOWNTO
DOWNTO
DOWNTO
DOWNTO
DOWNTO
0);
0);
0);
0);
0);
0);
0);
0);
0);
0));
busmultiplexer IS
ELSE
ELSE
ELSE
ELSE
ELSE
ELSE
ELSE
Page 23 de 23
CEG2536: Architecture des Ordinateurs I (Automne 2007)

Documents pareils