Vous êtes sur la page 1sur 22
Institut Universitaire de Technologie de CRETEIL-VITRY Département de Génie Électrique et Informatique Industrielle MC-ENSL1 - Composants

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

MC-ENSL1 - Composants programmables complexes

COURS / TP FPGA

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

Année universitaire 2012-2013 J. VILLEMEJANE - julien.villemejane@u-pec.fr

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 : Achage 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 - Achage multiplexé

20

– 3 –

 

GEII - MC-ENSL1

TP 0

Systèmes logiques programmables

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

GEII - MC-ENSL1 TP 0 Systèmes logiques programmables Objectifs Découvrir l’architecture des FPGA. Découvrir la carte

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 dicile (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.

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP 1. Les FPGA

Figure 1 – Structure d’un FPGA

Les FPGA sont un rassemblement et une combinaison de dié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 diérentes caractéristiques de cette famille de FPGA.

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP Blocks) et d’autres
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP Blocks) et d’autres

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.

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP Blocks) et d’autres

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.

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP 2.2. LUT et

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éveloppe-

ment BASYS2, proposé par la société Digilent. Ces cartes sont basées sur le FPGA Spartan 3E-250 de Xilinx.

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP 2.2. LUT et
IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP 2.2. LUT et

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 boutons-

poussoirs dénommés BTN0 à BTN3.

Les sorties pourront être visualisées sur 8 diodes électroluminescentes (LD0 à LD7) ou bien 4 acheurs 7 segments

multiplexés (DISP1).

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP 2.2. LUT et

– 7 –

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

COURS / TP

élément

broche

élément

broche

élément

broche

élément

broche

SW7

N3

LD7

G1

BTN3

A7

RED0

C14

SW6

E2

LD6

P4

BTN2

M4

RED1

D13

SW5

F3

LD5

N4

BTN1

C11

RED2

F13

SW4

G3

LD4

N5

BTN0

G12

BLU1

H13

SW3

B4

LD3

P6

MCLK

B8

BLU2

J13

SW2

K3

LD2

P7

GRN0

F14

SW1

L3

LD1

M11

HS

J14

GRN1

G13

SW0

P11

LD0

M5

VS

K13

GRN2

G14

  • 3.2. Horloges

Il y a trois horloges de caractéristiques dié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. Acheurs 7 segments multiplexés

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP élément broche élément

Le multiplexage de l’achage permet de limiter le nombre de connexions

pour ces 4 acheurs. 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 acheur, 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

acheurs ; an = commandes des anodes communes des acheurs.

élément

broche

type

an(0)

F12

commande anode gauche

an(1)

J12

commande anode

an(2)

K14

commande anode

an(3)

M13

commande anode droite

élément

broche

type

A, seg(6)

L14

sortie

B, seg(5)

H12

sortie

C, seg(4)

N14

sortie

D, seg(3)

N11

sortie

E, seg(2)

P12

sortie

F, seg(1)

L13

sortie

G, seg(0)

M12

sortie

DP

N13

sortie

  • 3.4. Description en VHDL

Pour décrire les dié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 (inter-

rupteur le plus à gauche - SW8).

– 8 –

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

COURS / TP

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP L’utilitaire Adept (Digilent)

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

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 dié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 test-

bench).

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

...

).

GEII - MC-ENSL1 TP 1 Développement d’un système numérique Objectifs Développer des systèmes numériques programmables simples

Figure 6 – Structure d’un projet

  • 2. Phases de développement

GEII - MC-ENSL1 TP 1 Développement d’un système numérique Objectifs Développer des systèmes numériques programmables simples
GEII - MC-ENSL1 TP 1 Développement d’un système numérique Objectifs Développer des systèmes numériques programmables simples

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

COURS / TP

L’écriture des dié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 dié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 dié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.

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP L’ écriture des
  • 3. Structure d’un module VHDL

La description d’un système numérique par le biais du langage VHDL passe par 3 étapes dié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 :

l i b r a r y

  • 1 IEEE ;

 
  • 2 IEEE . STD_LOGIC_1164 .ALL;

use

  • 3 IEEE . STD_LOGIC_ARITH .ALL;

use

  • 4 IEEE . STD_LOGIC_UNSIGNED .ALL;

