Université de Savoie Module ETRS-511 FPGA & VHDL

Travaux Dirigés
FPGA & VHDL

Sylvain MONTAGNY sylvain.montagny@univ-savoie.fr Bâtiment chablais, bureau 13 04 79 75 86 86

TD1 : Environnement de développement QUARTUS II TD2 : Synthèse de systèmes logiques combinatoires TD3 : Synthèse de systèmes logiques séquentiels TD4 : Video Graphic Array (VGA) TD5 : Mémoires RAM

Retrouver tous les documents de Cours/TD/TP sur le site www.master-electronique.com

Université de Savoie Module ETRS-511 FPGA et VHDL

TD1
Environnement de développement QUARTUS II

1. Généralités sur la synthèse logique
La documentation fournie par ALTERA sur l’environnement de programmation Quartus II propose les différentes étapes pour l’organisation d’un projet. Dans le désordre, les étapes proposées sont :

Functional Simulation – the synthesized circuit is tested to verify its functional correctness; the simulation does not take into account any timing issues. Programming and Configuration – the designed circuit is implemented in a physical FPGA chip by programming the configuration switches that configure the LEs and establish the required wiring connections. Fitting – the CAD Fitter tool determines the placement of the LEs defined in the netlist into the LEs in an actual FPGA chip; it also chooses routing wires in the chip to make the required connections between specific LEs. Synthesis – the CAD Synthesis tool synthesizes the circuit into a netlist that gives the logic elements (LEs) needed to realize the circuit and the connections between the LEs. Timing : Analysis and Simulation – propagation delays along the various paths in the fitted circuit are analyzed to provide an indication of the expected performance of the circuit. (Analysis). The fitted circuit is tested to verify both its functional correctness and timing. (Simulation) Design Entry – the desired circuit is specified either by using a hardware description language, such as Verilog or VHDL, or by means of a schematic diagram.

Notes : LEs : Logic Elements CAD : Computer Aided Design Q1. Q2. Donner pour chacune des étapes une explication / traduction claire. Remplissez l’organigramme suivant représentant toutes les étapes.

1/8

2/8 .

Figure 1 : Carte DE1 de chez ALTERA 2.2. Procédure d’installation La procédure implique au minimum l’installation de : • QUARTUS II (Web Edition) + registration on ALTERA web Site for 150 days free Web Licence • Drivers de la carte DE1 permettant de charger le code dans le FPGA. Q1.1. Elle permet de mettre en œuvre toute une série d’applications de tests. Projet sur la platine DE1 ALTERA La carte électronique sur laquelle nous allons travailler en TD/TP est la carte DE1 de chez ALTERA. Après installation du kit de développement nous réalisons une application de test extrêmement simple. Expliquer pourquoi les applications permettant de tester le bon fonctionnement de la chaîne de développement doivent être très simple ? 3/8 .

et SW1 avec la broche nommée PIN_L22. Remettre dans l’ordre les actions à mener pour arriver à bout de cette petite application : • • • • • • • Q3.2. Q2. • Les entrées A et B seront prises sur l’interrupteur SW0 et SW1 • La sortie S sera la LED LEDR[0] La documentation de la carte DE1 précise une connexion de la LEDR[0] avec la broche nommée PIN_R20. Coder la partie ENTITY du système. on obtient le rapport de compilation suivant : Figure 2 : Rapport de compilation du projet Q4. le schéma électronique. A la compilation du code que vous avez créé. 4/8 . Logique combinatoire Nous allons tester notre platine en réalisant une porte NOR. SW0 avec la broche nommée PIN_L21.2. la table de vérité. D’après les caractéristiques du FPGA. et/ou le diagramme d’état du système. Faire les étapes précédentes que vous pouvez. Programmer la carte FPGA Tester le fonctionnement de l’application sur la platine Affecter les broches du composant aux entrées / sorties du système Ouvrir un projet sous le logiciel QUARTUS II (Web Edition) Coder le comportement du composant Dessiner sur papier libre. quel serait selon vous l’ordre de prix d’un composant de ce type pour des faibles quantités.

