La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Cours #9 Conception.

Présentations similaires


Présentation au sujet: "INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Cours #9 Conception."— Transcription de la présentation:

1 INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Cours #9 Conception et réalisation de processeurs à usage général

2 INF3500 : Conception et implémentation de systèmes numériques Plan pour aujourdhui Mise en contexte Retour sur les processeurs à usage spécifique Processeurs à usage général: introduction Chemin des données Unité de contrôle 2 + Des précisions sur les notes de cours, des exemples et une parenthèse sur VHDL!

3 INF3500 : Conception et implémentation de systèmes numériques La machine distributrice 3 Comment réaliser ce processeur? Concevoir un processeur à usage spécifique? Utiliser un processeur à usage général?

4 INF3500 : 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 dune liste dinstructions. On réfère souvent à ce type de processeur par le nom de « microprocesseur ». Un microcontrôleur est un cas particulier dun 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. 4 (notes, section 5.1)

5 INF3500 : Conception et implémentation de systèmes numériques Parties dun 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. – Lunité 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. 5 (notes, section 5.1)

6 INF3500 : Conception et implémentation de systèmes numériques Plan pour aujourdhui Mise en contexte Retour sur les processeurs à usage spécifique Processeurs à usage général: introduction Chemin des données Unité de contrôle 6 + Des précisions sur les notes de cours, des exemples et une parenthèse sur VHDL!

7 INF3500 : Conception et implémentation de systèmes numériques Exemple de processeur à usage spécifique: transmetteur RS (notes, section 6.4) Le chemin des données ne contient que les registres nécessaires. La machine à états de lunité de contrôle ne peut faire quune seule tâche.

8 INF3500 : Conception et implémentation de systèmes numériques Exemple de processeur à usage spécifique: joueur de Blackjack 8 (notes, section 6.7) Le chemin des données ne contient que les registres nécessaires. La machine à états de lunité de contrôle ne peut faire quune seule tâche.

9 INF3500 : 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 dun 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 lunité de contrôle. Un processeur à usage général doit pouvoir effectuer nimporte quelle tâche quun 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. 9 (notes, section 9.1)

10 INF3500 : Conception et implémentation de systèmes numériques Plan pour aujourdhui Mise en contexte Retour sur les processeurs à usage spécifique Processeurs à usage général: introduction Chemin des données Unité de contrôle 10 + Des précisions sur les notes de cours, des exemples et une parenthèse sur VHDL!

11 INF3500 : Conception et implémentation de systèmes numériques Processeurs à usage général Certains processeurs à usage général, comme les processeurs Core de Intel et les processeurs FX-8000 de AMD, sont destinés principalement au marché des stations de travail et des ordinateurs portables. Ces circuits sont dune complexité inouïe et sont le résultat du travail de centaines dingénieurs-années. Dautres processeurs, comme les ARM, MIPS, Intel 8051 et TMS320 sont moins bien connus mais sont fréquemment utilisés dans des applications embarquées comme les dispositifs mobiles et le domaine de lautomobile. 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 dunités, rendant rentable leur production et mise en marché. Il est intéressant dobserver que le développement de chaque nouvelle génération de processeur se fait à laide de stations de travail équipées de processeurs de la génération précédente. En dautres mots, sans la puissance de calcul des processeurs daujourdhui, on serait incapable de concevoir les processeurs de demain. 11 (notes, section 9.1)

12 INF3500 : Conception et implémentation de systèmes numériques Jeu dinstructions Le jeu dinstructions (Instruction Set Architecture – ISA) est la spécification de toutes les instructions pouvant être effectuées par le processeur, leur encodage numérique, et linventaire des ressources mises à la disponibilité des programmeurs (comme des registres, des piles, des coprocesseurs, etc.). Le jeu dinstructions est le contrat entre les concepteurs du processeur et les programmeurs. On peut catégoriser les jeux dinstructions selon plusieurs dimensions. Une dimension concerne la forme du chemin des données du processeur, selon quil 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. Aujourdhui on considère des processeurs basés sur larchitecture Harvard, c'est- à-dire qui ont des mémoires séparées pour le programme et les données (contrairement à larchitecture Von Neumann). 12 (notes, section 9.1) Voir:

