Travaux Dirigés - UFR - SFA Université de Savoie.

Transcription

Travaux Dirigés - UFR - SFA Université de Savoie.
Université de Savoie
Module ETRS-511
FPGA & VHDL
Travaux Dirigés
FPGA & VHDL
Sylvain MONTAGNY
[email protected]
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.
Donner pour chacune des étapes une explication / traduction claire.
Q2.
Remplissez l’organigramme suivant représentant toutes les étapes.
1/8
2/8
2. Projet sur la platine DE1 ALTERA
La carte électronique sur laquelle nous allons travailler en TD/TP est la carte DE1 de chez
ALTERA. Elle permet de mettre en œuvre toute une série d’applications de tests.
Figure 1 : Carte DE1 de chez ALTERA
2.1. 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.
Après installation du kit de développement nous réalisons une application de test
extrêmement simple.
Q1. Expliquer pourquoi les applications permettant de tester le bon fonctionnement de la
chaîne de développement doivent être très simple ?
3/8
2.2. Logique combinatoire
Nous allons tester notre platine en réalisant une porte NOR.
• 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, SW0 avec la broche nommée PIN_L21, et SW1 avec la broche nommée
PIN_L22.
Q2. Remettre dans l’ordre les actions à mener pour arriver à bout de cette petite
application :
•
•
•
•
•
•
•
Q3.
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, la table de vérité, le schéma électronique, et/ou le
diagramme d’état du système.
Coder la partie ENTITY du système.
Faire les étapes précédentes que vous pouvez.
A la compilation du code que vous avez créé, on obtient le rapport de compilation suivant :
Figure 2 : Rapport de compilation du projet
Q4. D’après les caractéristiques du FPGA, quel serait selon vous l’ordre de prix d’un
composant de ce type pour des faibles quantités.
4/8
Q5.
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. Dans notre cas simple, nous avons :
Figure 3 : Timing Analyser summary
Q6. A l’aide de la documentation de Quartus II ci-dessous, expliquer la signification de
tpd ?
2.3. Logique séquentielle synchrone
Nous allons rajouter la présence d’une horloge dans notre système. La sortie sera validée
seulement sur la présence d’un front montant d’une horloge « clock ».
Q7.
Donner le schéma logique global de cette application ?
Q8. Modifier l’architecture VHDL précédente afin de mettre en œuvre cette nouvelle
application.
5/8
Figure 4 : Rapport de compilation du projet en mode synchrone
Q9.
Justifier les parties qui ont évoluées par rapport au mode combinatoire.
La présence de l’horloge nous donne aussi une autre version du « compilation Report ».
Figure 5 : Timing Analyser du projet en logique synchrone
Q10. Expliquer la 5ème ligne du tableau.
2.4. Timing Constraints :
La compilation du circuit avec Quartus II nous a fourni une valeur maximale de cadencement
du système (fmax). Cette valeur peut ne pas être en adéquation avec le cahier des charges du
produit final. Il est alors possible de préciser au compilateur les contraintes de temps à
optimiser. Par exemple, dans le système précédent, nous pourrions souhaiter un cadencement
à 400 Mhz au lieu des 380,08 Mhz trouvé.
La fréquence souhaitée peut être sélectionnée dans :
Assignment> Timing Analysis Settings >Classic Timing Analyser Settings
6/8
Plusieurs méthodes sont alors utilisables pour le compilateur puisse trouver le chemin le plus
favorable à la contrainte fixée. Elles sont sélectionnables dans :
Assignements>Settings>Fitter Settings. (Ci-dessous)
Figure 6 : Fitter Effort
Figure 7 : Extrait de la documentation sur les possibilités d'optimisation
Q11. Expliquer chacune des 3 méthodes d’optimisation qui sont proposées.
A la compilation, nous avons ignoré un Warning couramment rencontré :
Q12. Expliquer ce Warning et préciser si celui-ci (load capacitance) possède une influence
quelconque sur les analyses de temps du système.
2.5. 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.
Dans notre cas, le schéma volontairement incomplet est le suivant :
7/8
Figure 8 : Vue incomplète du schéma fourni par le RTL Viewer
Q13. Placer sur le schéma tous les éléments de la liste hiérarchique qu’il est possible de
retrouver.
8/8
Université de Savoie
Module ETRS-511
FPGA et VHDL
TD2
Synthèse de systèmes logiques combinatoires
1. Différentes méthodes de descriptions VHDL
Nous allons étudier différentes façons de coder un projet VHDL.
• L’entité du Top level sera toujours appelée appli.
• L’architecture sera toujours appelée arch_appli.
Le schéma du système est le suivant :
a
&
b
1
≥1
S
&
c
1
Figure 1 : Schéma d'une application
1.1. Description par flot de données
Le système est décrit par les équations booléennes qu’il représente.
Q1.
Faire la description VHDL de ce composant.
1.2. Description comportementale
Cette description permet de décrire le comportement sans faire appel aux équations mais en
passant par la table de vérité.
Q2.
Réaliser la table de vérité de ce composant
Q3.
Faire une description comportementale de ce composant sans utiliser de process.
Q4.
Faire une description comportementale de ce composant en utilisant un process.
1/3
1.3. Description structurelles
La description structurelle décrit la fonction à partir de composants préexistants. 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.
Réaliser le composant ET
Q6.
Réaliser le composant NON
Q7.
Réaliser le composant OU
Q8.
Réaliser le composant globale en utilisant chacun des composants déjà réalisés.
2. 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.
a
b
f
A B C D
Transcodeur
a b c d e f g
g
c
e
d
Figure 2 : Schéma du composant et numérotation des segments de l'afficheur
Réaliser un décodeur BCD 7 segments en VHDL. Vous utiliserez un afficheur 7 segments
pour lequel un niveau logique bas allume le segment et un niveau haut éteint le segment. Les
segments seront commandés par les combinaisons de 4 entrées. Lorsque le code binaire ne
représente pas un chiffre décimal, l’afficheur représentera un E symbolisant une erreur.
Q1. Réaliser le code VHDL entité et architecture en utilisant une structure WITH,
SELECT, WHEN.
Q2. Réaliser le code VHDL entité et architecture en utilisant une structure avec CASE,
WHEN.
Lorsque le composant est chargé dans le FPGA, le RTL Viewer nous donne l’implémentation
matérielle suivante :
2/3
Figure 3 : Schéma partiel du RTL Viewer
Note : Quel que soit la méthode de codage de l’architecture (process ou instructions
concurrentes), la compilation donne le même schéma RTL Viewer.
Q3. Expliquer le schéma ci-dessus et préciser comment on arrive à allumer correctement
chaque segment avec cette synthèse.
3/3
Université de Savoie
Module ETRS-511
FPGA et VHDL
TD3
Synthèse de systèmes logiques séquentiels
1. Jeu
On veut concevoir un jeu du type « Question pour un champion » (4 joueurs), à l’aide d’une
maquette DE1. L’appui sur un bouton poussoir provoque un avertissement sonore (buzzer,
commun à tous les joueurs) et le blocage du système. De plus, un signal lumineux (individuel
à chaque joueur) spécifie le joueur ayant appuyé le premier parmi les quatre. Les autres
joueurs ne peuvent alors plus intervenir car les autres boutons n’ont alors plus d’effet. Le
système ne peut être remis à zéro que par l’animateur à l’aide d’une remise à zéro (Clear). Le
buzzer et les 4 signaux lumineux s’éteignent.
Q1. Faite un schéma électronique du système en considérant que vous utiliser la carte
DE1.
Q2.
Donner le diagramme d’états du dispositif.
Q3.
Ecrivez le programme permettant de réaliser cette fonction.
Dans cette version du système, le buzzer retenti pendant tout le temps, jusqu'à ce que le
présentateur appuis sur Clear. Cela peut être contraignant.
Q4. Sachant que nous disposons d’une horloge à 10 kz pour piloter notre système
séquentiel, trouver une réalisation permettant d’avoir un retentissement du buzzer
uniquement pendant 0,5s. Implémenter votre nouveau système sans modifier le code des
questions précédentes. (Simplement en rajoutant un nouveau composant au système).
2. Registre à décalage
2.1. Registre à décalage simple
Q1. Construire un système de registre à décalage 8 bits Parallèle>Série. 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. Un reset (RAZ) asynchrone
sera prévu.
1/4
2.2. Registre à décalage liaison série
Dans les liaison séries, l’octet transmis sur la ligne est encadré par un bit de start (niveau bas)
au début, et un bit de parité + un bit de stop (niveau haut) à la fin (cf Figure 1).
Q2.
Faire le nouveau codage VHDL de la liaison série.
Figure 1 : Diagramme temporelle de la liaison série
3. Conception d’un encodeur NRZI
On utilise en communications numériques sur ligne câblée (paire torsadée, câble coaxial)
divers “codes de ligne” pour communiquer en bande de base, c’est à dire que le signal est
transmis tel quel sur la ligne (sans modulation). Ces codes constituent tout simplement une
façon de représenter les bits à transmettre. Ceci permet d’obtenir des caractéristiques
spectrales intéressantes et/ou des propriétés qui faciliteront la synchronisation au récepteur.
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). Dans ce code, seuls les ’0’
génèrent une transition. Ainsi, pour transmettre le message : « 0 1 1 0 1 0 0 1 1 0 1 0 », on a
la représentation suivante :
2/4
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, il n’y a aucune transition sur la ligne. Ceci rend la synchronisation
entre le transmetteur et le récepteur impossible. Pour remédier à cela, le standard USB prévoit
une opération d’intercalage de bits (“bit stuffing”). En effet, dès qu’une chaîne de six ’1’ est
transmise, on intercale un ’0’ pour forcer une transition. Il est facile d’enlever ces ’0’ au
récepteur pour recomposer le message original.
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.
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 ». Si un « bit de stuffing »
intervient, la ligne “maintien” est placée à ’1’ pour un coup d’horloge afin de signaler à la
source qu’il faut attendre. Ce temps correspond au temps de mettre le bit supplémentaire dans
le message.
L’encodeur NRZI : Bloc réalisant la fonction NRZI de la Figure 2.
3/4
3.1. Encodeur NRZI
Q1. Donner le graphe détaillé d’une machine d’état réalisant seulement le bloc de
l’encodeur NRZI. On utilisera les variables du schéma de la Figure 3.
Note : Nous prendrons arbitrairement un état initiale associé a une valeur de Sortie=0 pour
commencer le diagramme d’état.
Q2. Donner le code VHDL de l’encodeur NRZI avec une architecture codée en description
comportementale.
Q3. Construire le tableau regroupant les états courants, les entrées, les états suivants et
les sorties pour le bloc « encodeur NRZI ».
Q4.
Déterminer l’équation des sorties : sortie et Etat Futur.
Q5.
Réaliser le schéma logique de votre machine d’état.
Q6. Donner le code VHDL de l’encodeur NRZI avec une architecture codée en flot de
donnée.
3.2. Intercalage de bits
Q7.
Réaliser la description VHDL du module « intercalage de bits ».
4/4
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. Il est
valable quelque soit la technologie de l’écran (cathodique ou LCD).
1. Objectifs :
Nous avons pour objectif de réaliser une carte graphique très simple. Elle permettra au moyen
de trois interrupteurs de réaliser l’affichage des trois couleurs RGV (Red, Green and Blue) ou
une combinaison des trois.
2. Le standard VGA
2.1. Présentation des signaux
Une image est représentée par des Pixels (Picture Elements). Chaque pixel contient 3
chromophores, un Rouge (Red), un Vert (Green) et un Bleu (Blue). La combinaison des
chromophores RBG permet de réaliser une infinité de couleur.
1/7
Figure 1 : Représentation d'une image à l'écran en 640x480
Un signal RGB contient 5 signaux :
• Une synchronisation horizontale, permet de contrôler la position horizontale de
l’image dans la zone visible de l’écran
• Une synchronisation verticale, 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,7V)
• Un signal analogique pour le Vert (0 > 0,7V)
• Un signal analogique pour le bleu (0 > 0,7V)
Comme le montre la Figure 1, le rafraîchissement de l’image débute en haut à gauche et se
termine en bas à droite. Chaque pixel est défini l’une après l’autre. A la fin de la première
ligne, le compteur des colonnes est remis à zéro et le compteur de ligne passe à 1,
etc…Jusqu’à que l’image soit complètement définie. La fréquence de l’image doit être de
60Hz afin de réduire la perception du scintillement de l’image.
2.2. Les timings du standard VGA
En réalité, dans le mode VGA, le nombre total de ligne et de colonnes est de 800x524 mais
seulement 640x480 sont affichées. Cela permet de laisser le temps pour revenir sur une
nouvelle ligne ou de recommencer une nouvelle image. Pendant ce temps, (retour à la ligne ou
recommencement d’une nouvelle image), les signaux RGB doivent être mis à zéro (couleur
noire). Ces temps sont appelés : « front porch » et « back porch ».
Le tableau ci-dessous indique des exemples de timings pour les différents standards. 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. En effet, dans une certaine plage, il est toujours possible
d’ajuster l’image à droite, en haut, en bas ou à gauche grâce aux menus de l’écran.
2/7
Format
Pixel
Clock
(MHz)
640x480, 60Hz
Horizontal (in Pixels)
Vertical (in Lines)
Active Front Sync Back Active Front Sync Back
Video Porch Pulse Porch Video Porch Pulse Porch
640
16
96
48
480
11
2
31
640x480, 72Hz
31.500
640
24
40
128
480
9
3
28
640x480, 75Hz
31.500
640
16
96
48
480
11
2
32
640x480, 85Hz
36.000
640
32
48
112
480
1
3
25
800x600, 56Hz
38.100
800
32
128
128
600
1
4
14
800x600, 60Hz
40.000
800
40
128
88
600
1
4
23
800x600, 72Hz
50.000
800
56
120
64
600
37
6
23
800x600, 75Hz
49.500
800
16
80
160
600
1
2
21
800x600, 85Hz
56.250
800
32
64
152
600
1
3
27
1024x768, 60Hz
65.000
1024
24
136
160
768
3
6
29
1024x768, 70Hz
75.000
1024
24
136
144
768
3
6
29
1024x768, 75Hz
78.750
1024
16
96
176
768
1
3
28
1024x768, 85Hz
94.500
1024
48
96
208
768
1
3
36
Tableau 1 : Timing de l'ensemble des standards VGA
Dans la Figure 2, compt_h est le compteur des pixels horizontaux, permettant de savoir ou en
est l’affichage et de générer convenablement le signal de synchronisation horizontale.
Figure 2 : Synchronisation horizontale
Q1. D’après le tableau des timings, compléter la variable compt_h de la Figure 2, sachant
que nous travaillons en 640x480 à 60 Hz.
3/7
Figure 3 : Synchronisation verticale
Q2.
D’après le tableau des timings, compléter la variable compt_v de la Figure 3.
Q3. Compléter le Tableau 1 en retrouvant la fréquence d’affichage des pixels (pixels
Clock).
Nous prendrons une fréquence de 25Mhz comme horloge de référence de notre système
séquentiel.
Q4.
Dans la figure ci-dessous, retrouver tous les temps du chronogramme.
Figure 4 : Signaux de synchronisation horizontal et RGB
Q5.
Réaliser le même type de schéma pour la synchronisation verticale.
3. Réalisation en VHDL
Nous cherchons à implémenter le système de gestion des signaux VGA dans un FPGA. La
carte DE1 de chez ALTERA possède en effet un connecteur VGA relié au FPGA. Le
brochage de ce connecteur au FPGA est donné dans la documentation. La carte DE1 possède
une horloge de 50 Mhz, à partir de laquelle nous allons cadencer l’ensemble du système.
4/7
Q6. En annexes est présenté un exemple de schéma possible pour la réalisation de
l’interface VGA. Pour chacun des blocs, expliquer son comportement.
Q7.
Comment allez vous réaliser l’architecture du bloc div2 ?
Q8.
Comment allez vous réaliser l’architecture des blocs compteurs ?
Q9.
Donner le diagramme d’état des deux séquenceurs?
5/7
6/7
7/7
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. Si ce système numérique est implémenté
à base de FPGA, il est possible d’utiliser les ressources internes du composant du composant.
Si des quantités de mémoire plus importante sont nécessaires, nous devons utiliser de la
mémoire externe qui sera pilotée par le FPGA.
Q1.
Quelle quantité de mémoire interne peut intégrer le FPGA de la carte DE1 Altera ?
Q2. A l’aide du User Manuel fournie avec la maquette DE1, démontrer la taille de 512 Ko
pour la SRAM.
Q3.
Localiser la mémoire SRAM et la mémoire SDRAM sur la carte DE1.
L’acronyme de SRAM est Static RAM.
L’acronyme de SDRAM est Synchronous Dynamic RAM.
Q4. En comparant les spécifications des datasheets ci-dessous et des shcémas du User
manual des deux mémoires RAM, indiquer les informations qui justifient les principales
caractéristiques (Static, Synchronous, Dynamic…) de chacune des mémoires.
Figure 1 : Features of the SRAM memory
1/5
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.1. 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 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, et en provenance de la mémoire.
Lorsque nous souhaitons réaliser des applications complexes, les structures logiques telles que
des additionneurs, des registres, des compteurs, des mémoires peuvent être implémentées en
utilisant les modules LPM depuis les librairies paramétrables de Quartus II. Nous allons
utiliser cette librairie pour implémenter la mémoire de la Figure 4.
Créer un nouveau projet.
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
Figure 5 : Réalisation de la RAM interne en utilisant le Magawizard manager
Dans l’écran 2, sélectionner les blocs de mémoire M4K, et sélectionner single clock dans
Wich cloking method do you like to use ?
Dans l’écran 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.
1.2. 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.
Vérifier dans le rapport de compilation que les bits ont bien été affectés.
Simuler le circuit en essayant d’écrire et de lire dans la mémoire.
1.3. Test du composant
Nous allons créer une application de test à l’aide d’afficheur à 7 segments afin de pouvoir
visualiser les adresses, les données écrites et les données lues dans chaque emplacement
mémoire.
Le code de la gestion de l’afficheur 7 segments est fourni.
4/5
Créer un nouveau Top-level en schematic (New>Block Diagram/Schematic File) avec votre
module RAM et vos afficheurs 7 segments. Pour obtenir un composant à partir des fichiers
VHDL, 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
Signal
Affichage
SW0 à SW3
SW4 à SW7
SW9
KEY0
Datain
Adress
Write
Clock
Dataout
HEX1
HEX3
LEDG0
Tester votre application sur la platine DE1.
5/5
HEX0

Documents pareils