La sortie sera validée seulement sur la présence d’un front montant d’une horloge « clock ». 5/8 . Logique séquentielle synchrone Nous allons rajouter la présence d’une horloge dans notre système. Dans notre cas simple.3.Q5. expliquer la signification de tpd ? 2. Q7. Modifier l’architecture VHDL précédente afin de mettre en œuvre cette nouvelle application. A l’aide de la documentation de Quartus II ci-dessous. Donner le schéma logique global de cette application ? Q8. nous avons : Figure 3 : Timing Analyser summary Q6. • • Expliquer les champs suivants du rapport de compilation : Met timing requirements Total Logic Elements La section « Timing Analyser » permet d’avoir des informations sur les différents temps de propagation à l’intérieur du composant.

Timing Constraints : La compilation du circuit avec Quartus II nous a fourni une valeur maximale de cadencement du système (fmax). La fréquence souhaitée peut être sélectionnée dans : Assignment> Timing Analysis Settings >Classic Timing Analyser Settings 6/8 . Expliquer la 5ème ligne du tableau. Figure 5 : Timing Analyser du projet en logique synchrone Q10. nous pourrions souhaiter un cadencement à 400 Mhz au lieu des 380.4. Par exemple. Il est alors possible de préciser au compilateur les contraintes de temps à optimiser. dans le système précédent. Cette valeur peut ne pas être en adéquation avec le cahier des charges du produit final. La présence de l’horloge nous donne aussi une autre version du « compilation Report ».Figure 4 : Rapport de compilation du projet en mode synchrone Q9.08 Mhz trouvé. 2. Justifier les parties qui ont évoluées par rapport au mode combinatoire.

le schéma volontairement incomplet est le suivant : 7/8 . 2. Expliquer ce Warning et préciser si celui-ci (load capacitance) possède une influence quelconque sur les analyses de temps du système. Expliquer chacune des 3 méthodes d’optimisation qui sont proposées. Dans notre cas. nous avons ignoré un Warning couramment rencontré : Q12. A la compilation. Elles sont sélectionnables dans : Assignements>Settings>Fitter Settings. RTL Viewer L’outil RTL Viewer (Tool>Netlist Viewers>RTL Viewer) permet d’afficher le schéma designer par Quartus II et qui sera implémenté dans le FPGA.Plusieurs méthodes sont alors utilisables pour le compilateur puisse trouver le chemin le plus favorable à la contrainte fixée. (Ci-dessous) Figure 6 : Fitter Effort Figure 7 : Extrait de la documentation sur les possibilités d'optimisation Q11.5.

8/8 . Placer sur le schéma tous les éléments de la liste hiérarchique qu’il est possible de retrouver.Figure 8 : Vue incomplète du schéma fourni par le RTL Viewer Q13.

Description par flot de données Le système est décrit par les équations booléennes qu’il représente. Faire une description comportementale de ce composant en utilisant un process.Université de Savoie Module ETRS-511 FPGA et VHDL TD2 Synthèse de systèmes logiques combinatoires 1. Q2. 1/3 . Différentes méthodes de descriptions VHDL Nous allons étudier différentes façons de coder un projet VHDL.2.1. Q4. • L’architecture sera toujours appelée arch_appli. Réaliser la table de vérité de ce composant Faire une description comportementale de ce composant sans utiliser de process. Faire la description VHDL de ce composant. Q3. 1. Q1. Le schéma du système est le suivant : a & b 1 ≥1 S & c 1 Figure 1 : Schéma d'une application 1. • L’entité du Top level sera toujours appelée appli. Description comportementale Cette description permet de décrire le comportement sans faire appel aux équations mais en passant par la table de vérité.

