TP Fpga [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Institut Universitaire de Technologie de CRETEIL-VITRY Département de Génie Électrique et Informatique Industrielle

MC-ENSL1 - Composants programmables complexes

COURS / TP FPGA

Année universitaire 2012-2013 J. VILLEMEJANE - [email protected]

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes

COURS / TP

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

Répartition des séances       

Séance 1 (cours/TP) : Introduction (TP0 et TP1) Séance 2 (cours/TP) : Structuration-Simulation (TP2) Séance 3 (TP) : Structuration-Simulation (TP2) Séances 4 et 5 : Affichage multiplexé (TP3) Séance 6 : TP Test 1 Séances 7 à 9 : Projet Séance 10 : TP Test 2

Table des matières TP0 - Systèmes logiques programmables

4

TP1 - Développement d’un système numérique

10

TP2 - Structuration et simulation

16

TP3 - Affichage multiplexé

20

–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

Il existe trois grandes catégories de systèmes logiques programmables :  les CPLD (Complex Programmable Logic Device)  les FPGA (Field Programmable Gate Array)  les ASIC (Application Specific Integrated Circuit) Les CPLD sont de conception plus anciennes et ont généralement des capacités moindres que les FPGA. Cependant, ils sont encore largement utilisés dans des systèmes logiques (combinatoire ou séquentiels). Dans les deux cas, ce sont des réseaux logiques programmables composés de nombreuses cellules logiques élémentaires librement assemblables. Nous allons ici étudier plus en détails les FPGA, les CPLD ayant déjà été abordés en première année (module ENSL1).

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes

COURS / TP

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

2. Structure d’un FPGA - Xilinx L’architecture, retenue par Xilinx, se présente sous forme de deux couches : une couche circuit configurable et un réseau de mémoire SRAM. La structure d’un FPGA est donnée dans la figure suivante. L’échelle est loin d’être réelle, les fonctions logiques n’occupant qu’environ 5% du circuit.

Figure 1 – Structure d’un FPGA

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

Blocks) et d’autres blocs plus spécifiques.

2.1. Spartan XL 3E Les Spartan 3E, que nous allons utiliser par la suite, sont basés sur ce type de structure. La figure suivante détaille leur architecture. Le tableau rassemble les différentes caractéristiques de cette famille de FPGA.

Figure 2 – Structure et caractéristiques des Spartan 3 - Xilinx

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.

Figure 3 – Bloc logique configurable - Xilinx Spartan 3

–6–

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes

COURS / TP

2.2. LUT et bascule Les fonctions combinatoires sont implantées sur des mémoires SRAM (LUT = Look-Up Table). La table de vérité est alors chargée dans ces LUT. La figure 4 montre le cas de LUT à 2 entrées. En général, les FPGA sont équipés de LUT à 4 ou 6 entrées.

Figure 4 – LUT - Xilinx Spartan 3

Les éléments séquentiels (synchrones sur front ou niveau) sont implantés sur des bascules (D le plus fréquemment).

3. Carte d’étude BASYS2 - Digilent L’ensemble des exemples et applications qui seront demandés dans ces TP seront réalisés sur une carte de développement BASYS2, proposé par la société Digilent. Ces cartes sont basées sur le FPGA Spartan 3E-250 de Xilinx.

Figure 5 – Carte BASYS2 - Digilent

3.1. Entrées-sorties logiques Les entrées logiques sont essentiellement réalisées par 8 interrupteurs dénommés SW0 à SW7 et par 4 boutonspoussoirs dénommés BTN0 à BTN3. Les sorties pourront être visualisées sur 8 diodes électroluminescentes (LD0 à LD7) ou bien 4 afficheurs 7 segments multiplexés (DISP1).

–7–

COURS / TP

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes

élément SW7 SW6 SW5 SW4 SW3 SW2 SW1 SW0

broche N3 E2 F3 G3 B4 K3 L3 P11

élément LD7 LD6 LD5 LD4 LD3 LD2 LD1 LD0

broche G1 P4 N4 N5 P6 P7 M11 M5

élément BTN3 BTN2 BTN1 BTN0 MCLK

broche A7 M4 C11 G12 B8

HS VS

J14 K13

élément RED0 RED1 RED2 BLU1 BLU2 GRN0 GRN1 GRN2

broche C14 D13 F13 H13 J13 F14 G13 G14

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.

élément

broche

type

an(0) an(1) an(2) an(3)

F12 J12 K14 M13

commande anode gauche commande anode commande anode commande anode droite

élément

broche

type

A, seg(6) B, seg(5) C, seg(4) D, seg(3) E, seg(2) F, seg(1) G, seg(0) DP

L14 H12 N14 N11 P12 L13 M12 N13

sortie sortie sortie sortie sortie sortie sortie sortie

3.4. Description en VHDL Pour décrire les différents systèmes numériques, nous utiliserons le logiciel de chez Xilinx : ISE Webpack (version 10.5). Cette version est disponible gratuitement, moyennant une inscription, sur le site de xilinx (www.xilinx.com). Ce logiciel permet de décrire des systèmes en VHDL ou Verilog, de les tester (de manière fonctionnelle ou temporelle) et de créer un fichier binaire compatible avec la cible (ici un FPGA Spartan 3E). Les étapes de développement seront décrites par la suite.

