Académique Documents
Professionnel Documents
Culture Documents
COURS / TP
FPGA
Consignes
Faites valider le code par l’enseignant avant la programmation de la carte
Faites valider chacun des exercices par l’enseignant
Il vous est conseillé de faire un compte-rendu de chacun des TP
–3–
GEII - MC-ENSL1 TP 0
Systèmes logiques programmables
Objectifs
Découvrir l’architecture des FPGA.
Découvrir la carte d’étude BASYS de Digilent.
Dans le domaine des systèmes numériques, il existe deux grandes sortes de composants :
les processeurs (et dérivés : microcontroleurs, DSP...) qui font du traitement séquentiel
les composants programmables qui font du traitement parallèle
1. Les FPGA
Ces systèmes programmables sont initialement destinés au prototypage de systèmes numériques complexes. Ils
sont une bonne alternative aux circuits spécifiques, les ASIC (Application Specific Integrated Circuit), pour des petites ou
moyennes séries.
Il existe plusieurs grands fabricants : ALTERA, ACTEL (composants spécialisés) et XILINX. Pour les TP, nous
utiliserons des FPGA de chez Xilinx.
1.1. Implantation
Chaque fabricant propose aussi des composants de taille variable : de 100.000 à 10.000.000 portes logiques. Par
comparaison, les portes standards commerciales possèdent entre 2 et 8 portes logiques pour une surface de silicium
quasiment identique.
Quelque soit la technologie utilisée, aucune porte logique n’est réellement implantée. Il s’agit en fait de blocs
logiques programmables, mais très versatiles (RAM), et d’une mer de connexions programmables. Chez Xilinx, ces
blocs logiques sont appelés CLB (Common Logic Blocks).
1.2. Avantages et inconvénients
Très haute densité
Grande vitesse (100 MHz à quelques GHz)
Très grand nombre d’entrées/sorties (boîtiers BGA)
Prix élevé (mais en baisse)
Alimentation difficile (plusieurs tensions, courants élevés, connexions multiples)
Volatiles (cellules RAM)
Circuits imprimés (PCB - Printed Circuit Board) multicouches
Les FPGA sont un rassemblement et une combinaison de différents blocs : d’entrées/sorties (IOB - Input Output
Blocks), de routage (PSM - Programmable Switch Matrix), de logique programmable (CLB - Configurable Logic
–5–
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP
Les CLB (voir figure 3) sont décomposés en 2 ou 4 SLICE (appellation de Xilinx). Ces SLICE sont eux-mêmes
décomposés en 2 LUT (Look-Up Table) et 2 bascules D.
–6–
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP
Les éléments séquentiels (synchrones sur front ou niveau) sont implantés sur des bascules (D le plus fréquemment).
–7–
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP
3.2. Horloges
Il y a trois horloges de caractéristiques différentes produites par un circuit spécial : 25, 50 et 100 MHz.
Ces trois signaux sont connectés à la même broche spécifique du FPGA.
3.3. Afficheurs 7 segments multiplexés
Le multiplexage de l’affichage permet de limiter le nombre de connexions
pour ces 4 afficheurs. Mais son fonctionnement exige la mise en œuvre
de composants séquentiels.
Pour activer un segment (cathode), on doit placer un ’0’ (zéro) sur
la sortie correspondant au segment seg. Pour activer un afficheur, il faut
également placer un ’0’ sur la sortie an désirée, (en raison de la présence
d’un transistor amplificateur inverseur).
a...g, dp = cathodes des segments et du point décimal de tous les
afficheurs ; an = commandes des anodes communes des afficheurs.
–8–
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP
L’utilitaire Adept (Digilent) sera alors utiliser pour transférer le fichier binaire vers le FPGA.
–9–
GEII - MC-ENSL1 TP 1
Développement d’un système numérique
Objectifs
Développer des systèmes numériques programmables simples (multiplexeur, compteur...).
Simuler un système numérique.
2. Phases de développement
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP
L’écriture des différents modules (ou composants) est la première chose à réaliser. Ceux-ci peuvent être décrits et
testés séparément. Nous verrons par la suite comment décrire un composant.
Ensuite, il est possible (et fortement conseillé) de vérifier la syntaxe de la description, en faisant appel à la fonction
"Check Syntax" dans la partie "Synthetize XST". Cette étape est assez rapide et ne nécessite pas de connaître la cible,
contrairement à l’étape d’après.
Viens ensuite la phase de synthèse ("Synthetize XST") puis de placement et de routage ("Implement Design"). Ces
étapes nécessitent la connaissance, d’une part, de la cible (FPGA ou CPLD) et, d’autre part, de l’environnement du circuit
(entrées/sorties associées aux autres composants de la maquette). Il est donc nécessaire, avant de réaliser ces étapes-là,
de faire l’assignation des broches du composant avec la description fournie. Pour cela, vous pouvez vous aider de la
fonction "Assign Package Pins" dans la partie "User Constraints" et de la documentation de la maquette fournie en début
de ce document.
Il est aussi possible à ce stade de lancer différentes simulations :
fonctionnelle : permettant de savoir si le fonctionnement du système est celui décrit ;
post-synthèse : permettant, après synthèse, de vérifier à nouveau le fonctionnement du système ;
temporelle : permettant, après l’étape de routage, de valider les contraintes temporelles associées au placement des
"composants".
Ces différentes phases doivent être répétées pour l’ensemble des modules composant l’application. La dernière étape
consiste à produire le fichier de programmation ("Generate Programming File") et à le transférer dans la mémoire du
FPGA.
– 11 –
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP
3.2. Entité
L’entité permet de spécifier les différents ports d’entrées/sorties du système. Pour
chacun d’entre eux, il est indispensable de donner sa direction :
in entrée simple
out sortie simple
buffer sortie rétroactive
inout entrée-sortie bidirectionnelle (conflits possibles)
et son type (voir section suivante).
1 entity cours is
2 port (
3 a, b : i n STD_LOGIC ; −− c o m m e n t a i r e
4 s : o u t STD_LOGIC
5 );
6 end c o u r s ;
3.3. Architecture
Une architecture est reliée à une entité et permet de décrire le fonctionnement du système. Cette description peut
être de deux types :
description comportementale : le comportement du système est décrit (description la plus couramment utilisée en
VHDL) ;
description structurelle : la structure meme du système est décrite à base de portes logiques, bascules... (description
réservée à des fonctions simples ou pré-calculées).
1 architecture Behavorial of cours i s
2 −− d e c l a r a t i o n d e s s i g n a u x
3 begin
4 processus1 ;
5 processus2 ;
6 ...
7 end B e h a v o r i a l ;
– 12 –
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP
5. Instructions en VHDL
5.1. Hors processus
Ces instructions décrivent le plus souvent des éléments combinatoires (concurrentes).
1 with expr s e l e c t
2 x <= a when v a l 1 ,
3 b when v a l 2 ,
4 ...
5 z when o t h e r s ;
1 f o r i i n MIN t o MAX g e n e r a t e
2 i n s t r u c t i o n s de d e s c r i p t i o n ;
3 end g e n e r a t e ;
5.2.1 Syntaxe
– 13 –
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP
5.2.2 Test : SI
1 i f x=" 00 " t h e n
2 y <= ’ 0 ’ ;
3 e l s i f x=" 01 " t h e n
4 y <= ’ 1 ’ ;
5 end i f ;
1 case x i s
2 when " 00 " => y <= " 00 " ;
3 when " 01 " => y <= " 10 " ;
4 when o t h e r s => y <= " 11 " ;
5 end c a s e ;
1 for i in 0 to 5 loop
2 instructions ;
3 end l o o p ;
5.2.5 Temporisation
– 14 –
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP
EXERCICE 1
Décrire un système logique en VHDL dont le fonctionnement est donné par l’équation :
s = a + a + b.
a et b seront des interrupteurs et s une LED.
EXERCICE 2
EXERCICE 3
Réaliser un compteur 4 bits.
L’horloge sera réalisée à l’aide d’un bouton poussoir et les sorties seront visualisées sur des
LEDs.
Attention : pour les versions supérieures à 10.1 de Xilinx ISE, afin de pouvoir générer le fichier de programma-
tion correctement, vous devrez ajouter la ligne : NET "clk" CLOCK_DEDICATED_ROUTE = FALSE; dans le fichier de
contraintes (*.ucf).
– 15 –
GEII - MC-ENSL1 TP 2
Structuration et simulation
Objectifs
Structurer un système en bloc fonctionnel (instanciation de composants).
Simuler des systèmes numériques simples avec Xilinx ISE.
Fichier system.vhd
1 l i b r a r y IEEE ;
2 u s e IEEE . STD_LOGIC_1164 . ALL;
3
4 e n t i t y system i s
5 Port (
6 a _ s y s , b _ s y s , c _ s y s : i n STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ;
7 s _ s y s : o u t STD_LOGIC_VECTOR ( 3 DOWNTO 0 )
8 );
9 end s y s t e m ;
10
11 ar chi tect ure simple of system i s
12 component a d d i t i o n n e u r
13 port ( a , b : i n STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ;
14 s : o u t STD_LOGIC_VECTOR ( 3 DOWNTO 0 )
15 );
16 end component ;
17
18 s i g n a l s _ s i g : STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ;
19
20 begin
21 add1 : a d d i t i o n n e u r
22 p o r t map ( a => a _ s y s , b => b _ s y s , s => s _ s i g ) ;
23 add2 : a d d i t i o n n e u r
24 p o r t map ( a => c _ s y s , b => s _ s i g , s => s _ s y s ) ;
25 end s i m p l e ;
1.3. Exercices
EXERCICE 1
On réalise ainsi une fonction de «routage» de données : sélection d’un émetteur et d’un récepteur parmi des nombreux
éléments, en utilisant un medium unique de communication (virtuel ici).
– 17 –
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP
EXERCICE 2
La luminosité d’un éclairage (dans notre cas, une LED) peut être réglée par l’application
d’un signal rectangulaire périodique de fréquence assez élevée et de rapport cyclique non
constant. On parle alors de gradateur.
Le rapport cyclique d’un signal rectangulaire périodique est défini comme le rapport entre
le temps pendant lequel le signal est à l’état haut et la période. On exprime souvent ce
rapport en pourcentage. Ainsi :
la LED est éteinte pour une rapport cyclique de 0% ;
la luminosité est maximale pour une rapport cyclique de 100% ;
la luminosité est environ à moitié pour un rapport cyclique de 50%.
Cette application peut être simplement réalisée à l’aide d’un compteur à 8 bits (synchrone)
et d’un comparateur arithmétique à 8 bits. Les interrupteurs déterminent le rapport cyclique.
L’horloge à choisir pour le compteur est CLK1 (50 Mhz).
1. Donner la structure que devra avoir cette application.
2. Décrire en VHDL chacun des modules de cette application.
3. Réaliser le fichier source permettant de décrire ce gradateur de LED en instanciant
les composants nécessaires.
2. Simulation
Il existe 2 niveaux de simulation :
comportementale (behavorial simulation) ;
physique (post-route simulation).
Dans la version allégée de Xilinx ISE WebPack, seule la simulation comportementale est disponible.
2.1. Simulation comportementale
Pour tester un module VHDL, il faut lui associer un module générateur de signaux (non synthétisable) : le testbench.
Le testbench est un module VHDL spécial (disponible dans la liste des nouveaux modules lors de l’ajout de fi-
chier source). Il inclut le module à tester comme un composant et lui associe des signaux. L’écriture d’un testbench est
automatisée avec Xilinx ISE.
Il reste ensuite à écrire un scénario de test animant les signaux d’entrée du module en test. On utilisera alors la même
syntaxe qu’un module classique mais avec des instructions spécifiques.
ou dans un processus :
1 horloge_500 : process
2 begin
3 c l k <= ’ 0 ’ ;
4 w a i t f o r 500 u s ;
5 c l k <= ’ 1 ’ ;
6 w a i t f o r 500 u s ;
7 end p r o c e s s ;
– 18 –
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP
2.1.2 Exemple
1 entity porteab_tb is
2 end p o r t e a b _ t b ;
3
4 architecture behavior of porteab_tb i s
5
6 component p o r t e a b
7 port ( a , b : in s t d _ l o g i c ;
8 s : out s t d _ l o g i c ) ;
9 end component ;
10
11 −− i n p u t s
12 s i g n a l a , b : s t d _ l o g i c := ’ 0 ’ ;
13 −− o u t p u t s
14 signal s : std_logic ;
15
16 begin
17 −− i n s t a n c i a t i o n
18 u u t : p o r t e a b p o r t map ( a => a , b => b , s => s ) ;
19
20 −− s c e n a r i o
21 stim_proc : process
22 begin
23 wait for 50 ns ; a <= ’0 ’; b <= ’0 ’;
24 wait for 50 ns ; a <= ’1 ’; b <= ’0 ’;
25 wait for 50 ns ; a <= ’0 ’; b <= ’1 ’;
26 wait for 50 ns ; a <= ’1 ’; b <= ’1 ’;
27
28 wait ;
29 end p r o c e s s ;
30
31 end b e h a v i o r ;
2.1.3 Exercices
EXERCICE 3
EXERCICE 4
– 19 –
GEII - MC-ENSL1 TP 3
Affichage multiplexé
Objectifs
Réaliser un module d’affichage hexadécimal sur 4 afficheurs 7 segments fonctionnant en mode multiplexé.
2. Etude du système
Afin de développer ce module de gestion d’affichage multiplexé de manière la plus simple possible, nous allons
découper cette application en plusieurs blocs fonctionnels que nous allons par la suite décrire en VHDL séparément :
un décodeur décimal → 7 segments ;
un diviseur de fréquence ;
un compteur pour le balayage des afficheurs ;
un multiplexeur 4 vers 1 (4 x 4 bits d’entrée).
Pour pouvoir tester ce système, des registres de stockage d’entrée seront ajoutés.
EXERCICE 1
EXERCICE 3
EXERCICE 4
EXERCICE 5
1. Quelle est la taille du mot binaire présent à chaque entrée ? Quelle est la taille du mot
de sortie ?
2. Créer un fichier source VHDL nommé muxBCD.vhd.
3. Décrire ce système en VHDL.
– 21 –
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP
EXERCICE 6
8. Afficheur complet
En regroupant l’ensemble des éléments précédents, il est possible de réaliser un afficheur multiplexé complet.
EXERCICE 7
9. Amélioration
Pour les exercices suivants, une source d’entrée sur 16 bits (4x4) et facilement réglable est nécessaire.
EXERCICE 8
Les 4 entrées de chacun des registres seront reliées à 4 interrupteurs. Les entrées de validation de ces registres seront
reliées aux 4 boutons-poussoirs. Lors de l’appui sur l’un deux, la donnée présente sur les 4 interrupteurs sera chargée dans
le registre correspondant et affichée sur l’afficheur correspondant.
Afin de pouvoir générer le fichier de programmation correctement (Xilinx ISE version supérieure à 10.1), vous devrez
ajouter la ligne : NET "clk" CLOCK_DEDICATED_ROUTE = FALSE; dans le fichier de contraintes (*.ucf).
– 22 –