1. Objectifs
Ce TP vise à apprendre les rudiments de conception d'un FPGA en partant d'un
petit projet permettant de voir des points fondamentaux de la conception pour un
FPGA :
- La modélisation VHDL/Verilog.
- Un exemple d'organisation des fichiers.
- Un exemple de méthodologie de validation.
- Les inférences des composants.
- La synthèse et l'analyse post-synthèse.
- Les contraintes de placement.
- Le floorplanning et le placement routage.
2. Présentation de l'environnement
La maquette est construite autour d'un circuit logique programmable de type
FPGA. Elle possède un grand nombre d'entrée/sorties toutes connectées au
FPGA:
- 10 interrupteurs.
- 4 Boutons poussoirs.
- 6 afficheurs 7 segments.
- 10 diodes LEDS rouges.
- 2 bus d'extension offrants 76 signaux accessibles.
- 1 entrée/sortie clavier/souris et RS232.
- 2 ports usb2.
- 1 sortie moniteur VGA.
- 1 entrée vidéo (NTSC/PAL/multi-format).
- Un codec Audio.
Une photo de la maquette apparait ci-dessous. Vous pouvez retrouver le FPGA, les
E/S , le connecteur d'alimentation, le connecteur de programmation (via votre
PC), ainsi que les connecteurs d'extension.
En annexe, vous trouverez une documentation complète du FPGA et de la maquette.
3. Specifications
Il s'agit d'analyser et de mettre en oeuvre sur FPGA le projet "TOP" décrit en
VHDL. Ce projet est constitué de 3 modules FIFO, MULT et ACCU comme illustré
dans la figure suivante :
Ces blocks correspondent à une fifo, un multiplieur et un accumulateur. Deux
opérandes A et B sur 8bits son chargés dans la fifo quand le signal
d'écriture WR est à 1. Le Multiplieur fait la multiplication des opérandes
contenus dans la fifo quand le signal de lecture RD est à 1. Le résultat de la
multiplication (qui est lui sur 16 bits) est ensuite accumulé dans le block
Accumulateur. Le bloc de clipping sert à saturé l'addition en cas de
dépassement de capacité.
De plus, il faut noter que:
La fifo a une profondeur par défaut de 10 (elle peut être modifiée en
jouant sur des paramètres génériques) Le multiplieur a une latence de deux
coups d'horloges.
Vous pouvez télécharger les fichiers correspondants ici
4. Organisation du Projet
Vous allez dans un premier temps analyser la fonctionnalité du projet en
effectuant des simulations des modèles Vhdl et en analysant le code.
Placez vous dans le répertoire TP.
L'organisation du projet est illustrée par la figure suivante. top, fifo,
mult et accu sont des répertoires correspondant aux blocs fonctionnels. Les
blocs fifo, mult et accu sont indépendants. Le bloc top est le bloc de
hiérarchie la plus haute, il fait appelle aux autres blocs. Le répertoire
top_lib contiendra la bibliothèque VHDL compilée au moment de la simulation de
top et de ses sous blocs.
les sous-répertoires src contiennent les fichiers source de chaque bloc.
Dans le répertoire top, le sous-répertoire simu contient les fichiers
testbench ainsi que les fichiers de données pour le test. Les fichiers Makefile
permettent d'automatiser la compilation des fichiers pour la simulation, la
synthèse et l'analyse. les sous répertoires syn_altera et syn_prec contiennent
les fichiers de commandes et de contraintes pour effectuer la synthèse, le
placement/routage et l'analyse de timings avec les outils Quartus II d'altera et
Precision Synthesis de Mentor.
Placez vous dans le répertoire fifo et analysez le code source de fifo.
Comment est décrite cette fifo?
Placez vous dans le répertoire mult et analysez le code source du
multiplieur. Quelle est la latence de ce bloc?
Placez vous dans le répertoire accu et analysez le code source. Quelle est
la partie du code permettant de choisir le nombre de bits de l'accumulateur ?
Pourquoi utilise t'on une fonction de saturation.
Placez vous dans le répertoire top. Ecrivez le model structurel
de la niveau TOP en instanciant les sous-blocs fifo, mult, et accu,
avec votre langage hdl préféré. Ces cours sur VHDL structurel et
Verilog Structurel peuvent vous etre utiles.
5. Simulation et Analyse
Pour simuler le fonctionnement de l'ensemble du circuit nous avons préparé un
fichier de génération de stimulis (testbench). Ce fichier se trouve dans le
sous-répertoire simu du bloc top.
Analysez ce testbench (fichier top_test.vhd). Pourquoi n'y a t'il aucune
entrée et sortie ?
Placez vous dans le répertoire top/simu et lancez la simulation.
Pour créer le bibliotheque de Simulation:
$ vlib work
Pour compiler:
$ vcom ../../accu/src/accu.vhd ../../fifo/src/fifo.vhd ../../mult/src/mult.vhd ../../top/src/top.vhd top_test.vhd
Pour lancer la simulation:
$ vsim TOP_TEST -do wave.do
Vous pouvez aussi executer les étapes precedents avec la commande
$ make simu.
dans le repertoire top.
A partir des chronogrammes, expliquez pourquoi le résultat est
retardé par rapport à la commande de lecture RD.
6. Programmation et Test In-Situ
Une fois la simulation effectuée vous pouvez tester le fonctionnement
du circuit sur la maquette. En lançant la commande make syn (toujours
dans le répertoire top) vous pouvez exécuter le script de synthèse et
placement-routage. Cette étape génère une netlist puis un bit-stream (fichier
binaire de configuration) pour programmer le FPGA de la maquette.
Pour programmer le FPGA lancez make program.
Signal |
Correspondance sur la maquette |
Entrée A |
SW[9:6] |
Entrée B |
SW[5:2] |
CLK |
KEY[3] |
RW |
SW[1] |
RD |
SW[0] |
FULL |
LEDR[0] |
EMPTY |
LEDR[1] |
Sortie Q |
Afficheur 7 segments HEX3,2,1,0 |
sortie de la fifo |
Afficheur 7 segments HEX5,4 |
NRST | KEY[0] |
7. Compilation et Analyse avec QUARTUSII (Altera)
Vous pouvez lancer quartus en exécutant dans le terminal la commande quartus&.
Si vous avez déjà testé le design sur la maquette, il existe un
fichier projet pour Quartus. Ce fichier se trouve dans le répertoire
top/syn_altera/quartus.
Ouvrez le projet quartus en utilisant la commande open project qui se trouve
dans le menu File de quartus.
Quartus propose aussi des outils d'analyse:
Dans le menu Processing vous pouvez accéder aux rapports de synthèse
(Compilation Report). Analysez ces rapports et notez l'utilisation des
ressources du FPGA et les performances temporelles (Fréquence Max, Chemin
critique...).
Dans le sous-menu Tools/Netlist Viewer vous trouverez les outils RTL viewer
et Technology Map viewer permettent de visualiser le résultat de la synthèse
au niveau RTL et technologique.
L'outil Chip planner qui se trouvre dans le menu Tools vous permet de voire
le placement des cellules dans le FPGA.
8. Les contraints de Placement/Routage
Ouvrez l’outil « Chip Planner », en cliquant « Tools -> Chip Planner ». Le
plan du FPGA Cyclone V s’affiche.
Votre circuit TOP est situé dans une zone surligné, qui a été placé/routé
automatiquement.
Pour mettre des contraintes de placements ouvrez le fentere «Logiclock » en
utilisant view-> « Logiclock Regions Window ». Ensuite créez une région de
placement avec « view -> LogicLock Regions -> Create LogicLock Region »
Créez deux régions region_fifo et region_mult. Revenez dans le page
principal et assigné le bloc fifo et mult dans leurs propres régions. Pour
faire ça, dans la fenêtre principale et faite clic droit sur module et puis
«Logiclock Region-> Assign to existing logiclock region »
Relancer le placement/routage : « Processing->start->start fitter »
Est-ce que les blocs sont bien placés ?
Essayez de changer la taille de FIFO et observez l'effet sur le placement.
9. Analyse de Timing et Consommation
Ouvrez le fichier syn_altera/constrains_clock.tcl. Ce fichier spécifie le
Fréquence d’opération du circuit TOP. Pour le moment il est fixé à 200 MHz.
Ouvrez l’outil d’analyse de timing : Netlist Setup -> Read SDC file. Ensuite,
Netlist Setup -> Update Timing Netlist.
Maintenant vous pouvez consulter les rapports de timing notamment « Report
Fmax Summary ».
Vous pouvez essayer à nouveau avec un corner différent en utilisant
« Netlist -> Set Operating Conditions ».
Essayez Report Timing : « Reports -> Custom Reports -> Report Timing » .
Une liste de tous les chemins critiques est affichée. Vous pouvez localiser ces
chemins critiques dans chip planner en utilisant clique droit et
« Locate -->Locate in Chip Planner ».
Pour faire une analyse de consommation ouvrez l'outil Powerplay en utilisant
« Processing -> Start -> Start Powerplay Power analyzer ». L'estimation de
la consommation en mW s'affiche dans le fenetre de message.
10. Optimisation
L'analyse des performances temporelles du bloc DE2-top montre que le chemin
critique se trouve dans le multiplieur (entre la sortie de la fifo et la sortie
du multiplieur).
Pour améliorer les performances temporelles, nous vous proposons de rajouter un
étage de pipeline à la sortie de la fifo. Analysez le code VHDL pour la fifo
qui se trouve dans le fichier fifo/src/fifo_fast.vhd. Copié ce fichier à la
place du fichier fifo.vhd.
Relancez la simulation (dans le répertoire top exécutez make simu) et observez
le fonctionnement. Quelle est la différence de comportement par rapport à la
première simulation?
Le nouveau code que nous vous avons proposé pour la fifo ajoute un temps de
latence supplémentaire, corrigez donc ce paramètre (fifo_latence) dans le
fichier top.vhd et relancez la simulation pour vérifier le fonctionnement.
Refaite une synthèse et notez les nouvelles performances. Faites le bilan des
ressources utilisées dans ce cas et comparez les avec celle utilisée avec la
première version de la fifo.
Annexes
- La carte DE1-SoC
- Le FPGA Cyclone V
- Archive TP
Fichier attaché | Taille |
---|---|
![]() | 1.03 Mo |