Les segments seront commandés par les combinaisons de 4 entrées. a b g e d Figure 2 : Schéma du composant et numérotation des segments de l'afficheur f A B C D Transcodeur a b c d e f g c Réaliser un décodeur BCD 7 segments en VHDL. Q8. Lorsque le code binaire ne représente pas un chiffre décimal. Réaliser le composant ET Réaliser le composant NON Réaliser le composant OU Réaliser le composant globale en utilisant chacun des composants déjà réalisés.3. Q7. Q1.1. l’afficheur représentera un E symbolisant une erreur. Vous utiliserez un afficheur 7 segments pour lequel un niveau logique bas allume le segment et un niveau haut éteint le segment. Description structurelles La description structurelle décrit la fonction à partir de composants préexistants. WHEN. Réaliser le code VHDL entité et architecture en utilisant une structure WITH. Q2. Il suffit de définir : • La liste des composant utilisés (composant déjà écrit en VHDL par ailleurs) • La liste des interconnexions entres ces composants Q5. SELECT. Réaliser le code VHDL entité et architecture en utilisant une structure avec CASE. le RTL Viewer nous donne l’implémentation matérielle suivante : 2/3 . Transcodeur On souhaite réaliser un transcodeur qui prend en entrée un mot BCD (Binaire Codé Décimal) de 4 bits ABCD (D poids faible) et qui produit les sorties (a b c d e f g) de commande des leds de manière à afficher les symboles décimaux correspondants sur l'afficheur 7 segments. 2. Q6. WHEN. Lorsque le composant est chargé dans le FPGA.

la compilation donne le même schéma RTL Viewer. 3/3 . Q3.Figure 3 : Schéma partiel du RTL Viewer Note : Quel que soit la méthode de codage de l’architecture (process ou instructions concurrentes). Expliquer le schéma ci-dessus et préciser comment on arrive à allumer correctement chaque segment avec cette synthèse.