3.5. Contraintes Il ne faut pas oublier d’assigner les entrées/sorties de votre système aux broches réelles du système. Le système final étant déjà câblé, ces contraintes sont déjà prédéfinies (voir tableaux précédent - 7 segments - et suivant).

3.6. Implémentation du programme Une fois que toutes les étapes de «compilation» sont réussies, un fichier binaire *.bit est généré et peut alors être implanté dans le FPGA. Pour cela, il est nécessaire de relier la carte sur un des ports USB de l’ordinateur et d’allumer la carte d’étude (interrupteur le plus à gauche - SW8). –8–

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes

L’utilitaire Adept (Digilent) sera alors utiliser pour transférer le fichier binaire vers le FPGA.

–9–

COURS / TP

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. Il existe 2 langages de description pour les FPGA :  VHDL : Very High Speed integrated circuit Hardware Description Language ;  Verilog. Nous nous intéresserons par la suite au VHDL, qui est un langage de description normalisé (IEEE) et quasi-universel pour décrire des circuits intégrés.

1. Structure d’un projet Un projet VHDL est très souvent décomposé en sous-structures, appelées modules ou composants. Comme on pourrait le faire sur un circuit imprimé, il s’agit d’instancier différents composants et de les relier entre eux par des fils (signaux en VHDL) pour réaliser le système complet. Chacun de ces modules est alors décrit dans un fichier source indépendant. Chacun de ces fichiers sources peut alors être testé indépendamment en lui associant un fichier de simulation (ou testbench). Enfin des fichiers de contraintes permettent de faire le lien entre la description logicielle et la structure matérielle de la cible et de son environnement (position des entrées, des sorties...). Figure 6 – Structure d’un projet

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.

3. Structure d’un module VHDL La description d’un système numérique par le biais du langage VHDL passe par 3 étapes différentes :  la déclaration des ressources externes (bibliothèques) ;  la description de l’entité du système, correspondant à la liste des entrées/sorties ;  la description de l’architecture du système, correspondant à la définition des fonctionnalités du système. L’ensemble est contenu dans un fichier source portant l’extension *.vhd.

3.1. Déclaration des ressources externes Cette phase est réalisée automatiquement pour les bibliothèques courantes. On retrouve en en-tête du fichier source *.vhd les instructions suivantes : 1 2 3 4

l i b r a r y IEEE ; u s e IEEE . STD_LOGIC_1164 . ALL; u s e IEEE . STD_LOGIC_ARITH . ALL; u s e IEEE . STD_LOGIC_UNSIGNED . ALL;

– 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 2 3 4 5 6

entity cours is port ( a, b : i n STD_LOGIC ; s : o u t STD_LOGIC ); end c o u r s ;

−− c o m m e n t a i r e

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 ;

4. Objets et types en VHDL 4.1. Objets  signal objet physique, associé à des évènements  variable intermédiaire de calcul, non physique  constant

4.2. Types Types de base : bit, bit_vector, integer, boolean Types IEEE : std_logic, std_logic_vector, signed, unsigned Types définis par l’utilisateur : - type énuméré, exemple : type jour is (lu, ma, me, je, ve, sa, di); (souvent utilisé dans les machines à état) - sous-type : subtype octet is bit_vector(0 to 7);

4.3. Notations bit : ’0’ ou ’1’ ; bit_vector : "0100" ; ASCII : "Texte" ; Décimal : 423 ; Hexadécimal : x"1A"

4.4. Opérateurs en VHDL – 12 –

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes

COURS / TP

LOGIQUES : and, nand, or, nor, xor, xnor, not DÉCALAGE : sll, slr, sla, sra, rol, ror RELATIONNELS : =, /=, , = ARITHMÉTIQUES : +, -, *, /, MOD CONCATENATION : & AFFECTATION : s _ s y s ) ; end s i m p l e ;

1.3. Exercices EXERCICE 1

1. Réalisez et testez un multiplexeur de 4 lignes (4 interrupteurs) vers 1 ligne, que vous décrirez dans un fichier mux.vhd. 2. Réalisez et testez un démultiplexeur 1 ligne vers 4 lignes, que vous décrirez dans une fichier demux.vhd. 3. Assemblez ces deux fichiers dans system.vhd afin de simuler une ligne de transmission série ayant 4 interlocuteurs possibles de chaque coté. La sélection des voies du multiplexeur (AS) et la sélection de la destination en sortie du démultiplexeur (AD) se feront par 2 x 2 interrupteurs. Les données seront réalisées par 4 interrupteurs et la visualisation des sorties par 4 LEDs.

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 fichier 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. 2.1.1

Instructions spéciales

La gestion du temps peut se faire hors processus : 1 2

c l k s ) ; −− s c e n a r i o stim_proc : begin wait for wait for wait for wait for

process 50 50 50 50

ns ; ns ; ns ; ns ;

a a a a