13 INF3500 : Conception et implémentation de systèmes numériques Micro-opérations du chemin des données La grande taille du jeu dinstructions dun processeur à usage général implique quil faut pouvoir supporter un grand nombre de micro-opérations. On peut classifier les micro-opérations en trois groupes : – le chargement de données de lextérieur ou une mémoire vers un bloc de registres; – la transformation des données grâce à une unité arithmétique et logique; et, – lentreposage de données en mémoire ou leur transfert vers lextérieur. 13 (notes, section 9.1)

14 INF3500 : Conception et implémentation de systèmes numériques Exemple daujourdhui Le processeur au complet 14 (pas dans les notes)

15 INF3500 : Conception et implémentation de systèmes numériques Plan pour aujourdhui Mise en contexte Retour sur les processeurs à usage spécifique Processeurs à usage général: introduction Chemin des données Unité de contrôle 15 + Des précisions sur les notes de cours, des exemples et une parenthèse sur VHDL!

16 INF3500 : Conception et implémentation de systèmes numériques Architecture dun 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 dinformation entre les registres et les unités fonctionnelles. 16 (notes, section 5.2) Lunité 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).

17 INF3500 : Conception et implémentation de systèmes numériques Architecture dun chemin des données Exemple: processeur BlackFin 17 Analog Devices, BlackFin Embedded Processor ADSP-BF534/ADSP-BF536/ADSP-BF537, Le processeur Blackfin est un processeur à usage général, spécialisé pour le traitement du signal et dimages.

18 INF3500 : Conception et implémentation de systèmes numériques Chemin des données dun processeur à usage général 18 (notes, section 9.2)

19 INF3500 : Conception et implémentation de systèmes numériques Effectuer des opérations Pour effectuer une instruction avec le chemin des données proposé, il sagit 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 à lextérieur du bloc des registres; – indiquer à lUAL de neffectuer aucune opération; – passer à travers du multiplexeur de sélection de source; – revenir à lentrée du bloc des registres, et aiguiller cette valeur dans R0; – le signal sur le port B du bloc des registres nest pas utilisé et est sans importance; – la mémoire ne doit pas charger de nouvelle valeur pendant cette opération. 19 (notes, section 9.2.9)

20 INF3500 : Conception et implémentation de systèmes numériques Effectuer lopération R0 R1 20 (notes, section 9.2.9) case op is when 0 => F <= A + B; when 1 => F <= A - B; when 2 => F <= shift_right(A, 1); 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; when others => F 'X'); end case; R0 R1 R2 R3

21 INF3500 : Conception et implémentation de systèmes numériques Effectuer lopération R2 R1 + R3 21 (notes, section 9.2.9) case op is when 0 => F <= A + B; when 1 => F <= A - B; when 2 => F <= shift_right(A, 1); 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; when others => F 'X'); end case; R0 R1 R2 R3 +

22 INF3500 : Conception et implémentation de systèmes numériques Effectuer lopération R2 R2 ET R3 22 (notes, section 9.2.9) case op is when 0 => F <= A + B; when 1 => F <= A - B; when 2 => F <= shift_right(A, 1); 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; when others => F 'X'); end case; R0 R1 R2 R3 ET

23 INF3500 : Conception et implémentation de systèmes numériques Effectuer lopération R3 M[25] 23 (notes, section 9.2.9) R0 R1 R2 R3 … … case op is when 0 => F <= A + B; when 1 => F <= A - B; when 2 => F <= shift_right(A, 1); 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; when others => F 'X'); end case;

24 INF3500 : Conception et implémentation de systèmes numériques Effectuer lopération M[25] R0 24 (notes, section 9.2.9) R0 R1 R2 R3 … … case op is when 0 => F <= A + B; when 1 => F <= A - B; when 2 => F <= shift_right(A, 1); 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; when others => F 'X'); end case;

25 INF3500 : Conception et implémentation de systèmes numériques Effectuer lopération … 25 (notes, section 9.2.9) R0 R1 R2 R3 case op is when 0 => F <= A + B; when 1 => F <= A - B; when 2 => F <= shift_right(A, 1); 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; when others => F 'X'); end case;