L’appui sur un bouton poussoir provoque un avertissement sonore (buzzer. Dans cette version du système. Sachant que nous disposons d’une horloge à 10 kz pour piloter notre système séquentiel. Q3. Construire un système de registre à décalage 8 bits Parallèle>Série. Faite un schéma électronique du système en considérant que vous utiliser la carte DE1. jusqu'à ce que le présentateur appuis sur Clear.Université de Savoie Module ETRS-511 FPGA et VHDL TD3 Synthèse de systèmes logiques séquentiels 1. Registre à décalage simple Q1. 1/4 . Le buzzer et les 4 signaux lumineux s’éteignent. Donner le diagramme d’états du dispositif. à l’aide d’une maquette DE1. Q4. Q2. le buzzer retenti pendant tout le temps. trouver une réalisation permettant d’avoir un retentissement du buzzer uniquement pendant 0. 2.5s. Implémenter votre nouveau système sans modifier le code des questions précédentes. commun à tous les joueurs) et le blocage du système. (Simplement en rajoutant un nouveau composant au système). Jeu On veut concevoir un jeu du type « Question pour un champion » (4 joueurs). Les autres joueurs ne peuvent alors plus intervenir car les autres boutons n’ont alors plus d’effet. Q1. Le système ne peut être remis à zéro que par l’animateur à l’aide d’une remise à zéro (Clear). C'est-à-dire que les bits du vecteur d’entrée (8 bits) sont transmis en sortie au rythme d’une horloge (front montant) lorsque la commande « send » est envoyée au système. Cela peut être contraignant. Ecrivez le programme permettant de réaliser cette fonction.1. Un reset (RAZ) asynchrone sera prévu. De plus. Registre à décalage 2. un signal lumineux (individuel à chaque joueur) spécifie le joueur ayant appuyé le premier parmi les quatre.

Dans ce code. on a la représentation suivante : 2/4 . seuls les ’0’ génèrent une transition. Faire le nouveau codage VHDL de la liaison série. pour transmettre le message : « 0 1 1 0 1 0 0 1 1 0 1 0 ». Conception d’un encodeur NRZI On utilise en communications numériques sur ligne câblée (paire torsadée. Registre à décalage liaison série Dans les liaison séries. Ceci permet d’obtenir des caractéristiques spectrales intéressantes et/ou des propriétés qui faciliteront la synchronisation au récepteur.2. câble coaxial) divers “codes de ligne” pour communiquer en bande de base. Le code en ligne que nous allons étudier est la code “NRZI” (Non Return to Zero Inverted) qui est utilisé dans le standard USB (Universal Serial Bus). c’est à dire que le signal est transmis tel quel sur la ligne (sans modulation). Ainsi. Figure 1 : Diagramme temporelle de la liaison série 3. Ces codes constituent tout simplement une façon de représenter les bits à transmettre. l’octet transmis sur la ligne est encadré par un bit de start (niveau bas) au début. Q2. et un bit de parité + un bit de stop (niveau haut) à la fin (cf Figure 1).2.

Ceci rend la synchronisation entre le transmetteur et le récepteur impossible. Intercalage de bit: Il doit être capable de détecter une séquence de 6 ’1’ successifs et de transmettre un message avec les éventuels « bits de stuffing ». 3/4 . le standard USB prévoit une opération d’intercalage de bits (“bit stuffing”). on intercale un ’0’ pour forcer une transition. Si un « bit de stuffing » intervient. Ce temps correspond au temps de mettre le bit supplémentaire dans le message.Figure 2 : le code en ligne NRZI Cet encodeur possède un désavantage majeur : si une trop longue séquence de bits ’1’ successifs est transmise. dès qu’une chaîne de six ’1’ est transmise. Pour remédier à cela. Une portion de la chaîne de communication correspondante est illustrée sur la figure suivante : Figure 3 : Schéma de fonctionnement général La source : Elle génère les bits du message à transmettre sur le câble USB. il n’y a aucune transition sur la ligne. la ligne “maintien” est placée à ’1’ pour un coup d’horloge afin de signaler à la source qu’il faut attendre. Il est facile d’enlever ces ’0’ au récepteur pour recomposer le message original. En effet. L’encodeur NRZI : Bloc réalisant la fonction NRZI de la Figure 2.

3. les états suivants et les sorties pour le bloc « encodeur NRZI ». Q2.1. Déterminer l’équation des sorties : sortie et Etat Futur. les entrées. Réaliser le schéma logique de votre machine d’état. Réaliser la description VHDL du module « intercalage de bits ». Construire le tableau regroupant les états courants.2. Encodeur NRZI Q1. On utilisera les variables du schéma de la Figure 3. Donner le code VHDL de l’encodeur NRZI avec une architecture codée en flot de donnée. Q6. Donner le graphe détaillé d’une machine d’état réalisant seulement le bloc de l’encodeur NRZI. Intercalage de bits Q7. Q4. Donner le code VHDL de l’encodeur NRZI avec une architecture codée en description comportementale. Note : Nous prendrons arbitrairement un état initiale associé a une valeur de Sortie=0 pour commencer le diagramme d’état.3. Q3. 4/4 . Q5.

La combinaison des chromophores RBG permet de réaliser une infinité de couleur. 1. Elle permettra au moyen de trois interrupteurs de réaliser l’affichage des trois couleurs RGV (Red. un Rouge (Red). Il est valable quelque soit la technologie de l’écran (cathodique ou LCD). Chaque pixel contient 3 chromophores. Présentation des signaux Une image est représentée par des Pixels (Picture Elements). un Vert (Green) et un Bleu (Blue). 2. Le standard VGA 2.1. 1/7 . Green and Blue) ou une combinaison des trois.Université de Savoie Module ETRS-511 FPGA et VHDL TD4 Video Graphic Array (VGA) L’affichage vidéo VGA est un grand standard courant pour l’affichage graphique. Objectifs : Nous avons pour objectif de réaliser une carte graphique très simple.

2. en haut. Le tableau ci-dessous indique des exemples de timings pour les différents standards. le nombre total de ligne et de colonnes est de 800x524 mais seulement 640x480 sont affichées. Les timings du standard VGA En réalité.7V) • Un signal analogique pour le Vert (0 > 0. le compteur des colonnes est remis à zéro et le compteur de ligne passe à 1. en bas ou à gauche grâce aux menus de l’écran.Figure 1 : Représentation d'une image à l'écran en 640x480 Un signal RGB contient 5 signaux : • Une synchronisation horizontale. Cela permet de laisser le temps pour revenir sur une nouvelle ligne ou de recommencer une nouvelle image. Pendant ce temps.7V) Comme le montre la Figure 1. En effet. les signaux RGB doivent être mis à zéro (couleur noire). le rafraîchissement de l’image débute en haut à gauche et se termine en bas à droite. dans le mode VGA. Chaque pixel est défini l’une après l’autre. permet de contrôler la position verticale de l’image dans la zone visible de l’écran. • Un signal analogique pour le Rouge (0 > 0. Il est important de noter que ces timings ne sont pas critiques et surtout qu’ils ne sont pas des références ! Chaque constructeur peut fournir des temps sensiblement différents sans pour autant porter préjudice à l’affichage. dans une certaine plage. Ces temps sont appelés : « front porch » et « back porch ».7V) • Un signal analogique pour le bleu (0 > 0. il est toujours possible d’ajuster l’image à droite. A la fin de la première ligne.2. etc…Jusqu’à que l’image soit complètement définie. 2/7 . permet de contrôler la position horizontale de l’image dans la zone visible de l’écran • Une synchronisation verticale. La fréquence de l’image doit être de 60Hz afin de réduire la perception du scintillement de l’image. (retour à la ligne ou recommencement d’une nouvelle image).

72Hz 800x600.500 31.000 49.500 640 640 640 800 800 800 800 800 1024 1024 1024 1024 Tableau 1 : Timing de l'ensemble des standards VGA Dans la Figure 2. 56Hz 800x600.Format Pixel Clock (MHz) Horizontal (in Pixels) Vertical (in Lines) Active Front Sync Back Active Front Sync Back Video Porch Pulse Porch Video Porch Pulse Porch 640 16 24 16 32 32 40 56 16 32 24 24 16 48 96 40 96 48 128 128 120 80 64 136 136 96 96 48 128 48 112 128 88 64 160 152 160 144 176 208 480 480 480 480 600 600 600 600 600 768 768 768 768 11 9 11 1 1 1 37 1 1 3 3 1 1 2 3 2 3 4 4 6 2 3 6 6 3 3 31 28 32 25 14 23 23 21 27 29 29 28 36 640x480. Figure 2 : Synchronisation horizontale Q1. compt_h est le compteur des pixels horizontaux. 72Hz 640x480. 60Hz 800x600.000 50.500 56. compléter la variable compt_h de la Figure 2. 60Hz 640x480. D’après le tableau des timings. 75Hz 1024x768.000 75. 85Hz 800x600.000 78. 60Hz 1024x768. permettant de savoir ou en est l’affichage et de générer convenablement le signal de synchronisation horizontale. 3/7 . 75Hz 800x600. 75Hz 640x480. 85Hz 31.000 38. 85Hz 1024x768.250 65.500 36.750 94.100 40. 70Hz 1024x768. sachant que nous travaillons en 640x480 à 60 Hz.

retrouver tous les temps du chronogramme. à partir de laquelle nous allons cadencer l’ensemble du système. Dans la figure ci-dessous. Nous prendrons une fréquence de 25Mhz comme horloge de référence de notre système séquentiel. La carte DE1 possède une horloge de 50 Mhz. Compléter le Tableau 1 en retrouvant la fréquence d’affichage des pixels (pixels Clock). Q3.Figure 3 : Synchronisation verticale Q2. compléter la variable compt_v de la Figure 3. Réalisation en VHDL Nous cherchons à implémenter le système de gestion des signaux VGA dans un FPGA. Le brochage de ce connecteur au FPGA est donné dans la documentation. Figure 4 : Signaux de synchronisation horizontal et RGB Q5. 4/7 . D’après le tableau des timings. 3. Q4. La carte DE1 de chez ALTERA possède en effet un connecteur VGA relié au FPGA. Réaliser le même type de schéma pour la synchronisation verticale.

Q6. Q9. expliquer son comportement. Comment allez vous réaliser l’architecture du bloc div2 ? Comment allez vous réaliser l’architecture des blocs compteurs ? Donner le diagramme d’état des deux séquenceurs? 5/7 . Pour chacun des blocs. En annexes est présenté un exemple de schéma possible pour la réalisation de l’interface VGA. Q7. Q8.

6/7 .

7/7 .

Q1. Quelle quantité de mémoire interne peut intégrer le FPGA de la carte DE1 Altera ? Q2. Q4. nous devons utiliser de la mémoire externe qui sera pilotée par le FPGA. indiquer les informations qui justifient les principales caractéristiques (Static. L’acronyme de SDRAM est Synchronous Dynamic RAM. Localiser la mémoire SRAM et la mémoire SDRAM sur la carte DE1. Q3. Si des quantités de mémoire plus importante sont nécessaires. Figure 1 : Features of the SRAM memory 1/5 . il est possible d’utiliser les ressources internes du composant du composant. Dynamic…) de chacune des mémoires. Synchronous. A l’aide du User Manuel fournie avec la maquette DE1.Université de Savoie Module ETRS-511 FPGA et VHDL TD5 Mémoires RAM Dans un système numérique il est souvent nécessaire de fournir une certaine quantité de mémoire afin de stocker et manipuler des variables. En comparant les spécifications des datasheets ci-dessous et des shcémas du User manual des deux mémoires RAM. Si ce système numérique est implémenté à base de FPGA. démontrer la taille de 512 Ko pour la SRAM. L’acronyme de SRAM est Static RAM.

Figure 2 : Features of the SDRAM memory Nous nous proposons d’implémenter la mémoire suivante dans le FPGA. Figure 3 : Mémoire RAM Q5. Quelle est la capacité de cette mémoire RAM ? 2/5 .

1. des registres. Créer un nouveau projet. Lorsque nous souhaitons réaliser des applications complexes. et en provenance de la mémoire. Utilisation de la mémoire interne du FPGA Figure 4 : Implémentation de la mémoire RAM en interne avec un bloc M4K Les FPGA Cyclone II comporte des blocs mémoires appelés M4K. Chaque bloc mémoire est composé de 4096 bits de mémoire qui peuvent être configurés pour implémenter de la mémoire de taille variables. les structures logiques telles que des additionneurs. des mémoires peuvent être implémentées en utilisant les modules LPM depuis les librairies paramétrables de Quartus II. Lancer l’outil de création de composant : Tool>MegaWizard Plug-In Mangage>Create a new custom MegaFunction variation L’écran 1 se constitue comme suit (Figure 5): 3/5 . Nous allons utiliser cette librairie pour implémenter la mémoire de la Figure 4. Les M4K blocs comportent des registres sur les entrées et possèdent deux ports différents pour l’écriture et la lecture des données à destination.1. des compteurs.

3. désélectionner ‘q’ output port dans la catégorie Wich port sould be registered ? Accepter les options par défaut des écrans suivants. Simulation du composant Modifier le code VHDL produit pour faire correspondre les noms des entrées/sorties de notre système (Figure 4) Compiler le circuit. 1.Figure 5 : Réalisation de la RAM interne en utilisant le Magawizard manager Dans l’écran 2.2. les données écrites et les données lues dans chaque emplacement mémoire. 4/5 . et sélectionner single clock dans Wich cloking method do you like to use ? Dans l’écran 3. 1. Le code de la gestion de l’afficheur 7 segments est fourni. Vérifier dans le rapport de compilation que les bits ont bien été affectés. sélectionner les blocs de mémoire M4K. Test du composant Nous allons créer une application de test à l’aide d’afficheur à 7 segments afin de pouvoir visualiser les adresses. Simuler le circuit en essayant d’écrire et de lire dans la mémoire.

Créer un nouveau Top-level en schematic (New>Block Diagram/Schematic File) avec votre module RAM et vos afficheurs 7 segments. 5/5 . vous devez les créer : Clic droit sur le composant (fichier VHDL) puis Create Symbol file for Current file. Réaliser un pin assignement qui vous permettra de tester le fonctionnement de la mémoire RAM à l’aide des éléments de la platine DE1 : Entrée DE1 SW0 à SW3 SW4 à SW7 SW9 KEY0 Signal Datain Adress Write Clock Dataout Affichage HEX1 HEX3 LEDG0 HEX0 Tester votre application sur la platine DE1. Pour obtenir un composant à partir des fichiers VHDL.