Cours VHDL - IV L3-S6 - Université de Cergy-Pontoise Laurent Rodriguez – Benoît Miramond Plan du cours I – Historique de conception des circuits intégrés - HDL - Modèles de conceptions - VHDL - Les modèles de conceptions en VHDL - Les 5 briques de base II – VHDL et FPGA - VHDL - Syntaxe et typage - Retour sur les briques de bases - Retour sur la conception structurelle et comportementale en VHDL Port map, Équations logiques, Tables de vérités (With ... Select) - FPGA - Qu'est ce qu'un FPGA - Flot de conception - Carte de développement et environnement de TP Plan du cours III – Modélisation - Compléments sur la description Structurelle - Description comportementale approfondie Circuits combinatoires - Styles de description Flots de données Instructions concurrentes Table de vérité Fonctions - Circuits standards - Comparateur - Multiplexeurs - Encodeurs Plan du cours IV – Processus et gestion du temps - Syntaxe et sémantique - Portée - signaux & variables - Annotations temporelles et délais V – Simulation - TestBench - GHDL & GTK-Waves - Quartus & ModelSIM VI – Modèles génériques - Paramètres génériques - « Generate » - Boucles - Exemples Plan du cours IV – Processus et gestion du temps - Syntaxe et sémantique - Portée - signaux & variables - Annotations temporelles et délais V – Simulation - TestBench - GHDL & GTK-Waves - Quartus & ModelSIM VI – Modèles génériques - Paramètres génériques - « Generate » - Boucles - Exemples Plan du cours VIII – Machines à états finis (FSM) - Définition - Représentation - Formelle - Table de transition - Diagramme - Type de machines - Exemples - Multiplieur à machine à états - Notions importantes - Reset - Représentation des états Plan du cours VIII – Processeur 16bits en VHDL (projet) - Présentation du projet et consignes (avancées TP) - Retour sur les entités de base – Le registre - Description à haut niveau - Interface du processeur (ENTITY) - Structure parties Contrôle/Opérative (retour sur FSMs) - Jeu d'instructions - Description de l'architecture - Le chemin de données - Signaux de contrôles (MUX, R_SET, ALU_CMD, ...) - Contrôleur (FSM et gestion des signaux de contrôles) - Séquencement des instructions - Exemple du séquencement par l'architecture - MVI - Add - Utilisation de la mémoire - Mémoire instructions IX – Révisions/Contrôle des connaissances VIII - Processeur 16bits en VHDL (projet) VIII - Processeur 16bits : Présentation et consignes 4 Séances de Tps restantes 0.5 => Additionneurs + Multiplieur génériques (A rattraper hors séances sinon!) 1,5 => FSM 2 => Projet Composants TP1 : Multiplexeurs, Décodeurs, Afficheurs (7 segments) TP2 : Registres, Additionneur, /a², Soustraction, ALU, Accumulateur complet TP3 : Multiplicateur + Maj de l'ALU (ajout Mult) + maj accumulateur TP4 : Module FSM + génération de signaux de contrôle (sortie FSM) Projet : Processeur : assemblage structurel des composants développés VIII - Processeur 16bits : Retour sur les entité de base : Le registre Modèle du registre utilisé pour le projet : D Set Clk Reset_n R Q Propriétés : Reset asynchrone Set synchrone Mise à jour de la valeur de Q seulement sur front montant et si Set est à1 VIII - Processeur 16bits : Description haut niveau / Entity IO : Din : port de 16 bits dont les valeurs seront dans un premier temps positionnées par le programme (puis par la mémoire). Il permet d'acheminer dans le processeur : Soit une instruction vers le contrôleur Soit un entier vers le data path Run : Signal de synchronisation activé par le programmeur pour indiquer qu'une nouvelle valeur Din est disponible Reset_n : est le signal permettant la mise à zéro (ou valeurs par défaut) de toutes les bascules (registres) du processeur Clock : Horloge sur laquelle est cadencé le processeur Bus : port de 16 bits indiquant la donnée présente sur le Data Path (sur Done : Résultat ou Sortie de l'ALU) Done : Signal de synchronisation activé par le processeur pour indiqué que la dernière instruction a été exécutée. Reset Run Done Din Clk Processor Bus VIII - Processeur 16bits : Description haut niveau 2 parties : Le chemin de données qui réalise des calculs sur des données de 16bits 0 à 2^(16)-1 (65535) en non signé -2^(16-1) à 2^(16-1)-1 en [-32768, 32767] signé /a² Le contrôleur qui décode l’instruction courante et pilote le chemin de données pour l'exécuter Reset Done Run Din CONTROL Clk Commande Flags DATA PATH Bus VIII - Processeur 16bits : Description haut niveau Rst_s Reset Din_s Clk_s Run_s ProcTB ctrlDown_s Done Run Din CONTROL Clk Commande Flags DATA PATH Bus Bus_s VIII - Processeur 16bits : Description haut niveau KEY Reset SW/7Segs KEY SW FPGA LEDR/LEDG Done Run Din CONTROL Clk Commande Flags DATA PATH Bus 7SEGs VIII - Processeur 16bits : Jeu d'instructions Le processeur aura un jeu d’instruction extensible, partant d’une première version permettant principalement l’addition/soustraction d’opérandes entières contenue dans des registres de données R0 à R7. Instructions : Instruction Fonction réalisée MV Rx, Ry Rx <= [Ry] MVI Rx, #D Rx <= D ADD Rx, Ry Rx <= [Rx] + [Ry] SUB Rx, Ry Rx <= [Rx] - [Ry] Registre instruction (RI) : 3bits 3bits 3bits CODOP Rx Ry VIII - Processeur 16bits : Description bas niveau R0 Clk ... R7 16 Din ... A 16 16 ... 16 16 ALU Multiplexer G 9 Bus 16 IR 9 Run ... IRs BusSel R0s R7s As Gs Add/sub Control Unit FSM Reset ... Done VIII - Processeur 16bits : Description bas niveau DataPath R0 Clk ... R7 16 Din ... A 16 16 ... 16 16 ALU Multiplexer G 9 Bus 16 ... IR Run Reset 9 IRs BusSel R0s R7s As Gs Add/sub Control Unit FSM Done VIII - Processeur 16bits : Description bas niveau Clock R0 Clk ... R7 16 Din ... A 16 16 ... 16 16 ALU Multiplexer G 9 Bus 16 ... IR Run Reset 9 IRs BusSel R0s R7s As Gs Add/sub Control Unit FSM Done VIII - Processeur 16bits : Description bas niveau Contrôle R0 Clk ... R7 16 Din ... A 16 16 ... 16 16 ALU Multiplexer G 9 Bus 16 IR Run Reset 9 ... IRs BusSel R0s R7s As Gs Add/sub Control Unit FSM Done VIII - Processeur 16bits : Jeu d'instructions Séquencement des instructions (définition de la FSM) : Instruction T1 T2 T3 MV Rx, Ry Lecture de Ry Ecriture sur Rx MVI Rx, #D Lecture de Di Ecriture sur Rx ADD Rx, Ry Lecture de Rx Ecriture dans A Lecture de Ry Ecriture de G Lecture du rés (G) Ecriture sur Rx SUB Rx, Ry Lecture de Rx Ecriture dans A Lecture de Ry Ecriture de G Lecture du rés (G) Ecriture sur Rx Certaines instruction prennent plus d'un cycle d'horloge. Plusieurs déplacements de données sont nécessaires pour les réaliser. VIII - Processeur 16bits : Jeu d'instructions Séquencement des instructions (définition de la FSM) : Instruction T1 T2 T3 MV Rx, Ry Lecture de Ry Ecriture sur Rx MVI Rx, #D Lecture de Di Ecriture sur Rx ADD Rx, Ry Lecture de Rx Ecriture dans A Lecture de Ry Ecriture de G Lecture du rés (G) Ecriture sur Rx SUB Rx, Ry Lecture de Rx Ecriture dans A Lecture de Ry Ecriture de G Lecture du rés (G) Ecriture sur Rx Certaines instruction prennent plus d'un cycle d'horloge. Plusieurs déplacements de données sont nécessaires pour les réaliser. VIII - Processeur 16bits : Exemple d'évolution des signaux MVI MVI R0, #D ... R0 Clk R7 16 Lecture de Di Ecriture sur Rx ... 16 16 Din 001000XXX... 16 A ... 16 ALU Multiplexer G 9 Bus 16 IR Run Reset 9 ... IRs BusSel R0s R7s As Gs Add/sub Control Unit FSM Done VIII - Processeur 16bits : Exemple d'évolution des signaux MVI Lecture de Di Ecriture sur Rx MVI R0, #D ... Clk R7 16 Din ... 16 16 11010...110 16 A ... 16 ALU Multiplexer G 9 Bus 16 Din 001000XXX... Run Reset 9 IRs BusSel ... R0s R7s As Gs Add/sub Control Unit FSM 001000XXX... Done VIII - Processeur 16bits : Exemple d'évolution des signaux MVI MVI R7, #D ... 11010...110 Clk R7 16 Lecture de Di Ecriture sur Rx ... 16 16 Din 001111XXX... 16 A ... 16 ALU Multiplexer G 9 Bus 16 IR Run Reset 9 ... IRs BusSel R0s R7s As Gs Add/sub Control Unit FSM Done VIII - Processeur 16bits : Exemple d'évolution des signaux MVI Lecture de Di Ecriture sur Rx MVI R0, #D ... 11010...110 Clk ... 16 Din 16 16 010110...011 16 A ... 16 ALU Multiplexer G 9 Bus 16 Din 001111XXX... Run Reset 9 IRs BusSel ... R0s R7s As Gs Add/sub Control Unit FSM 001111XXX... Done VIII - Processeur 16bits : Exemple d'évolution des signaux ADD ADD Rx, Ry Lecture de Rx Ecriture dans A ... 11010...110 Clk Lecture de Ry Ecriture de G ... 010110...011 16 16 A 16 16 Din 010000111X... Lecture du rés (G) Ecriture sur Rx ... 16 ALU Multiplexer G 9 Bus 16 IR Run Reset 9 ... IRs BusSel R0s R7s As Gs Add/sub Control Unit FSM Done VIII - Processeur 16bits : Exemple d'évolution des signaux ADD ADD Rx, Ry Lecture de Rx Ecriture dans A ... 11010...110 Clk 11010...110 Lecture de Ry Ecriture de G ... 010110...011 16 16 16 Din 16 Lecture du rés (G) Ecriture sur Rx ... 16 ALU Multiplexer G 9 Bus 16 IR Run Reset 9 ... IRs BusSel R0s R7s As Gs Add/sub Control Unit FSM 010000111X... Done VIII - Processeur 16bits : Exemple d'évolution des signaux ADD ADD Rx, Ry Lecture de Ry Ecriture de G Lecture de Rx Ecriture dans A ... 11010...110 Clk ... 010110...011 11010...110 010110...011 16 16 16 Din 16 Lecture du rés (G) Ecriture sur Rx 16 11010...110 ... + 010110...011 ALU Multiplexer G 9 Bus 16 IR Run Reset 9 ... IRs BusSel R0s R7s As Gs Add/sub Control Unit FSM 010000111X... Done VIII - Processeur 16bits : Exemple d'évolution des signaux ADD ADD Rx, Ry ... 11010...110 Clk 16 Lecture du rés (G) Ecriture sur Rx ... 010110...011 11010...110 16 11010...110 16 Din Lecture de Ry Ecriture de G Lecture de Rx Ecriture dans A 16 ... + 16 010110...011 ALU Multiplexer G 9 Bus 16 IR Run Reset 9 ... IRs BusSel R0s R7s As Gs Add/sub Control Unit FSM 010000111X... Done VIII - Processeur 16bits : Exemple d'évolution des signaux ADD ADD Rx, Ry ... 11010...110 Clk 16 Lecture du rés (G) Ecriture sur Rx ... 010110...011 11010...110 16 11010...110 16 Din Lecture de Ry Ecriture de G Lecture de Rx Ecriture dans A 16 ... + 16 010110...011 ALU 01101...001 Multiplexer G 9 Bus 16 IR Run Reset 9 ... IRs BusSel R0s R7s As Gs Add/sub Control Unit FSM 010000111X... Done VIII - Processeur 16bits : Exemple d'évolution des signaux ADD ADD Rx, Ry Lecture de Rx Ecriture dans A ... Clk 16 Lecture du rés (G) Ecriture sur Rx ... 010110...011 11010...110 16 11010...110 16 Din Lecture de Ry Ecriture de G 16 ... + 16 010110...011 ALU Multiplexer 01101...001 9 01101...001 16 IR Run Reset 9 Bus ... IRs BusSel R0s R7s As Gs Add/sub Control Unit FSM 010000111X... Done VIII - Processeur 16bits : Le Gros du travail ! Une fois l'ensemble des briques de bases réalisée durant les séances de TP, il s'agit principalement d'assemblage structurel ! Le point chaud : La FSM C'est la seule partie qui n'est pas textuellement décrite. Ce qu'il faudra faire avant de se lancer dans le projet ! Décrire sous forme de diagramme de moore la FSM permettant de réaliser les différentes instructions requise et extensible pour de nouvelle instructions. Ce n'est pas très difficile si l'on se base sur les FSM réalisées en TP et que l'on a bien compris les différentes étapes de réalisation d'un instruction (FETCH, DECODE, EXECUTE, ...) Penser à prendre en compte RUN ! IRs ??? BusSel R0s R7s As Gs Add/sub Control Unit FSM 010000111X... VIII - Processeur 16bits : Utilisation de la mémoire .bin Data Counter @ Memory Bus Din Processor Done Reset Reset MemClk ProcClk Reset_n run Clk Run VIII - Processeur 16bits : Utilisation de la mémoire .bin Data Counter Reset MemClk @ Memory ... MVI R0 (001000x...) 155 (0...010011011) MVI R1 (001001x...) 26 (0...011010) ADD R0, R1 (010000001x...) MVI R1 (001001x...) 13 (0...01101) SUB R0, R1 (011000001x...) MV R0, R2 (000000010x...) SUB R0, R1 (011000001x...) ADD R0, R2 (010000010x...) ... Reset_n Bénéfices : On ne positionne plus les instructions et valeurs via les switchs ! VIII - Processeur 16bits : Extensions ! De manière à apporter vos propres modifications au processeur, il vous sera demander de réfléchir et de réaliser l’une, au moins, des extensions suivantes : L/S : Ajout d’instruction de type 'I' pour le chargement (load) et le rangement (store) en mémoire qui permettent respectivement de charger et de ranger une donnée depuis ou vers la mémoire. Les opérandes de ces instructions sont un registres et une adresse mémoire codée comme un immédiat de 16 bits. Logic : Ajout d’instruction de type 'R' pour les opérations logiques (AND, OR, NOT). Mult : Ajout d’instruction de type 'R' pour la multiplication de deux nombres stockés dans des registres. Vous porterez attention à expliquer comment est traité le résultat dans les registres. Jump : Ajout d’un nouveau type d’instruction de type 'J' pour réaliser des sauts dans l’exécution des instructions. Ce type d’instructions n’a qu’une seule opérande : une adresse de saut sur 16 bits. Compilo : Écriture d’un assembleur en Java, C ou C++ qui permet de générer directement le fichier MIF à partir d’une fenêtre de saisie du code assembleur. Biblio Documents de cours ● Ce cours en ligne à : Http://perso-etis.ensea.fr/rodriguez/ ● Un très bon support de cours http://hdl.telecom-paristech.fr/index.html ● Le cours de Licence 2 (en particulier pour ceux qui ne l'ont pas suivi): http://perso-etis.ensea.fr/miramond/Enseignement/L2/circuits_numeriques.html ● Le cours de Licence 3 de 2013 : http://perso-etis.ensea.fr/miramond/Enseignement/L3/Cours_VHDL_2011.html Documents de développement ● Quartus http://quartushelp.altera.com/current/ ● Documentation Altera sur les Cyclones II et IV (entre autre...) http://www.altera.com/literature/lit-index.html