TP FPGA: Apprentissage à la conception avec un FPGA

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.

 

CARTE DE1-SOC

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

Fichier attachéTaille
Fichier tp.tgz1.03 Mo