use

   

– 11 –

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

COURS / TP

  • 3.2. Entité

L’entité permet de spécifier les dié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

buer sortie rétroactive

inout entrée-sortie bidirectionnelle (conflits possibles)

et son type (voir section suivante).

IUT Créteil - GEII - MC-ENSL1 - Composants programmables complexes COURS / TP 3.2. Entité L’entité
  • 1 is

e n ti t y

c o u rs

  • 2 por t (

  • 3 :

in STD_LOGIC ;

b

a

,

−− comment air e

out STD_LOGIC

  • 4 :

s

  • 5 ) ;

c o u rs ;

  • 6 end

  • 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 of

a r c h it e c t u r e

Be h a v o ri a l

c o u rs

is

d e c l a r a t i o n

si g n a u x

  • 2 −−

de s

  • 3 begin

  • 4 p r o c e ss u s 1

;

  • 5 p r o c e ss u s 2
    6 . .

;

.

  • 7 Be h a v o ri a l ;

end

  • 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

chines à état)

(lu, ma, me, je,

- sous-type : subtype octet is bit_vector(0 to 7);

  • 4.3. Notations

ve, sa, di); (souvent utilisé dans les ma-

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 : <=

  • 5. Instructions en VHDL

    • 5.1. Hors processus

Ces instructions décrivent le plus souvent des éléments combinatoires (concurrentes).

  • 5.1.1 Aectation conditionnelle

 
  • 1 x

<=

a

when

cond1

e ls e

  • 2 b

when

cond2

e ls e

  • 3 .

.

.

  • 4 z ;

  • 5.1.2 Aectation sélective

 
 

with

  • 1 s e l e c t

expr

  • 2 x

<=

a

when

val1 ,

  • 3 b

when

val2 ,

  • 4 .

.

.

  • 5 z

when

o the r s ;

  • 5.1.3 For

...

generate

 
 

f o r

  • 1 i

in

MIN

to MAX

g ene r a t e

 
  • 2 d e s c r i p t i o n ;

i n st r u c t i o n s

de

  • 3 g ene r a t e ;

end

   
  • 5.2. Dans un processus

L’exécution des instructions s’eectue dans un ordre séquentiel (ordre d’écriture). Le processus est activé lorsqu’un

des éléments de la liste de sensibilité est modifié.

La mise à jour des objets s’eectue simultanément à la fin du processus.

  • 5.2.1 Syntaxe

Label : process(liste des signaux de sensibilité)

Nom des objets internes : types ; – si nécessaire

begin

...

end process;

– 13 –

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

COURS / TP

  • 5.2.2 Test : SI

 
 
  • 1 i f

x=" 00 "

then

  • 2 y

<=

’ 0 ’;

  • 3 e l s i f

x=" 01 "

then

  • 4 y

<=

’ 1 ’;

  • 5 end

i f ;

  • 5.2.3 Test : CAS

 
 
  • 1 cas e

x

is

  • 2 when

" 00 "

=>

y

<=

" 00 "

;

  • 3 when

" 01 "

=>

y

<=

" 10 " ;

  • 4 =>

when

o the r s

y

<=

" 11 " ;

  • 5 end

cas e ;

  • 5.2.4 Blocs répétitifs

 
 

f o r

  • 1 i

in

0

to

5

loop

 
  • 2 i n st r u c t i o n s ;

  • 3 end

loop ;

 
 
  • 1 <

whil e

i

5

loop

  • 2 i n st r u c t i o n s ;

  • 3 end

loop ;

  • 5.2.5 Temporisation

 
 
  • 1 u n t i l

wait

CLK’ e v e n t

and

CLK= ’1 ’;

  • 2 i n st r u c t i o n s ;

  • 6. Tournures fréquentes en VHDL

    • 6.1. Détection d’un front

 

i

f

  • 1 clk

’ e v e n t

  • 2 f

i

clk ’ e v e n t

and

and

c l k

= ’1 ’

c l k = ’0 ’

then

then

.

.

.

.

.

.

;

;

−−

−−

f r o n t f

r

o

n

t

mont ant d e s c e n d a n t

  • 6.2. Remplissage d’un vecteur (bit_vector)

 
 
  • 1 (

x

<=

o the r s

=>

’ 0

’) ;

−−

t o u s

l e s

b i ts

a

0

 
  • 2 (

x

<=

o the r s

=>

’ 1

’) ;

−−

t o u s

l e s

b i ts

a

1

   

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

COURS / TP

  • 7. Prise en main de la maquette

On se propose ici de reprendre en main le logiciel Xilinx ISE Webpack. Pour cela, ils vous est demandé de réaliser

les systèmes suivants.

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

  • 1. Décrire un multiplexeur 4 vers 1 avec une entrée de validation.

  • 2. Décrire un démultiplexeur 1 vers 4.

Les entrées seront réalisées par des interrupteurs et les sorties par des LEDs.

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

Structuration et simulation

 
 

Objectifs

 

Structurer un système en bloc fonctionnel (instanciation de composants).

Simuler des systèmes numériques simples avec Xilinx ISE.

  • 1. Structuration et instanciation de composants

Afin de simplifier la description d’un système numérique, les concepteurs découpent leurs applications en sous-blocs

fonctionnels décrivant une partie de cette dernière. En VHDL, ces sous-blocs sont appelés modules ou composants.

Il est alors plus simple de décrire et de tester chacun de ces modules séparément pour pouvoir les regrouper par la suite

dans un seul système. A l’image d’un catalogue de composants et d’un circuit imprimé, il sera alors possible d’instancier

ces modules et de les relier entre eux par des signaux.

  • 1.1. Déclaration d’un composant

La déclaration préalable d’un composant s’eectue soit dans un paquetage, soit dans la zone de déclaration d’une

architecture.

 

1

component

n om_ e ntit e

 

2

g ene ri c

( param1 :

i n t e g e r

:=

3 ) ;

3

por t (

e n tr e e

:

in

b i t ;

4

s o r t i e

:

out

st d _ l o g i c ) ;

 

5

end component ;

 
  • 1.2. Structuration du système

 

Chacun des modules doit être décrit dans un fichier *.vhd séparé, portant le nom de l’entité qu’il décrit. Il y aura

donc autant de fichiers *.vhd que de types de composants.

 
 

EXERCICE 0

 

On souhaite réaliser un additionneur de 3 nombres codés sur 4 bits : a, b et c ; à l’aide

d’additionneurs à 2 entrées (4 bits).

 

1.2.1

Description du composant additionneur

 

Fichier additionneur.vhd

 
 

1

l i b r a r y

IEEE ;

   

2

use

IEEE . STD_LOGIC_1164 .ALL;

 

3

4

e n ti t y

a d d i t i o n n e u r

is

5

por t

(

a

, b

:

in STD_LOGIC_VECTOR(3 DOWNTO 0 ) ;

6

s

:

out STD_LOGIC_VECTOR(3 DOWNTO 0)

7

) ;

8

end

a d d i t i o n n e u r ;

 

9

a r c h it e c t u r e

  • 10 simpl e

of

a d d i t i o n n e u r

is

  • 11 −−

d e c l a r a t i o n

de s

si g n a u x

si

b e s o i n

  • 12 begin

  • 13 −−

p r o c e ss u s

a

e c r i r

e

  • 14 <=

s

a

+

b ;

 
  • 15 end

simpl e ;

 

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

COURS / TP

  • 1.2.2 Composants déclarés dans la zone de déclaration de l’architecture

Fichier system.vhd

1

l i b r a r y

 

IEEE ;

 

2

use

IEEE . STD_LOGIC_1164 .ALL;

 

3

4

e n ti t y

syst em

is

5

Port

 

(

6

a_sys ,

b_sys , c _ s y s

:

in STD_LOGIC_VECTOR(3 DOWNTO 0 ) ;

7

s _ s y s

:

out STD_LOGIC_VECTOR(3 DOWNTO 0)

 

8

) ;

9

end

syst em ;

 

10

11

a r c h it e c t u r e

 

simpl e

of

 

syst em

is

 

12

component

 

a d d i t i o n n e u r

 

13

por t

(

a

, b

in STD_LOGIC_VECTOR(3 DOWNTO 0 ) ;

:

 

14

s

:

out STD_LOGIC_VECTOR(3 DOWNTO 0)

 

15

) ;

16

end component ;

 

17

18

si g n a l

s _ si 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

por t map(

a

=>

a_sys

,

b

=>

b_sys

,

s

=>

s _ si g

) ;

23

add2

:

a d d i t i o n n e u r

 

24

por t map(

a

=>

c_sys

,

b

=>

s _ si g

,

s

=>

s _ s y s

) ;

25

end

simpl 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 trans- mission 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 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.

  • 2.1.1 Instructions spéciales

La gestion du temps peut se faire hors processus :

 
  • 1 c l k

<=

not

c l k

 

a ft e r

1000

us ;

  • 2 −−

h o rl o g e

a

500

Hz

ou dans un processus :

 
 
  • 1 h o rl o g e _ 5 0 0

:

pr o c e ss

   
  • 2 begin

 
  • 3 c l k

<=

’ 0 ’;

 
  • 4 wait

f o r

 

500

us ;

  • 5 c l k

<=

’ 1 ’;

  • 6 wait

f o r

 

500

us ;

  • 7 end

pr o c e ss

;

   

L’instruction wait ; provoque l’arret de la simulation.

– 18 –

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

COURS / TP

2.1.2 Exemple 1 e n ti t y p o rt e a b _ t
2.1.2
Exemple
1
e n ti t y
p o rt e a b _ t b
is
2
end
p o rt e a b _ t b
;
3
4
a r c h it e c t u r e
b e h a v i o r
of
p o rt e a b _ t b
is
5
6
component
p o rt e a b
7
por t (
a
,
b
:
in
st d _ l o g i c
;
8
s
:
out
st d _ l o g i c ) ;
9
end component ;
10
11
−−
i n p u ts
12
si g n a l
a ,
b
:
st d _ l o g i c
:=
’ 0 ’;
13
−−
o u t p u ts
14
si g n a l
s
:
st d _ l o g i c ;
15
16
begin
17
−−
i n st a n c i a t i o n
18
u ut
:
p o rt e a b
por t map(
a
=>
a ,
b
=>
b ,
s
=>
s
) ;
19
20
−−
s c e n a ri o
21
st im_ p r o c
:
pr o c e ss
22
begin
23
wait
f o r
50
ns
;
a
<=
’ 0
’;
b
<=
’ 0
’;
24
wait
f o r
50
ns
;
a
<=
’ 1
’;
b
<=
’ 0
’;
25
wait
f o r
50
ns
;
a
<=
’ 0
’;
b
<=
’ 1
’;
26
wait
f o r
50
ns
;
a
<=
’ 1
’;
b
<=
’ 1
’;
27
28
wait ;
29
end
pr o c e ss ;
30
31
end
b e h a v i o r ;
2.1.3
Exercices

EXERCICE 3

  • 1. Associer ce fichier de test à la description de l’exercice 1 du TP1 (fonction s

a + a + b).

=

  • 2. Lancer la simulation et vérifier le bon fonctionnement du système.

EXERCICE 4

  • 1. Décrire un compteur 4 bits avec une remise à zéro asynchrone.

  • 2. Réaliser le fichier de test de ce module VHDL (en pensant à remettre à zéro les sorties dès le début de la simulation).

  • 3. Lancer la simulation et vérifier le bon fonctionnement du système.

Lancer la simulation.

– 19 –

 

GEII - MC-ENSL1

TP 3

A ffi chage multiplexé

Achage multiplexé

 
 

Objectifs

 

Réaliser un module d’achage hexadécimal sur 4 acheurs 7 segments fonctionnant en mode multiplexé.

  • 1. Principe d’un achage multiplexé

Dans un système d’achage, le multiplexage est un procédé qui consiste à utiliser plusieurs voyants ou plusieurs

acheurs et à ne pas tous les allumer à la fois, en vue d’économiser de l’énergie et de limiter le nombre de fils de câblage.

Par exemple, l’achage de votre radio réveil numérique, de votre machine à laver ou de votre four micro-onde est fort

probablement multiplexé.

Les données à envoyer sur les acheurs transitent par un même bus (7 fils dans le cas d’un acheur 7 segments)

pour l’ensemble de ces acheurs. Ainsi le chire à acher est envoyé sur tous les acheurs en même temps. Sans une

gestion particulière de ces acheurs, il n’est pas possible d’écrire des nombres.

C’est pourquoi, en parallèle ce ces entrées de données, il existe une entrée de validation pour chacun des acheurs.

Ces entrées sont souvent commandés via des transistors pour permettre un gain de courant. Le schéma ci-dessous donne

le câblage d’un tel système (3 acheurs 7 segments dans ce cas-là).

GEII - MC-ENSL1 TP 3 A ffi chage multiplexé Objectifs Réaliser un module d’a ffi chage
  • 2. Etude du système

Afin de développer ce module de gestion d’achage 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 acheurs ;

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

  • 1. Faire le schéma synoptique de ce système en faisant ressortir les diérentes entrées et sorties, ainsi que les signaux intermédiaires.

  • 2. Rappeler le fonctionnement d’un registre. Combien de bascules seront nécessaires pour réaliser l’étage de stockage en entrée ?

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

COURS / TP

  • 3. Module 1 - Décodeur BCD / 7 segments

On souhaite réaliser un décodeur décimal à 7 segments utilisant un seul acheur (une des sorties an devra être mise

à ’0’).

EXERCICE 2

  • 1. Créer un fichier source VHDL nommé BCD7seg.vhd.

  • 2. Décrire ce système en utilisant uniquement des aectations conditionnelles ou sélec- tives (pas de process).

Les données à convertir sont fournies par 4 interrupteurs.

  • 4. Module 2 - Diviseur de fréquence

La fréquence de balayage des 4 acheurs sera fixée à 100 Hz. Il sera donc nécessaire de disposer d’une horloge à

400 Hz pour le balayage. Le diviseur de fréquence à concevoir sera actionné par l’horloge CLK1 de la carte (25 MHz).

EXERCICE 3

  • 1. Créer un fichier source VHDL nommé prediv.vhd.

  • 2. Décrire ce système en VHDL, pour passer d’une fréquence de 25 MHz à 400 Hz.

  • 5. Module 3 - Compteur pour le balayage

Afin de pouvoir séquentiellement sélectionner un des acheurs, nous allons à présent nous intéresser à un compteur

synchrone.

EXERCICE 4

  • 1. Combien d’états devra comporter ce compteur ? Combien de bascules seront alors nécessaires ?

  • 2. Créer un fichier source VHDL nommé cpt.vhd.

  • 3. Décrire ce système en VHDL.

  • 6. Module 4 - Multiplexeur d’entrée

On souhaite pouvoir aecter à l’entrée du décodeur BCD/7segments une des 4 données présentes en entrée, afin

qu’elles soient séquentiellement achées.

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.

  • 7. Module 5 - Décodeur 2 vers 4

On souhaite réaliser un décodeur 2 vers 4 permettant à partir du module "compteur" de sélectionner un des 4 acheurs

7 segments. Ces acheurs sont actifs à l’état bas.

– 21 –

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

COURS / TP

EXERCICE 6

  • 1. Créer un fichier source VHDL nommé dec2v4.vhd.

  • 2. Décrire ce système en utilisant uniquement des aectations conditionnelles ou sélec- tives (pas de process).

Les données à convertir sont fournies par 4 interrupteurs.

  • 8. Acheur complet

En regroupant l’ensemble des éléments précédents, il est possible de réaliser un acheur multiplexé complet.

EXERCICE 7

  • 1. Créer un fichier source VHDL nommé aff7seg.vhd.

  • 2. Instancier les composants nécessaires au bon fonctionnement du système dans ce fichier source.

  • 3. Réaliser alors un acheur multiplexé présentant un message constant (configuré dans le source, par exemple "1984").

  • 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

  • 1. Créer un fichier source VHDL nommé regBCD.vhd.

  • 2. Décrire un registre parallèle à 4 bits ayant une entrée de validation.

  • 3. Ajouter à la description contenue dans aff7seg.vhd la possibilité d’avoir 4 registres en entrée, en instanciant le composant précédemment réalisé.

  • 4. Tester alors l’acheur complet.

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 achée sur l’acheur 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 –