Vous êtes sur la page 1sur 26

Université Sultan Moulay Slimane

Ecole Supérieure de Technologie


Département Mécatronique
Licence Mécatronique Automobile

Module : Architecture et composants


de systèmes embarqués

Chapitre 4 : Langage VHDL

Sommaire

◼ Introduction
◼ La réalisation des systèmes numériques

◼ Le langage VHDL

◼ Historique et standardisation

◼ Les bases du langages


◼ L’entité

◼ L’architecture

◼ Les types de données

◼ Les paquetages et les librairies

1
Le langage VHDL : Introduction

◼ Le langage VHDL a été créé pour décrire des systèmes numérisés destinés
à une implantation dans des circuits logiques programmables (PLD, FPGA,
…)
◼ L’utilisation de ces systèmes de développement induit l’usage intensif de la
simulation

Introduction

La réalisation de système numérique

2
Les équations booléennes

◼ Tout système numérique peut se décrire par des équations


booléennes qui seront transformées physiquement par des portes
et des bascules.

◼ Exemple : Comparateur 1 bit


a b Sinf Ssup Seg
0 0 0 0 1 Sinf = a.b
0 1 1 0 0
Ssup = a.b
1 0 0 1 0
1 1 0 0 1 Seg = a  b

◼ Malgré des méthodes d’optimisation, cela devient vite irréalisable


lorsque l’on dépasse la centaine d’équations logiques.

La méthode graphique

◼ La CAO permet de réaliser des schémas de systèmes numériques


en utilisant des circuits prédéfinis dans des bibliothèques
constructeurs (glue logic).

◼ La densité des circuits numériques de nos jours rend l’utilisation


de cette méthode longue et complexe.

3
Les langages de description hardware

◼ Les langages de description hardware permettent de faire une


description fonctionnelle du système numérique.
◼ Un outil de synthèse traduira cette description en équations
logiques pour l’implémenter dans un circuit programmable.

◼ Exemple : Comparateur 1 bit


Sinf = a.b
Si a < b alors Sinf = ‘1’ Ssup = a.b
Sinon si a > b alors Ssup = ‘1’
Sinon Seg = ‘1’ Seg = a  b

◼ Les langages de description les plus utilisés sont les langages


ABEL, Verilog et VHDL.

Les niveaux de description

Description structurelle
Description fonctionnelle
Processeur Algorithme

Registre HDL

Porte Q booléennes

Transistor Q différentielles

polygones

Branche

Cellule

Puce

Description géométrique 8

4
Introduction

Le langage VHDL

La place du langage VHDL

Description structurelle
Description fonctionnelle
Processeur Algorithme

Registre VHDL HDL

Porte Q booléennes

Transistor Q différentielles

polygones

Branche

Cellule

Puce

Description géométrique 10

5
Quelques avantages

◼ Langage complet : Couvre les différentes étapes de la conception


de systèmes numériques : Spécifications, modélisation, simulation,
synthèse.
◼ Langage indépendant : aucune dépendance par rapport aux
fabricants de PLD et par rapport au système hôte.
◼ Langage moderne : syntaxe lisible, conception modulaire, …

◼ Langage standard : gage de compatibilité, de portabilité, de


stabilité et de pérennité.
◼ Langage ouvert : Évolutions contrôlées par l’IEEE. Fonctions et
procédures permettent d’étendre ses fonctionnalités

11

Historique et standardisation

◼ ~1970 : Dpt de la défence américaine crée le programme VHSIC


(Very High Scale Integrated Circuit)
◼ Le langage VHDL est devenu un standard IEEE depuis 1987 puis
révisé en 1993.
1076.1 VHDL Analog Extention
1076
1076.2 VHDL Math Utilitaire
VHDL
1076.3 VHDL Synthèse (1996)
1076.4 VITAL librairie ASIC
1076.5 IEEE librairie

1029 1164 IEEE Standard 1164 Extention : logique


WAVES STD LOGIC à valeurs multiples pour décrire les
systèmes réels (1993)
VHDL WAform and Vector Exchange
Specification
12

6
Cycle de développement

13

Cycle de développement

◼ L’étape de vérification permet de validation de la syntaxe du