26 INF3500 : Conception et implémentation de systèmes numériques Éléments à mémoire pour chemins des données Bloc de registres 26 (notes, section 9.2.3) Un bloc de registre peut avoir plusieurs ports dentrée et de sortie. Un registre peut à la fois être la cible dune écriture et la source pour lun des ports de sortie. Version coûteuse en multiplexeurs!

27 INF3500 : Conception et implémentation de systèmes numériques Éléments à mémoire pour chemins des données Bloc de registres: code VHDL 27 (notes, section 9.2.5) -- dans la partie déclarative de larchitecture 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); signal choixB : integer range 0 to Nreg - 1; signal donnee : signed(Wd - 1 downto 0); signal choixCharge : integer range 0 to Nreg - 1; signal charge : std_logic; -- dans le corps de larchitecture process (CLK, reset) begin if rising_edge(CLK) then if reset = '1' then lesRegistres (others => '0')); else if charge = '1' then lesRegistres(choixCharge) <= donnee; end if; end process; -- signaux de sortie du bloc des registres A <= lesRegistres(choixA); B <= lesRegistres(choixB); sortieExterne <= B; Dans cette description du bloc des registres: le nombre de ports dentrée est fixé à 1 le nombre de ports de sortie est fixé à 2 le nombre de registres est déterminé par le paramètre Nreg la largeur des registres est déterminée par le paramètre Wd

28 INF3500 : Conception et implémentation de systèmes numériques Unité arithmétique et logique 28 (notes, section 9.2.6) -- dans la partie déclarative de larchitecture signal F : signed(Wd - 1 downto 0); signal Z : std_logic; signal N : std_logic; signal op : integer range 0 to 7; -- dans le corps de larchitecture process(A, B, op) begin case op is when 0 => F <= A + B; when 1 => F <= A - B; when 2 => F <= shift_right(A, 1); 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; when others => F 'X'); end case; end process; -- registre d'état de l'UAL process(clk, reset) begin if rising_edge(clk) then if reset = '1' then Z <= '0'; N <= '0'; else if (etat = opUAL) then if F = 0 then Z <= '1'; else Z <= '0'; end if; N <= F(F'left); end if; end process; Dans cette description de lUAL: les opérations sont fixes lencodage est fixe la façon détablir la valeur des bits détat est fixe la largeur de lUAL est déterminée par le paramètre Wd

29 INF3500 : Conception et implémentation de systèmes numériques UAL - suite Plusieurs auteurs distinguent lUAL et le module de décalage. Nous choisissons ici de les joindre, c'est-à-dire que lUAL est capable deffectuer des opérations arithmétiques, logiques et de décalage. LUAL inclut ici un registre détat. La fonction de ce registre est dentreposer un mot dinformation sur la dernière opération effectuée, comme un résultat négatif ou nul, un débordement ou la génération dune retenue. Ici létat se résume à 2 bits, Z et N, indiquant respectivement un résultat nul ou négatif. Lors dune opération sur lUAL, 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 lunité de contrôle. La complexité de lUAL est une fonction de sa largeur et du nombre dopérations quelle doit supporter. 29 (notes, section 9.2.6)

30 INF3500 : Conception et implémentation de systèmes numériques Mémoire des données En théorie, un processeur avec un bloc des registres suffisamment grand naurait pas besoin dune mémoire des données associée. Cest souvent le cas pour les processeurs spécialisés. En pratique cependant, un processeur à usage général a toujours besoin dune telle mémoire. Pour la plupart des processeurs, la mémoire des données est placée à lextérieur de celui-ci. La mémoire des données a en général un port de sortie, un port dentrée, un port dadresse et un port de contrôle de lopération. La mémoire peut avoir plusieurs ports dentré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 nest pas strictement nécessaire. Le port dadresse 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). 30 (notes, section 9.2.7)

31 INF3500 : Conception et implémentation de systèmes numériques 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 dentrée – un (parfois deux) port dadresse – un port de contrôle de lopération. La description dune 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 dentré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 dactivation; et, – la spécification de valeurs initiales. 31 (notes, section 9.2.7) 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.

