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)