programme. La "netlist" est un fichier contenant la description de
l’application sous forme d’équations logiques.
◼ Lors de l’étape de la simulation fonctionnelle, on valide
l’application, indépendamment de l’architecture et des temps de
propagation du future circuit cible.
◼ L’étape de routage génère les informations permettant d’intégrer
l’application dans le circuit choisi. Une "rétro annotation" est
effectuée dans la "netlist" : les temps de propagation du
composant cible y sont pris en compte
◼ Lors de la simulation temporelle, on peut évaluer les performances
de l’appilication générée.

14

7
Le langage VHDL

Les bases du langage

15

Structure d’une description VHDL


library ieee;
Déclaration des librairies
use ieee.std_logic_1164.all;
use work.std_logic_arith.all; et des packages utilisés
entity CPT6 is port
(CLK : in std_logic; Déclaration de
SIX : out std_logic;
BCD : out integer range 0 l’interface du circuit
to 5);
end;
architecture arch_CPT6 of CPT6 is
signal Q: integer range 0 to 5;
Begin
Process (CLK)
Begin Description structurelle
If(CLK='1' and CLK'event) then et/ou fonctionnelle du
if Q = 5 then Q <= 0 ;
else Q<= Q + 1;
circuit
end if;
end if;
end process;
BCD <= Q;
SIX <= '0' when Q = 5 else '1';
end; 16

8
Les bases du langage

L’entité

17

Définition

◼ L’entité fournit les spécifications de l’interface au système et


comprend généralement 2 éléments :
◼ Les connexions du système càd ses E/S.

◼ Les paramètres du système (largeur de bus, fmax,…)


(optionnel)
Entity REG8BIT is
Generic paramètres
(LONG = 8;
I0 I1 I2 I3 I4 I5 I6 I7
Fmax = 50MHz);
clk Registre 8bits
Fmax = 50MHz Port connexions
O0 O1 O2 O3 O4 O5 O6 O7 (clk : in bit;
I : in bit_vector[LONG-1 downto 0];
O : out bit_vector[LONG-1 downto 0]);

End REG8BIT;
18

9
Les spécifications des ports

◼ Chaque signal physique d’E/S du système déclaré à l’intérieur de


l’instruction port (…); doit avoir :
◼ Un nom unique,

◼ Un mode,

◼ Un type.

◼ La syntaxe est la suivante :


◼ Nom_port : mode type_port

◼ Exemples :
◼ DATA : in bit_vector (3 downto 0);

◼ RESET : in std_logic;

◼ CARRY : inout std_logic;

◼ Q : out std_logic_vector (7 downto 0);

19

Les différents modes

◼ Les 4 principaux modes sont :


In : signal en entrée

Out : signal en sortie


Inout : signal bidirectionnel


Buffer : signal en sortie avec un rebouclage interne


in out
inout buffer

20

10
Les différents types logiques

◼ Les principaux types logiques utilisés sont :


◼ Bit : signal binaire de valeur 0 ou 1,

◼ Std_logic : signal logique qui peut prendre les valeurs :

◼ 0,1 : valeurs basse et haute

◼ L,H : valeurs basse et haute forçage faible,

◼ X : inconnue,

◼ U : non initialisée,

◼ - : quelconque,

◼ Z : haute impédance

◼ Rq : Pour utiliser le type std_logic, il faut avoir préalablement


déclaré la bibliothèque IEEE et son paquetage std_logic_1164.

21

Déclaration d’un bus

◼ Pour simplifier la déclaration des E/S, il est possible de déclarer


des bus de données sous la forme :
Bit_vector (n downto m) : (n > m) Dans ce cas n est le MSB et

m le LSB.
◼Bit_vector (m to n) : (m < n) Dans ce cas m est le MSB et n le
LSB
◼ Exemple : ◼ Exemple :
BUS1 : in bit_vector (3 downto 0) BUS1 : in bit_vector (0 to 3)
3210 0123

MSB LSB MSB LSB


1011 1101
Ici Bus1 = 11 Ici Bus1 = 13 22

11
Exemples

◼ Trouver la syntaxe des deux entités suivantes :

◼ Entity BUFFER is port ( ◼ Entity CTR12 is port (


G,En : in std_logic; clk,Reset : in std_logic;
In1 : inout std_logic_vector (7 CT : out std_logic_vector (11
downto 0); downto 0));
In2 : inout std_logic_vector (7
downto 0)); End CTR12;
End BUFFER;
23

Les paramètres génériques

◼ Les paramètres génériques sont utilisés pour faire passer des


valeurs constantes relatives aux systèmes.

◼ Ils sont principalement utilisés pour dimensionner:


◼ un bus,

◼ une boucle itérative,

◼ Une constante de temps.

24

12
Taille d’un bus

Entity BUFFER8 is Entity BUFFER16 is


Generic ( Generic (
long : integer := 8); long : integer := 16);
Port ( Port (
G,En : in std_logic; G,En : in std_logic;
In1,IN2 : inout std_logic_vector (long-1 In1,IN2 : inout std_logic_vector (long-1
downto 0); downto 0);
End BUFFER8; End BUFFER16;

BUFFER8 BUFFER16
G G
En En
8 8 16 16
In1 In2 In1 In2

25

Une boucle itérative

Entity CPT is
Generic (
compteur : integer := 4);

End CPT;

For k in 1 to compteur loop

End loop;

26

13
Paramètre temporel

Entity TEST is Y
Generic (
retard : time := 4); t
… X t
0
End TEST;

X <= Y after retard; t
t0 - 4

Rq : Les paramètres temporels ne sont pas utilisés pour la synthèse


numérique mais pour générer des vecteurs de test (Testbench).

27

Les bases du langage

L’architecture

28

14
Définition

◼ L’architecture permet de décrire le fonctionnement interne du


système délimité par l’entité.

◼ Il existe 3 types de description :

◼Par flot de données ou fonctionnelle : On exprime les


fonctions des sorties par des éq booléennes

◼Comportementale ou procédurale : L’architecture est décrite


avec des instructions séquentielles traduisant un algorithme.

◼Structurelle :L’architecture est le résultat de l’association de


structures elles-mêmes décrites sous la forme comportementale
ou fonctionnelle.

29

Exemple d’un multiplexeur 4 vers 1

E(0) MUX41
E(1) S
E(2)
E(3)
Entity MUX41 is port (
SEL(0) E : in std_logic_vector (3 downto 0);
SEL(1)
SEL : in std_logic_ vector (1 downto 0);
S : out std_logic);
SEL(1) SEL(0) S End MUX41;

0 0 E(0)
0 1 E(1)
1 0 E(2)
1 1 E(3)

30

15
Description de type flot de données

◼ L’eq booléenne de la sortie S se déduit de la table de vérité.

Architecture flot_MUX41 of MUX41 is


Begin
S <= ((not SEL(0) and not SEL(1)) and E(0)) or
((SEL(0) and not SEL(1)) and E(1)) or
((not SEL(0) and SEL(1)) and E(2)) or
(SEL(0) and SEL(1) and E(3)) ;
End flot_MUX41;

<= est la fonction d’affectation

31

Les opérateurs logiques

◼ Ils sont au nombre de 7 : and, nand, or, nor, xor, xnor et not.
◼ Les opérandes sont :
◼ Booléens,

◼ Bit ou bit_vector,

◼ Std_logic ou std_logic_vector

◼ Ils ont tous la même priorité ; l’utilisation de parenthèses est


nécessaire dès qu’il y a incertitude d’interprétation.

A
B
C S S <= (A and B) or (C and D);
D

32

16
La fonction d’affectation <=

◼ Lorsqu’il y a plusieurs instructions d’affectations, elles sont


exécutées en parallèle. On parle alors d’instructions concurrentes.
◼ La forme sélective de la fonction d’affectation utilise l’instruction
With ….select.

◼ Architecture Selec_MUX41 of MUX41 is


Begin
With SEL select
S <= E(0) when « 00 »,
E(1) when « 01 »,
E(2) when « 10 »,
E(3) when others;
End Selec_MUX41;

33

La fonction d’affectation <=

◼ La forme conditionnelle de la fonction d’affectation utilise les


instructions when … else.

◼ Architecture Cdt_MUX41 of MUX41 is


Begin
S < = E(0) when (SEL = « 00 ») else
E(1) when (SEL = « 01 ») else
E(2) when (SEL = « 10 ») else
E(3);
End Cdt_MUX41;

34

17
Les opérateurs relationnels

◼ Ils permettent de comparer deux opérandes de même type. Le


résultat est un booléen.

◼ Ils sont au nombre de 6 : =, /=, <, <=, >, >=

◼ Ils peuvent être combinés aux opérateurs logiques sans violation


de typage :
X <= ‘1’ when (A>10 and A <15) else ‘0’;

35

Description de type comportemental

◼ L’algorithme de fonctionnement du multiplexeur est décrite à


l’aide de l’instruction séquentielle If…then…elsif…else…endif;

◼ Architecture Compor1_MUX41 of MUX41 is


Begin
Process (SEL)
Begin
If (SEL(0) = ‘0’ and SEL(1) = ‘0’ then S <= E(0);
elsif (SEL(0) = ‘1’ and SEL(1) = ‘0’ then S <= E(1);
elsif (SEL(0) = ‘0’ and SEL(1) = ‘1’ then S <= E(2);
Else S <= E(3);
Endif;
End process;
End Compor1_MUX41;

36

18
L’instruction CASE

◼ L’instruction CASE est particulièrement adaptée à la transcription


d’une table de vérité.

◼ Architecture Compor2_MUX41 of MUX41 is


Begin
Process (SEL)
Begin
Case SEL is
when « 00 » => S <= E(0);
when « 01 » => S <= E(1);
when « 10 » => S <= E(2);
when « 11 » => S <= E(3);
End case;
End process;
End Compor2_MUX41;
37

L’instruction Process

◼ Un process est une partie de la description d’un circuit dans


laquelle les instructions sont exécutées séquentiellement.

◼ L’exécution d’un process a lieu à chaque changement d’état d’un


signal de la liste de sensibilité.

◼ Le changement d’état des signaux par les instructions du process


sont pris en compte à la fin du process.

38

19
Exemples de process

◼ La bascule D Exécution du Library ieee;


process si H change Entity BasculeD is port (
H Q d ’état D,H: in std_logic;
D Q : out std_logic);
end BasculeD;

Les instructions Architecture ArchD of BasculeD is


s ’exécutent begin
H D Q process (H)
séquentiellement
 0 0 begin
if (H’event and H=‘ 1 ’) then Q <=D;
 1 1 end if;
end process;
0/1 X Qn end ArchBasculeD;
Les signaux
ne changent
d ’état qu ’à la fin
du process
39

Description de type structurel

◼ On décompose de manière hiérarchisée l’architecture du


composant en une interconnexion de composants internes.

Architecture STRUCT of FONC is


Component F1
Port (A,B : in bit; O1 : out bit);
End component;
E0 A S1 Component F2
O1
E1 B Port (C,D : in bit; O2 : out bit);
C End component;
O2 S
E2 D
Signal S1 : bit ;

Begin
Etiq1 : F1 port map (E0,E1,S1);
Etiq2 : F2 port map (S1,E2,S);
End STRUCT;
40

20
Les bases du langage

Les types de données

41

Les trois familles d’objet

◼ Les objets sont les éléments de base du langage VHDL. Ils sont au
nombre de 3 :

◼ Les signaux : Ils permettent de modéliser les informations


transitant sur des fils ou de manière générale transitant entre
deux composants (l’instruction d’affectation est <=).
◼ Les constantes : Elles permettent d’affecter une valeur fixe à
un objet (l’instruction d’affectation est :=).

◼ Les variables : Elles sont utilisées comme objet intermédiaire


d’indexation par exemple et se situent dans les process
(l’instruction d’affectation est :=).

◼ A chaque objet on associe un type.

42

21
Les types scalaires

◼ Un type scalaire fait référence à un objet qui ne peut prendre


qu’une et une seule valeur à tout instant.

◼ Il existe 5 types scalaires prédéfinis :


◼ Boolean : true ou false

◼ Character : tous les caractères définis par la norme ISO8859-1

◼ Integer : Pour WARP de –2 -1 à +2 -1


31 31

◼ Real : réel compris entre –1E38 à +1E38

◼ Bit : ‘0’ ou ‘1’

43

Les types scalaires énumérés

◼ Un type scalaire est dit énuméré si toutes les valeurs qu’il peut
prendre sont listées dans sa déclaration.

◼ L’utilisateur peut ainsi définir des types qui correspondent à ses


besoins.

Exemple : type couleur is (ROUGE, ORANGE, VERT);


Ainsi ROUGE sera codé « 00 », ORANGE « 01 » et VERT « 10 »

44

22
Les types scalaires non énumérés

◼ Les types integer et real font partis des types non énumérés.
◼ Néanmoins l’utilisateur peut les borner par l’instruction range qui
définit une limite basse et haute de manière à ne pas bloquer de
la ressource inutilement.

Exemple : type integer is range –255 to 255

◼ On peut aussi créer un ou plusieurs type utilisateur pour limiter


l’intervalle de variation.

Exemple : INDEX is range 0 to 100


L’instruction range a pour effet de tester un éventuel dépassement
de valeur lors de l’analyse et de la simulation et de coder INDEX
sur 7 bits lors de la synthèse.

45

Le type composite ARRAY(tableau)

◼ On peut définir un tableau sur une seule rangée.

Exemple : type ANNEE is array (0 to 3) of integer range 0 to 9;

0 1 2 3
0à9 0à9 0à9 0à9
ANNEE
Variable ANNEE_EN_COURS : ANNEE;
On accède à un
ANNEE_EN_COURS := (2,0,0,7); élément de l’article
par son indice
ANNEE_EN_COURS(3):=7;

Remarque : le type bit_vector est un exemple de tableau à une


rangée. Mais il est tellement commun qu’il a déjà été définit dans le
paquetage STANDARD.

46

23
Les tableaux à plusieurs rangées

◼ Il existe plusieurs possibilités pour créer des tableaux à plusieurs rangées.


◼ La 1ère méthode consiste à empiler plusieurs objets de type ARRAY

Exemple : Type ANNEE is array (0 to 3) of integer range 0 to 9;


Type DATE is array (2 downto 0) of ANNEE ;
constant ANNIVERSAIRE : DATE :=
((1,9,6,8),(1,9,7,1),(1,9,9,4));

0 1 2 3
0 1 9 6 8

DATE 1 1 9 7 1

2 1 9 9 4

47

Les tableaux à plusieurs rangées

◼ La 2° méthode consiste à former un tableau d’objets de type


scalaire pour obtenir un tableau à 2 dimensions.

Exemple : Une table de vérité peut alors facilement se définir.

E2 E1 E0 S1 S0 Type TABLE1 is array (0 to 7, 1downto 0) of bit;


Constant CODE1 : TABLE1 := (
0 0 0 0 0
(‘0’,’0’),
0 0 1 0 1 (‘0’,’1’),
0 1 0 1 1 (‘1’,’1’),

0 1 1 1 0
(‘1’,’0’));
1 0 0 0 0
1 0 1 0 1 Type TABLE2 is array (0 to 7) of bit_vector(1
downto 0);
1 1 0 1 1 Constant CODE2 : TABLE2 := (
1 1 1 1 0 (« 00 »),(« 01 »),(« 11 »),…,(« 10 »));
48

24
Les bases du langage

Les paquetages et les librairies

49

Le paquetage

◼ Le paquetage est une collection de déclarations et de sous-


programmes utilisés fréquemment et partageables par plusieurs
utilisateurs. Il est constitué de deux parties :

◼ La spécification de paquetage (package) : C’est la liste des


déclarations : type utilisateur, signaux, constantes,
composants, sous-programmes.

◼ Le corps de paquetage (package body) qui est la vue interne


du paquetage et peut comprendre les descriptions des sous-
programmes s’il y en a.

50

25
Les paquetages prédéfinis

◼ Les constructeurs proposent souvent des paquetages qui


permettent de simplifier et synthétiser plus facilement les
structures les plus courantes sous VHDL.

◼ Par exemple avec WARP sont fournis les 2 paquetages suivants :


◼ Std_logic_1164 qui définit les spécifications liées à la norme
IEEE 1164 pour le type std_logic,
◼ Std_arith qui définit les opérations arithmétiques pour les
vecteurs std_logic mais des opérations entre std_logic et
integer.
◼ Pour utiliser ses paquetages,il faut faire appel à l’instruction USE
telle que:
Library ieee;
Use ieee.std_logic_1164.all;
Use work.std_arith.all;
51

26

Vous aimerez peut-être aussi