32 INF3500 : Conception et implémentation de systèmes numériques Mémoire des données en VHDL 32 (notes, section 9.2.7) -- dans la partie déclarative de larchitecture 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 larchitecture -- mémoire des données process (CLK) begin if rising_edge(CLK) then if lectureEcritureN = '0' then memoireDonnees(adresseMemoireDonnees) <= B; end if; end process; sortieMemoireDonnees <= memoireDonnees(adresseMemoireDonnees); Important: pas de signal de réinitialisation dans le modèle, ce qui empêcherait le synthétiseur dutiliser la mémoire distribuée. 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 dune donnée nécessite un cycle dhorloge pour charger ladresse, ce nest pas modélisé ici

33 INF3500 : Conception et implémentation de systèmes numériques Comment se synthétise la mémoire dans un FPGA? Colonnes de blocs de mémoire intégrées à travers les CLBs. (Xilinx: Block RAM) LUTs des CLBs (Xilinx: Distributed RAM) 33 Source: Maxfield, © Mentor Graphics, 2004 Le choix peut être contrôlé par les paramètres du synthétiseur – démo à partir dActive-HDL. (notes, section 3.5.5)

34 INF3500 : Conception et implémentation de systèmes numériques Plan pour aujourdhui Mise en contexte Retour sur les processeurs à usage spécifique Processeurs à usage général: introduction Chemin des données Unité de contrôle 34 + Des précisions sur les notes de cours, des exemples et une parenthèse sur VHDL!

35 INF3500 : Conception et implémentation de systèmes numériques Unité de contrôle du processeur à usage général 35 (notes, section 9.3) choixSource choixCharge charge choixA choixB opération lectureEcriture

36 INF3500 : Conception et implémentation de systèmes numériques Unité de contrôle du processeur à usage général Lunité de contrôle du processeur doit effectuer les opérations en fonction des instructions du programme à exécuter. Lunité de contrôle est composée des composantes suivantes : – 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 dinstruction (Instruction Register – IR) qui contient linstruction 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 lunité de contrôle, mais ici nous les combinons. On peut aussi considérer le registre détats de lUAL comme faisant partie de lunité de contrôle. 36 (notes, section 9.3)

37 INF3500 : Conception et implémentation de systèmes numériques Choix dapproche pour lencodage des instructions Le code dune 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 37 (pas dans les notes) NISC Technology and Toolset, University of California Irvine, [en ligne: consulté le 2009/11/11 Nous choisissons lapproche 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 dinstructions. Limplémentation peut être différente pour deux processeurs qui ont le même comportement.

38 INF3500 : Conception et implémentation de systèmes numériques Cycle des instructions et machine à états Pour exécuter une instruction, lunité de contrôle doit exécuter la séquence de tâches suivante : – Aller quérir linstruction à 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 linstruction en cours. – Décoder linstruction (decode). Le contrôleur décode linstruction obtenue afin de générer les signaux de contrôle pour le chemin des données. – Exécuter linstruction (execute). Le chemin des données exécute linstruction. Cette étape peut être décomposée en plusieurs états selon la complexité de linstruction. 38 (notes, section 9.3.2)

39 INF3500 : Conception et implémentation de systèmes numériques Cycle des instructions et machine à états 39 (notes, section 9.3.2) quérir (fetch): 1. 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. 2. Le compteur de programme est incrémenté pour pointer à la prochaine instruction ou à des données emmagasinées immédiatement après linstruction en cours. décoder (decode): Le contrôleur décode linstruction obtenue afin de générer les signaux de contrôle pour le chemin des données. exécuter (execute): Le chemin des données exécute linstruction.

40 INF3500 : Conception et implémentation de systèmes numériques Encodage des instructions en mémoire Suppositions: – le chemin des données contient 16 registres de 16 bits, R0 à R15 – lALU peut exécuter les 8 instructions +, -, ÷2, ×2, NON, ET, OU, identité; et, – les mémoires des données et des instructions contiennent 256 mots de 16 bits. 40 (notes, section 9.3.3) Pour linstruction qui nécessite un traitement par lALU, les 3 bits {op 2 |op 1 |op 0 } correspondent à lencodage des opérations de lALU. Pour linstruction JUMP, les différentes combinaisons des bits 11-8 de linstruction permettent davoir jusquà 16 conditions différentes. Ce tableau en propose cinq.

41 INF3500 : Conception et implémentation de systèmes numériques Exemples dencodage dinstructions 41 (notes, section 9.3.3) On observe: 1. plusieurs codes ne sont pas utilisés, comme par exemple ceux qui commencent par certaines opérations nutilisent 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.

42 INF3500 : Conception et implémentation de systèmes numériques Exemple de programme 42 (notes, section 9.4)

43 INF3500 : Conception et implémentation de systèmes numériques Exercice de programmation Donnez les instructions et les codes numériques dun programme qui calcule la moyenne de 8 valeurs gardées en mémoire dans des cellules contigües à partir de ladresse (notes, section 9.6)

44 INF3500 : Conception et implémentation de systèmes numériques Exercice de programmation Donnez les instructions et les codes numériques dun programme qui multiplie deux nombres non signés de 8 bits. 44 (notes, section 9.6)

45 INF3500 : Conception et implémentation de systèmes numériques Mémoire des instructions en VHDL La mémoire des instructions est en mode lecture seule. Lécriture initiale nest faite que lors de la configuration du dispositif. La mémoire est définie dans la partie déclarative de larchitecture 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 6 instructions, suivies de 250 cases contenant FFFF (instruction STOP). 45 (notes, section 9.3.4) -- dans la partie déclarative de larchitecture 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");

46 INF3500 : Conception et implémentation de systèmes numériques Parenthèse: littéraux numériques en VHDL Littéraux numériques abstraits – entiers (sans point) – réels (avec point) – avec une base ou pas (base 10 présumée) – Format général: base#chiffres[.chiffres]#[exposant] Littéraux composés dune chaîne de bits – placés entre guillemets – la base peut être spécifiée par B, O ou X (binaire, octal, hexadécimal) Le caractère de soulignement peut être utilisé pour améliorer la lisibilité (section 2.5 et plus …) -- Littéraux décimaux E _670_ _ E Littéraux avec une base 16#FE# #1111_1110# #376# #D#E #F.01#E # _0001#E B"1111_1111" -- un vecteur de bits B" " -- le même vecteur X"FF" -- le même vecteur O"377" -- le même vecteur

47 INF3500 : Conception et implémentation de systèmes numériques Machine à états plus détaillée 47 (notes, section 9.3.5) Létat exécuter a été remplacé par dautres états. À partir de létat décoder, la machine peut passer à lun de cinq états, correspondant aux cinq types dinstructions du processeur. Dans chacun des ces états, les signaux de contrôle appropriés doivent être générés pour le chemin des données.

48 INF3500 : Conception et implémentation de systèmes numériques Code VHDL pour lunité de contrôle (1/3) 48 (notes, section 9.3.6) -- dans la partie déclarative de larchitecture 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 larchitecture 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;

49 INF3500 : Conception et implémentation de systèmes numériques Code VHDL pour lunité de contrôle (2/3) 49 (notes, section 9.3.6) 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 process;

50 INF3500 : Conception et implémentation de systèmes numériques Code VHDL pour lunité de contrôle (3/3) 50 (notes, section 9.3.6) 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))); Ladresse de la mémoire des données est contenue dans les bits 7 à 0 du registre dinstructions, sauf pour les instructions concernant lUAL. Cependant, comme la sortie de la mémoire nest pas sollicitée pour les instructions concernant lUAL, on peut se permettre de simplifier la description et ne pas inclure de condition en rapport avec létat de la machine.

51 INF3500 : Conception et implémentation de systèmes numériques Le problème du logiciel Lécriture directe dun 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 sappuyer 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 … 51 (notes, section 9.4)

52 INF3500 : Conception et implémentation de systèmes numériques Améliorations architecturales au processeur Le processeur montré ici nécessite trois cycles dhorloge par instruction. La technique du pipeline pourrait permettre de compléter une instruction à chaque coup dhorloge. Linstanciation de plusieurs UALs pourrait permettre de compléter plusieurs instructions à chaque coup dhorloge. 52 (notes, section 9.5)

53 INF3500 : Conception et implémentation de systèmes numériques Exercices dajout dinstructions au processeur (1) Chargement de constantes – Ajoutez une instruction de la forme Rk #XY, permettant de charger un registre avec une valeur constante de 8 bits de large, spécifiée dans le programme. Utilisez le signal constante en entrée au multiplexeur qui détermine lentrée du bloc des registres. – Ajoutez une instruction de la forme Rk #WXYZ, permettant de charger un registre avec une valeur constante de 16 bits de large, spécifiée dans le programme. Dans le flot des instructions, la constante serait entreposée immédiatement après linstruction de chargement. Il faudrait alors incrémenter le compteur de programme deux fois. Utilisez le signal constante en entrée au multiplexeur qui détermine lentrée du bloc des registres. 53 (notes, section 9.6) Une réponse complète comporte: 1.Un encodage pour la nouvelle instruction. 2.Les modifications au chemin des données 3.Les modifications à la machine à états de lunité de contrôle. 4.Les modifications à lunité de contrôle. 5.Le code VHDL modifié.

54 INF3500 : Conception et implémentation de systèmes numériques Exercices dajout dinstructions au processeur (2) Plus dopérations – Donnez trois options pour modifier le processeur afin de permettre de supporter plus de 8 opérations de lUAL. Saut sur une plus grande plage dadresses – Proposez une modification à linstruction JUMP pour pouvoir effectuer un branchement vers une adresse exprimée sur plus de 8 bits. Entrées et sorties – Ajoutez une instruction pour pouvoir lire une donnée externe, de la forme Rk entreeExterne. Ajoutez un signal de contrôle en entrée, entreeExterneValide, qui prend une valeur de 1 quand lentrée externe est prête à être lue. Quand il exécute cette instruction, le processeur doit geler tant que lentrée externe nest pas valide. – Ajoutez une instruction pour pouvoir écrire une donnée externe, de la forme sortieExterne Rk. Ajoutez un signal de contrôle en sortie, sortieExterneValide, qui est mis à 1 quand la sortie externe est prête à être lue. 54 (notes, section 9.6) Une réponse complète comporte: 1.Un encodage pour la nouvelle instruction. 2.Les modifications au chemin des données 3.Les modifications à la machine à états de lunité de contrôle. 4.Les modifications à lunité de contrôle. 5.Le code VHDL modifié.

55 INF3500 : Conception et implémentation de systèmes numériques Encodage des instructions 55 (notes, section 9.3.5)

56 INF3500 : Conception et implémentation de systèmes numériques Chemin des données et unité de contrôle 56

57 INF3500 : Conception et implémentation de systèmes numériques Machine à états de lunité de contrôle 57 (notes, section 9.3.5)

58 INF3500 : Conception et implémentation de systèmes numériques Notions à retenir et maîtriser Importance relative 1. Expliquer les différences et les forces relatives entre un processeur à usage spécifique et un processeur à usage général Chemin des données dun processeur à usage général: a.Donner un diagramme montrant les composantes, connexions et signaux de contrôle b.Montrer comment aiguiller les signaux pour effectuer des opérations c.Donner le code VHDL pour le bloc des registres, lUAL et la mémoire des données Unité de contrôle dun processeur à usage général: a.Donner un diagramme montrant les composantes et leurs connexions b.Donner un diagramme détats montrant le cycle des instructions c.Expliquer comment effectuer lencodage et le décodage des instructions d.Interpréter et écrire des programmes simples pour le processeur e.Donner le code VHDL pour la mémoire des instructions et la machine à états Expliquer comment modifier le processeur pour lui ajouter des instructions: a.Expliquer les modifications au chemin des données b.Expliquer les modifications à lunité de contrôle (architecture et diagramme détats) c.Expliquer les modifications à lencodage des instructions 20 Total100 Résumé: processeur à usage général 58


Télécharger ppt "INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Cours #9 Conception."

Présentations similaires


Annonces Google