Vous êtes sur la page 1sur 27

2.

Présentation des éléments du VHDL


2.1. Qu’est ce que le VHDL?
 L’abréviation VHDL signifie VHSIC Hardware Description Language Conception & Modélisation des CI
(VHSIC : Very High Speed Integrated Circuit). Ce langage a été écrit
dans les années 70 pour réaliser la simulation de circuits électroniques. numériques par le langage VHDL
 On l’a ensuite étendu en lui rajoutant des extensions pour permettre la
conception (synthèse) de circuits logiques programmables (P.L.D.
VHDL
Programmable Logic Device). Very High Speed Integrated Circuit
 Auparavant pour décrire le fonctionnement d’un circuit électronique Hardware Description Language
programmable les techniciens et les ingénieurs utilisaient des langages
de bas niveau ou plus simplement un outil de saisie de schémas. (PLD)
Langage de description de systèmes matériels
 Actuellement la densité de fonctions logiques (portes et bascules)
intégrée dans les PLDs est telle (plusieurs milliers de portes voire
millions de portes) qu’il n’est plus possible d’utiliser les outils d’hier pour
développer les circuits d’aujourd’hui.

ENSAF
3
Présenté par: Pr. El Mehdi MELLOULI
E M . Mellouli

2. Présentation des éléments du VHDL


2.1. Qu’est ce que le VHDL? PLAN
 Les sociétés de développement et les ingénieurs ont voulu s’affranchir I. Introduction: les concepts de modélisation
des contraintes technologiques des circuits. Ils ont donc créé des
langages dits de haut niveau à savoir VHDL et VERILOG. et le flot de conception des CI.
 Ils permettent au code écrit d’être portable, c’est à dire qu’une II. Présentation des éléments du langage
description écrite pour un circuit peut être facilement utilisée pour un
autre circuit. VHDL.
 En effet les instructions écrites dans ces langages se traduisent par une
configuration logique de portes et de bascules qui est intégrée à
III. VHDL & Synthèse
l’intérieur des circuits. C’est pour cela qu’on préfère parler de description
VHDL ou VERILOG que de langage. IV. Implémentation FPGA

E M . Mellouli 4 01/11/2021 13:47 E M . Mellouli 2


1. Introduction 2. Présentation des éléments du VHDL
1.1. Les systèmes numériques 2.2. Pourquoi un langage de description?
 Utilisation dans différents secteurs industriels  Le schéma structurel que l'on utilise depuis si longtemps et si souvent
 Télécoms n'est en fait qu'un outil de description graphique.
 Aéronautique  Aujourd'hui, l'électronique numérique est de plus en plus présente et
 Automobile tend bien souvent à remplacer les structures analogiques utilisées
 Construction électrique jusqu'à présent.
 Transport ferroviaire
 Il est en effet plus aisé de décrire un compteur ou un additionneur 64
 Cartes à puce bits en utilisant l'outil de description VHDL plutôt qu'un schéma.
 Les CI numériques remplacent plusieurs circuits analogiques
 Audio recording: from tape to music CD to MP3 player

 Image processing : from silver-halide film to digital camera

 Avantages des systèmes numériques


 Reproduction de l’information
 Flexibilité et fonctionnalité : stockage facile, transmission et
manipulation de l’information.

01/11/2021 13:47 E M . Mellouli 8 E M . Mellouli 5

1. Introduction 1. Introduction
1.2. Motivations
 VHDL est un langage de description de matériel destiné à
 Réduire le temps de prototypage --> time-to-market représenter le comportement ainsi que l'architecture d’un
système électronique numérique. Son nom complet
est VHSIC Hardware Description Language.
 Réduire le coût de production
 En analysant l’évolution de la production industrielle d’ASICS
 Faible consommation de puissance (Application Specific Integrated Circuit = circuit à la demande ou
circuit spécifique) ou de FPGA ( Field Programmable Gate Array),
on constate que ceux-ci, bénéficiant des progrès technologiques,
 Taille réduite du système sont de plus en plus complexes.

 Fiabilité

01/11/2021 13:47 E M . Mellouli 9 01/11/2021 13:47 E M . Mellouli 6


2. Présentation des éléments du VHDL
2.4. Structure d’une description VHDL

ChapitreII: Présentation des


éléments du langage VHDL

Vhsic Hardware Description Language


Vhsic : Very High Speed Integrated Circuit
Langage de description de systèmes matériels

E M . Mellouli 12

2.4. Structure d’une description VHDL 2. Présentation des éléments du VHDL


2.4.1. Déclaration des bibliothèques 2.4. Structure d’une description VHDL
 Toute description VHDL utilisée pour la synthèse a besoin de  En VHDL, une structure logique est décrite à l'aide d'une entité et
bibliothèques. L’IEEE (Institut of Electrical and Electronics d'une architecture de la façon suivante :
Engineers) les a normalisées et plus particulièrement la bibliothèque
IEEE1164. Elles contiennent les définitions des types de signaux
électroniques, des fonctions et sous programmes permettant de
réaliser des opérations arithmétiques et logiques,...

 La directive Use permet de sélectionner les bibliothèques à utiliser.

E M . Mellouli 13 E M . Mellouli 11
2.4. Structure d’une description VHDL 2.4. Structure d’une description VHDL
2.4.2 Déclaration de l’entité (entity) et des entrées/sorties 2.4.2 Déclaration de l’entité (entity) et des entrées/sorties

In 1 Out 1
. Mode : 4 modes de ports . In
In 2 Bloc A
CS . Out Out 2
In 3
. Inout
. Buffer Vue externe : Définition de l'entité
Bloc A

R/W In 1
Bloc B Bloc C Out 1
In 2
Adresse Mémoire Busy

Données Erreur
In 3 Bloc D Bloc E Out 2

Vue interne : Définition de l'architecture

E M . Mellouli 16 E M . Mellouli 14

2.4. Structure d’une description VHDL 2.4. Structure d’une description VHDL
2.4.2 Déclaration de l’entité (entity) et des entrées/sorties 2.4.2 Déclaration de l’entité (entity) et des entrées/sorties
. Port :
. Déclaration :
. Signal d ’interface entre l’entité et l’extérieur
. Chaque port est associé à un nom, un mode et un type
. Ordre de la déclaration des différents signaux : aucune importance
ENTITY nom_entite IS . Ordre conservé lors d’une utilisation à un plus haut niveau de cette entité
PORT ( entrees : IN type_entrees;
sorties : OUT type_sorties; . Mode :
entreessorties : INOUT type_entreessorties;
. Définition du sens du signal
. 4 modes sont définis
entreessorties_buffer : BUFFER type_entreessorties_buffer); - in : Signal d’entrée monodirectionnel
END nom_entite; - out : Signal de sortie monodirectionnel
- inout : Signal d’entrée/sortie bidirectionnel
- buffer : Signal de sortie/entrée monodirectionnel
. Utile lorsqu’il y a rebouclage (sortie considérée comme une entrée)
. Peu utilisé (remplacé par une sortie associée à un signal interne)

E M . Mellouli 17 E M . Mellouli 15
2.4. Structure d’une description VHDL 2.4. Structure d’une description VHDL
2.4.2 Déclaration de l’entité (entity) et des entrées/sorties 2.4.2 Déclaration de l’entité (entity) et des entrées/sorties
c) Le TYPE

Le TYPE utilisé pour les signaux d’entrées / sorties est :


- le std_logic pour un signal.
- le std_logic_vector pour un bus composé de plusieurs signaux.

Par exemple un bus bidirectionnel de 5 bits s’écrira :


a) Le NOM_DU_SIGNAL.
LATCH : inout std_logic_vector (4 downto 0) ; Il est composé de caractères, le premier caractère doit être une lettre, sa
longueur est quelconque, mais elle ne doit pas dépasser une ligne de code.
Où LATCH(4) correspond au MSB et LATCH(0) correspond au LSB. VHDL n’est pas sensible à la « casse », c’est à dire qu’il ne fait pas la
Les valeurs que peuvent prendre un signal de type std_logic sont : distinction entre les majuscules et les minuscules.

- ‘0’ ou ‘L’ : pour un niveau bas.


- ‘1’ ou ‘H’ : pour un niveau haut.
- ‘Z’ : pour état haute impédance.
- ‘-‘ : Quelconque, c’est à dire n’importe quelle valeur.

E M . Mellouli 20 E M . Mellouli 18

2.4. Structure d’une description VHDL 2.4. Structure d’une description VHDL
2.4.3 Architecture 2.4.2 Déclaration de l’entité (entity) et des entrées/sorties
b) Le SENS du signal
. décrit le fonctionnement souhaité pour un circuit ou une partie du circuit.
- in : pour un signal en entrée.
. Plusieurs architectures peuvent être définies pour le même modèle - out : pour un signal en sortie.
- inout : pour un signal en entrée sortie
- buffer : pour un signal en sortie mais utilisé comme entrée dans la
. Déclaration description.

ARCHITECTURE nomdelarchitecture OF nomdelentité IS


déclarations de types, de constantes,
de composants, de signaux
BEGIN
définiton de processus
et/ou
d'instances de composants, ...
END nomdelarchitecture;

E M . Mellouli 21 E M . Mellouli 19
2.4. Structure d’une description VHDL 2.4. Structure d’une description VHDL
A. Architecture : Description comportementale 2.4.3 Architecture
. Exemple : Description comportementale d'une bascule D sur niveaux . 3 Types de description :
. Description comportementale
Q - Description purement fonctionnelle du circuit
D
Horloge - Portabilité, lisibilité, maintenance, évolutivité
- Description flot de données pour traduire une table de vérité
Q

. Description structurelle
- Traduction d’une représentation schématique
D H Q
- Efficacité, compacité, clarté
0 0
1 1 . Description mixte
- Au sein d’une même architecture, il est possible d ’utiliser
X X Q-1
des modules décrits de manière comportementale ou structurelle

E M . Mellouli 24 E M . Mellouli 22

2.4. Structure d’une description VHDL 2.4. Structure d’une description VHDL
A. Architecture : Description structurelle A. Architecture : Description comportementale
. Traduction d'une représentation schématique . Description haut niveau
A(0) VHDL ARCHITECTURE haut_niveau OF adder IS
S(0) BEGIN
B(0) S <= A + B;
END haut_niveau;
A(1)
B(1) . Description niveau équations logiques
ARCHITECTURE structurelle OF adder IS
A(0) S(1) COMPONENT xor2 ARCHITECTURE niveau_equations_logiques OF adder IS
B(0) BEGIN
port(e1,e2 : in bit; s : out bit); end COMPONENT
S(0) <= A(0) XOR B(0);
COMPONENT and2 S(1) <= A(0) AND B(0) XOR A(1) XOR B(1);
port(e1,e2 : in bit;s : out bit); end COMPONENT END niveau_equations_logiques;
SIGNAL inter1,inter2 :bit;
. Description bas niveau
BEGIN
u1 : PORT MAP xor2 (e1=>A(0),e2=>B(0),s=>S(0)); ARCHITECTURE bas_niveau OF adder IS
u2 : PORT MAP xor2 (e1=>A(1),e2=>B(1),s=>inter1); BEGIN
u3 : PORT MAP and2 (e1=>A(0),e2=>B(0),s=>inter2); S(0) <= '1' WHEN A(0)!= B(0) ELSE '0';
S(1) <= '1' WHEN ( A(0)!=B(0) AND A(1)!=B(1) OR
u4 : PORT MAP xor2 (e1=>inter1,e2=>inter2,s=>S(1)); A(1)=B(1) AND A(0)=B(0)=1) OR
end structurelle; A(1)!=B(1) AND A(0)=B(0)=0 ) ELSE '0';
END bas_niveau;

E M . Mellouli 25 E M . Mellouli 23
2.4. Structure d’une description VHDL 2.4. Structure d’une description VHDL
Exemple : description comportementale A. Architecture : Description mixte
. Au sein d'une même architecture, il est possible d'utiliser du comportemental
et du structurel ENTITY integration IS PORT(
a : IN bit_vector(0 to 1);
reset,clk : IN bit;
s : OUT bit_vector(0 to 1));
END integration
reset ARCHITECTURE mixte OF integration IS
S_inter
SIGNAL b,s_inter :bit_vector(0 to 1);
COMPONENT adder
D clk PORT(a,b : IN bit_vector(0 to 1);
s : OUT bit_vector(0 to 1); END COMPONENT;
Dans ce type de description, le comportement de la structure est BEGIN
b VHDL PROCESS(clk)
directement inscrit dans l'architecture à l'aide d'instructions a Adder s IF rising_edge(clk) THEN
séquentielles ou sous forme de flot de données. IF reset = "1" THEN b <= '00';
ELSE b <= s_inter;
END IF;
END IF;
END PROCESS;
u1 : PORT MAP adder (a,b,s_inter);
s <= s_inter;
END mixte;

E M . Mellouli 29 E M . Mellouli 26

2.4. Structure d’une description VHDL 2.4. Structure d’une description VHDL
Exemple : description structurelle Exemple : description comportementale

E M . Mellouli 30 E M . Mellouli 28
2.4. Structure d’une description VHDL
2. Présentation des éléments du VHDL
Exemple : description structurelle
2.5. Les Objets
Constantes :
Utilisation des constantes et des variables : proche des langages
traditionnels

. Constantes (Constant)

. Objets internes à valeurs fixes et définitives

. Déclaration : constant nom : type := valeur;

. Exemple : CONSTANT pi : real:=3.141592 ;

E M . Mellouli 33 E M . Mellouli 31

2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL


2.5. Les Objets 2.5. Les Objets
Variables : 3 types d’objets :
 Constantes :
. Variables (Variable)
 valeur fixe après initialisation
. Objets permettant de conserver une valeur pendant un  Variables :
certain temps
 valeur modifiable par affectation (affectation instantanée)
. Utilisable qu'au sein d'un processus (définition dans le
process)  Signaux :
 spécifiques aux langages de description de matériel
. Peu utilisé en synthèse logique
 modélisent les informations qui circulent sur les fils ou bus
. Exemple:

VARIABLE octet1 : std_logic_vector(0 TO 7) := "00000001";

E M . Mellouli 34 E M . Mellouli 32
2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL
2.5. Les Objets 2.5. Les Objets
Signaux : (signal)
 Différences entre variables et signaux
• ils sont la base des langages de description de matériel
 Les variables sont toujours locales à un processus: il n’y a pas de • ils véhiculent les informations entre composants
variables globales • ils ne sont pas de type pointeur, pas de type fichier
• Utilisation en mode concurrent et séquentiel
• Synthèse (représentation matérielle : un fil ou une mémoire)
 Les signaux peuvent être déclarés n’importe où dans le programme, • Une valeur courante et une valeur future
sauf à l’intérieur d’un processus. S’ils sont déclarés au début de
l’architecture, ils sont communs à toute l’architecture

 Contrairement aux signaux, les variables sont mises à jour de façon


instantanée, au moment de l’affectation, sans retard possible

E M . Mellouli 37 E M . Mellouli 35

2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL


2.5. Les Objets 2.5. Les Objets
 Signaux : Différences entre variables et signaux Signaux : (signal)
. Synthèse d'une VARIABLE Synthèse d'un SIGNAL . Synthèse d'une VARIABLE Synthèse d'un SIGNAL

ARCHITECTURE ex_sig OF exemple IS


BEGIN
PROCESS(a,b,c) a Tmp (fil)
VARIABLE tmp : bit;
BEGIN b y
c
tmp := a and b;
y <= tmp or c;
END PROCESS;
END ex_sig;

ARCHITECTURE ex_sig OF exemple IS


SIGNAL tmp : bit;
BEGIN
PROCESS(a,b,c) a Tmp (fil)
BEGIN b y
tmp <= a and b;
c
y <= tmp or c;
END PROCESS;
END ex_sig;
E M . Mellouli 38 E M . Mellouli 36
2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL
2.6.1 Types : scalaire 2.6. Types Prédéfinis ou non, fonction de résolution
. Types entiers : Le VHDL est un langage fortement typé. Chaque objet doit être
-231 + 1  entier  231 -1 déclaré et appartenir à un type connu (ensemble de valeurs possibles).
 Type = ensemble de valeurs + opérateurs associés
TYPE chiffre_ascendant IS RANGE 0 TO 9;  Sous-type = type dérivé d'un type de base (type parent) avec
TYPE chiffre_descendant IS RANGE 9 DOWNTO 0; contraintes
. Types flottants :  4 classes de types
 Types scalaires: entier, réel, énuméré, physique
Approximation discrète de l'ensemble des réels dans un intervalle
donné  Types composites: tableaux, enregistrements
TYPE tension IS RANGE 0 TO 5;  Pointeurs
 Fichiers
-1E38  Flottant  1E38  Déclaration de type:
Opérateurs
• Arithmétiques: + – * / abs
 Déclaration de sous-type:
mod rem (seulement pour types entiers)
** (puissance entière)
• Relationnels: = /= < <= > >=

E M . Mellouli 41 E M . Mellouli 39

2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL


2.6.1 Types : scalaire 2.6. Types Prédéfinis ou non, fonction de résolution
. Types énumérés :
Ensemble de valeurs désignées par des identificateurs ou des caractères

TYPE boolean IS (false, true);


TYPE bit IS ('0','1');
TYPE jour IS (lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche);

Remarques :
. Chaque caractère ou chaîne de caractères au sein d'un même
type doit être distinct
. Possibilité d'utiliser le même caractère dans 2 types distincts
Opérateurs
• Relationnels: = /= < <= > >=
• Logiques: and or nand nor xor xnor not (types bit & boolean seulement)

E M . Mellouli 42 E M . Mellouli 40
2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL
2.6.1 Types : scalaire 2.6.1 Types : scalaire
. Types physiques : . Exercices :

E M . Mellouli 45 E M . Mellouli 43

2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL


2.6.2 Types : composés 2.6.1 Types : scalaire
. Types physiques :
 Tableaux et enregistrements (array & record) : Valeurs numériques de quantités physiques
 tableau : éléments homogènes, de même type  un type physique est caractérisé par :
 enregistrements : éléments hétérogènes, types différents  son unité
 par des sous unités
 on peut effectuer des calculs sur ces types
 Les tableaux :
 dimensions multiples TYPE resistance IS RANGE 0 TO 1E8;
 les indices sont de type discret (énuméré ou entier) UNITS ohms;
 2 sortes de tableaux : kohms = 1000 ohms;
• contraint : on spécifie le sens de variation des indices Mohms = 1E6 ohms;
• non contraint : on repousse la définition de la taille à plus tard
END UNITS;

♦ Opérateurs
• Arithmétiques: + – * / abs
• Relationnels: = /= < <= > >=

E M . Mellouli 46 E M . Mellouli 44
2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL
2.6.2.1 Type : tableaux 2.6.2.1 Type : tableaux
Exemples de types non prédéfinis
 Exemple
type word is array (31 downto 0) of bit; -- intervalle descendant
type memory is array (0 to 255) of word; -- intervalle montant

L'indice peut-être un type entier défini par déclaration


TYPE adresse IS RANGE 0 TO 255;
type memory is array (adresse) of octet;

Accès aux éléments d'un tableau


-- soit W un objet de type word, M de type memory.
W(15) --bit d'indice 15
M(122) --mot d'indice 122
M(122)(8) -- bit d'indice 8 du mot d'indice 122
-- tranches
W(31 downto 16) -- 16 bits les plus significatifs
M(129 to 255) -- portion haute de la mémoire

E M . Mellouli 49 E M . Mellouli 47

2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL


2.6.2.1 Type : tableaux 2.6.2.1 Type : tableaux
♦ Opérateurs
 Les tableaux non contraint :
 permet de repousser la définition de la taille à plus tard.
• Relationnels: = /= < <= > >=
 la manipulation de ces tableaux demande l’utilisation d’attributs
• Logiques*: and or nand nor xor xnor not
range <>
• Décalage et rotation*: sll srl sla sra rol ror

(* tableaux à 1 dimension de types bit ou boolean seulement;


Types prédéfinis
opérations logiques effectuées bit à bit)
type bit_vector is array (natural range <>) of bit;
• Concaténation: & (tableaux à 1 dimension seulement)
type string is array (positive range <>) of character;
(natural range: c'est l’indice)

E M . Mellouli 50 E M . Mellouli 48
2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL
2.6.6 Type std_logic 2.6.2 Types : composés
Un type enregistrement définit une collection d'éléments (ou de champs) nommés dont
 Les types prédéfinis proposés par le langage VHDL initial sont vite devenus les valeurs peuvent être de types différents. Chaque nom d'élément doit être unique.
insuffisants dans la plupart des cas. ♦ Exemples de types non prédéfinis type memory_bus is record
 Il suffit, pour s'en convaincre, d'essayer de décrire à l'aide de signaux de addr : bit_vector(15 downto 0);
type bit la porte trois états ci-dessous : data : bit_vector(7 downto 0);
read, write: bit;
enable : boolean;
end record memory_bus;
type complex is record
real_part, imag_part: real;
 Si E = 1, alors les sorties de cette porte/élément sont actives et ont une end record complex;
valeur de 0 ou 1 ♦ Accès aux éléments d'un enregistrement
 Si E = 0, alors les sorties ne sont pas activées et n'ont pas de -- soit MB1 et MB2 deux objets de type memory_bus et Z de type complex
signification, comme si les sorties étaient « déconnectées » MB1.addr -- tout le tableau addr
MB1.addr(7 downto 0) -- tranche du tableau addr
MB1.data(7) -- élément d'indice 7 du tableau data
 Avec un signal S de type bit pouvant prendre deux valeurs '0' et '1', la Z.real_part, Z.imag_part -- nombres réels
description de cette structure est impossible. Il faut utiliser un type qui Affectation par champs ou globale
MB1:=MB2
permette au signal S de prendre la valeur 'Z‘ haute impédance. MB1.addr:=MB2.addr

E M . Mellouli 54 E M . Mellouli 51

2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL


2.6.6 Type std_logic 2.6.4 Sous-Types
 L'objectif final étant de pouvoir décrire toutes les structures logiques Un sous-type reste compatible avec son type d’origine contrairement à un type
possibles. C'est dans cette optique que le type std_logic conforme au nouvellement créé.
standard IEEE 1164 a été créé.
SUBTYPE narurel IS integer RANGE 0 TO integer’high
Ces types proposent les valeurs suivantes :
 naturel reste compatible avec integer
'U' = Non initialisé,
’X ' = inconnu forçage fort, TYPE nouvel_entier IS RANGE 0 TO 99
’0’ = forçage fort,
’1’ = forçage fort,  nouvel_entier est un type différent
’Z ' = haute impédance,
’W’ = inconnu forçage faible,
’L’ = forçage faible,
’H’ = forçage fort,
et ’-’ = quelconque.

E M . Mellouli 55 E M . Mellouli 52
2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL
2.7 Opérateurs standards 2.7 Opérateurs standards
. Opérateurs relationnels
. Remarque : Le VHDL est un langage développé initialement pour la
Nom Type opérandes Signification modélisation et la simulation, par conséquent certains opérateurs sont à
= Egal déconseiller en synthèse
Ils permettent de modifier
/= Non égal
l’état d’un signal ou de . Opérateurs logiques
signaux suivant le résultat < Entrées : Tout scalaire Inférieur
d’un test ou d’une condition <= Sortie : Boolean Inférieur ou égal Nom Type opérandes Signification
> Supérieur
And Et
>= Supérieur ou égal
Nand Non et
. Exemple a0
a1 Or Ou
SIGNAL a,b : bit_vector(1 DOWNTO 0); !b0 Boolean
Nor Bit ou Bit_vector Non ou
SIGNAL s : bit; Synthèse a0
IF a > b THEN s <= "1"; !b1 s Xor Ou exculsif
!b0
END IF; Xnor Egal
a1
Not Non
!b1

E M . Mellouli 60 E M . Mellouli 58

2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL


2.7 Opérateurs standards 2.7 Opérateurs standards
. Opérateurs de décalages . Opérateurs logiques
Nom Type opérandes Signification . Exemple 1
a(0)
c(0)
Sll Sla Décalage à gauche b(0)
SIGNAL a,b,c : std_logic_vector(1 downto 0);
Synthèse
Srl Sra Décalage à droite c <= a AND b; a(1)
Bit_vector c(1)
b(1)
Rol Rotation gauche
Ror Rotation à droite a0
. Exemple 2
. Exemple a1 b0
SIGNAL a,b : BIT_VECTOR(0 TO 3);
... a2 b1 d
Synthèse SIGNAL d, e, f, g : bit; e g
b <= a sll 1; -- b = a décalé de 1 bit à gauche Synthèse
a3 b2 g <= (d AND e) AND f; f
...

'0' b3
clk
E M . Mellouli 61 E M . Mellouli 59
2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL
2.7 Opérateurs standards 2.7 Opérateurs standards
Opérateurs arithmétiques
. Opérateur de concaténation
Nom Type opérandes Signification
Nom Type opérandes Signification + Incrémentation de 1 ou addition
& Bit, Bit_vector Concaténation - Décrémentaion de 1 ou soustraction
Integer, Real
ARCHITETCURE ... * Multiplication
SIGNAL A : BIT_VECTOR(2 DOWNTO 1 ); / Division
SIGNAL B : BIT;
SIGNAL C : BIT_VECTOR(5 DOWNTO 0 ); A(1) C(0) abs Valeur absolue
BEGIN ** Exponentiel
C <= not B & "101" & not A(2 DOWNTO 1); A(2) C(1)
mod Modulo
VDD C(2) Integer
rem Reste
GND C(3)
VDD C(4) Autres opérateurs
« bon » & « jour » produira « bonjour » ;
B C(5) Nom Type opérandes Signification
« 101 » & « 10 » produira « 10110 »
& Bit, Bit_vector Concaténation
E M . Mellouli 64 E M . Mellouli 62

2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL


2.7 Opérateurs standards 2.7 Opérateurs standards
A
. Opérateur de concaténation
. Exemple : addition
B S
Utilisation de l’opérateur de concaténation pour réaliser des décalages logiques
S = (A + B) + (C - 1) C -1
en synthèse logique : Synthèse
T = ((A + B) + C - 1)
Décalage à droite : A

-- Si A est de type std_logic_vector(7 downto 0) B -1 T


S1 <= ‘0’ & A(7 downto 1); -- décalage d’un bit à droite C
S1 <= "000" & A(7 downto 3); -- décalage de trois bits à droite

Décalage à gauche :
Remarque : Pour pouvoir utiliser les opérateurs ci-dessus il faut rajouter
-- Si A est de type std_logic_vector(7 downto 0) les bibliothèques suivantes au début du fichier VHDL:
S1 <= A(6 downto 0) & ‘0’; -- décalage d’un bit à gauche
S1 <= A(4 downto 0) & "000"; -- décalage de trois bits à gauche Use ieee.numeric_std.all ;
Use ieee.std_logic_arith.all ;

E M . Mellouli 65 E M . Mellouli 63
2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL
2.8 Attributs 2.7 Opérateurs standards
Un attribut est une caractéristique associée à un type ou un objet. Chaque • L’affectation simple : <=
attribut est référencé par son nom consistant en un préfixe, une apostrophe et
 Dans une description VHDL, c’est certainement l’opérateur le plus utilisé.
l´attribut lui-même. Le préfixe doit être un type, sous-type, tableau, ou bloc.
 Permet de modifier l’état d’un signal en fonction d’autres signaux et/ou
d’autres opérateurs.
 Attribut = information sur un élément du langage
Utilisation : toto'att avec toto un objet ou un type et att un attribut
Exemple avec des portes logiques : S1 <= E2 and E1 ;
• Par exemple: longueur d'un signal bus = bus'length
 Pour les signaux composés de plusieurs bits on utilise les guillemets " … "
 ils permettent de connaître les caractéristiques :
 des signaux
 des tableaux  Les bases numériques utilisées pour les bus peuvent être :
 des types
BINAIRE, exemple : BUS <= "1001" ; -- BUS = 9 en décimal
HEXA, exemple : BUS <= X"9" ; -- BUS = 9 en décimal
OCTAL, exemple : BUS <= O"11" ; -- BUS = 9 en décimal

Remarque : La base décimale ne peut pas être utilisée lors de l’affectation de


signaux.

E M . Mellouli 68 E M . Mellouli 66

2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL


2.8 Attributs 2.7 Opérateurs standards
. Attributs d'un scalaire Exemple:
Library ieee;
T'left -> Limite gauche de T Use ieee.std_logic_1164.all;
T'right -> Limite droite de T entity AFFEC is
port (
T'low -> Limite basse de T
E1,E2 : in std_logic;
T'high -> Limite haute de T BUS1,BUS2,BUS3 : out std_logic_vector(3 downto 0);
. Attributs d'un ensemble discret S1,S2,S3,S4 : out std_logic)
end AFFEC;
T'pos(X) -> Numéro de la position de X dans T architecture DESCRIPTION of AFFEC is
T'val(N) -> Valeur à la position N dans T begin
T'leftof(X) -> Valeur à une position à gauche de X dans T S1 <= '1'; -- S1 = 1
T'rightof(X) -> Valeur à une position à droite de X dans T S2 <= '0'; -- S2 = 0
S3 <= E1; -- S3 = E1
T'pred(X) -> Valeur à une position au dessous de X dans T
S4 <= '1' when (E1 ='1') else S4; -- S4 = 1 si E1=1 sinon S4
T'succ(X) -> Valeur à une position au dessus de X dans T
BUS1 <= "1000"; -- BUS1 = "1000"
BUS2 <= E1 & E2 & "10"; -- BUS2 = E1 & E2 & 10
BUS3 <= x"A"; -- valeur en HEXA -> BUS3 = 10(déc)
end DESCRIPTION;

E M . Mellouli 69 E M . Mellouli 67
2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL
2.8 Attributs 2.8 Attributs
Attributs de signal . Exemples - Attributs d'un scalaire
Type adr is integer range 7 downto 0;
Pour cette catégorie d’attribut, le préfixe doit être un signal. Le type du
résultat peut être signal ou fonction.
adr ’left = 7
• Objets signaux implicites: adr ’right = 0
S'delayed (T) Signal ayant même valeur que S mais retardé de adr ’low = 0
T unités de temps (T ≥ 0 ns) adr ’high = 7

S'stable(T) Signal de type boolean valant TRUE si aucun . Exemples - Attributs d'un ensemble discret
événement n'est arrivé sur S durant T unités
de temps (T ≥ 0 ns), et FALSE sinon Type MVL4 is (‘ U ’, ’0 ’, ‘ 1 ’, ‘ Z ’);
• Fonctions:
MVL4'pos(‘ 1 ’) = 2
S'event Fonction à valeur de type boolean valant TRUE MVL4'val(0) = ‘ U ’
si un événement est arrivé sur S durant le cycle
de simulation courant, et FALSE sinon MVL4 ’rightof(‘ 1 ’) = ‘ Z ’
MVL4 ’leftof(‘ 1 ’) = ‘ 0 ’
S'last_event Fonction à valeur de type time valant le temps
écoulé depuis le dernier événement sur S MVL4 ’succ(2) = ‘ Z ’ //Valeur au dessus de 2 dans MVL4
MVL4 ’succ(‘1’) = ‘ Z ’
S'last_value Fonction à valeur du type de S valant la valeur MVL4 ’prec(2) = ‘ 0 ’ // Valeur au dessous de 2 dans MVL4
de S avant le dernier événement sur S

E M . Mellouli 72 E M . Mellouli 70

2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL


2.8 Attributs 2.8 Attributs
Attributs de signal . Attributs d'un tableau
S’active :
A'left(N) -> Limite gauche de l'intervalle des indices de la dim. N de A
• boolean
A'right(N) -> Limite droite de l'intervalle des indices de la dim. N de A
• true si il y a eu une transaction (affectation) sur le signal dans le
A'low(N) -> Limite basse de l'intervalle des indices de la dim. N de A
cycle de simulation en cours
A'highof(N) -> Limite haute de l'intervalle des indices de la dim. N de A
S’quiet(T) : A'range(N) -> Intervalle des indices de la dim. N de A
• boolean A'reverse_range(N) -> Intervalle inverse des indices de la dim. N de A
• true si le signal a eu ni transaction ni événement pendant un temps T A'length(N) -> Longueur de l'intervalle des indices de la dim. N de A

S’last_active :
• time
• rend le temps écoulé depuis la dernière transaction

E M . Mellouli 73 E M . Mellouli 71
2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL
2.9 Exécution parallèle et séquentielle 2.8 Attributs
. Exécution mixte Utilisation des attributs de signaux :
. Possibilité d'associer dans une même architecture des modules à exécution
parallèle et séquentielle  détection d'un front montant :
. Exemple : Comparateur synchrone à une horloge clk

LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY comp_synch IS PORT (
a, b, clk, reset : IN std_logic;
qs : OUT std_logic);  détection d'un front descendant :
END comp_synch;
ARCHITECTURE archi_mixte OF comp_synch IS
SIGNAL q : std_logic;
BEGIN
q<='1‘ WHEN a=b ELSE '0'; a
q
PROCESS(clk, reset) Comparateur qs
b
BEGIN clk
IF reset='0' THEN qs<='0';
ELSIF (clk'event AND clk='1') THEN qs <= q;
END IF;
Reset
END PROCESS;
END archi_mixte;

E M . Mellouli 76 E M . Mellouli 74

2. Présentation des éléments du VHDL 2. Présentation des éléments du VHDL


2.10 Instructions 2.9 Exécution parallèle et séquentielle
. Deux types d'exécution : Deux familles d'instructions . Particularisme du VHDL : Exécution parallèle ou séquentielle

. Instructions réservées au mode d'exécution parallèle ou concurrente


- Toutes les opérations sont exécutées simultanément . Exécution parallèle
- L'ordre d'écriture n'a aucune importance . Exécution par défaut
. Les instructions au sein d'une architecture sont exécutées en parallèle ou de
manière concurrente
. Exécution concurrente = Exécution combinatoire
I1 . Chaque opération dans une architecture est exécutée à chaque instant
I1 I2 I3

I2 . Exécution séquentielle
. Nécessité d'utiliser un PROCESS
. Le process est exécuté à chaque fois qu'un signal déclaré dans sa liste de
sensibilité change de valeur.
. Instructions réservées au mode d'exécution séquentielle I3 . Les instructions sont exécutées séquentiellement
- Chaque opération est effectuée l'une après l'autre . Les modifications des signaux (signal) sont effectives à la fin du process
- L'ordre d'écriture a une grande importance

E M . Mellouli 77 E M . Mellouli 75
2.10 Instructions 2.10 Instructions
2.10.1 Instructions de type parallèle 2.10.1 Instructions de type parallèle

. Assignation inconditionnelle . Assignation inconditionnelle


signal <= expression
. Assignation conditionnelle signal <= expression
signal <= {expression WHEN condition} ELSE expression

Exercice2:
. Assignation conditionnelle
Donner le programme (entité plus l’architecture) du circuit ci-dessous signal <= {expression WHEN condition}
en utilisant l’assignation conditionnelle suivante:
signal <= {expression WHEN condition} ELSE expression ELSE expression

E M . Mellouli 80 E M . Mellouli 78

2.10 Instructions 2.10 Instructions


2.10.1 Instructions de type parallèle 2.10.1 Instructions de type parallèle
. Assignation sélective
. Assignation inconditionnelle
signal <= expression
WITH sélecteur SELECT . Assignation conditionnelle
signal <= {expression WHEN condition} ELSE expression
signal <= {expression WHEN valeur_sélecteur1,
Exercice1:
expression WHEN valeur_sélecteur2,
Donner le programme (entité plus l’architecture ) du circuit ci-dessous
expression WHEN OTHERS}; en utilisant l’assignation conditionnelle suivante:
signal <= {expression WHEN condition} ELSE expression

E M . Mellouli 81 E M . Mellouli 79
2.10 Instructions 2.10 Instructions
2.10.1 Instructions de type parallèle 2.10.1 Instructions de type parallèle
. Instruction PROCESS
. Assignation d'un composant
- Un processus est un ensemble de phrases séquentielles label : nom_du_composant PORT MAP (association des ports)
- Un modèle VHDL peut être vu comme un ensemble de processus ARCHITECTURE arch_full OF full_adder IS
exécutés en parallèle SIGNAL inter : bit;
- Toutes les instructions comprises dans le PROCESS sont COMPONENT half_adder PORT (a,b,cin : IN bit;
exécutées séquentiellement cout,s : OUT bit);
- Tous les PROCESS sont exécutés en parallèle END COMPONENT;
BEGIN
- Les signaux sont utilisés pour contrôler l’activation des processus
u1 : half_adder PORT MAP (a=>a(0),b=>b(0),cin=>cin,cout=>inter,s=>s(0));
- Activation d'un PROCESS : 2 possibilités u2 : half_adder PORT MAP (a(1),b(1),inter, cout,s(1));
[label] : PROCESS END arch_full;
[label] : PROCESS(liste_signaux) -- Partie déclarative du process
-- Partie déclarative du process BEGIN
BEGIN -- Corps du process
-- Corps du process -- phrases séquentielles
-- phrases séquentielles WAIT ON (liste_signaux)
END PROCESS [label] END PROCESS [label]

E M . Mellouli 84 E M . Mellouli 82

2.10 Instructions 2.10 Instructions


2.10.1 Instructions de type parallèle 2.10.1 Instructions de type parallèle
. Instruction PROCESS Instanciation de multiples composants
Une instruction generate permet de dupliquer un bloc d’instructions concurrentes un
certain nombre de fois, ou de créer un tel bloc si une condition est vérifiée.
. Instruction GENERATE
Structure répétitive
 label : FOR variable_boucle IN val_initiale TO valf_inale GENERATE
{instructions parallèles}
END GENERATE label
 Phrases wait: Structure conditionnelle
 label : IF condition GENERATE
wait on A, B; -- changement de A ou B
{instructions parallèles}
wait for délai; -- une certaine durée
END GENERATE label
wait until condition;
wait on ListeDeSignaux until condition Notez que :
N.B : L'instruction WAIT n'est pas synthétisable avec la condition de durée. • le ELSE n'existe pas (oubli de VHDL ?) et qu'il faut refaire un 2ème IF.
• Les deux instructions IF GENERATE et FOR GENERATE ont besoin obligatoirement d'une
Elle est très utile pour les testbench pour la simulation.
étiquette

E M . Mellouli 85 E M . Mellouli 83
2.10 Instructions 2.10 Instructions
2.10.1 Instructions de type parallèle 2.10.1 Instructions de type parallèle
. Instruction PROCESS

E M . Mellouli 88 E M . Mellouli 86

2.10 Instructions 2.10 Instructions


2.10.2 Instructions de type séquentiel 2.10.1 Instructions de type parallèle
. Ces instructions sont uniquement utilisées dans un Process . Instruction PROCESS
. Assignation inconditionnelle de variables et de signaux
Même traitement que pour le mode parallèle

. Instruction IF
IF condition THEN
instructions_sequentielles;
ELSIF condition THEN
instructions_sequentielles;
ELSE instructions_sequentielles;
END IF;

E M . Mellouli 89 E M . Mellouli 87
2.10 Instructions 2.10 Instructions
2.10.2 Instructions de type séquentiel 2.10.2 Instructions de type séquentiel
. Ces instructions sont uniquement utilisées dans un Process
. Instruction NEXT
. Assignation inconditionnelle de variables et de signaux
NEXT label_boucle WHEN condition . Instruction IF
IF condition THEN
instructions_sequentielles
. Instruction EXIT ELSIF condition THEN
instructions_sequentielles
EXIT label_boucle WHEN condition
ELSE instructions_sequentielles
END IF;
Exercice2 :
Donner le programme (entité plus l’architecture ) du circuit ci-dessous
en utilisant l’assignation inconditionnelle IF (Instruction IF).

E M . Mellouli 92 E M . Mellouli 90

2.10 Instructions 2.10 Instructions


2.10.3 Exemples 2.10.2 Instructions de type séquentiel
. Multiplexeur 8 bits : 4 vers 1
1ère phase : définition des entrée/sorties (ENTITY)
. Instruction CASE
CASE expresssion is
Multiplexeur 8 bits
Entrées Sorties {WHEN valeur_expression => instructions_sequentielles};
4 vers 1
{WHEN OTHERS => instructions_sequentielles};
END CASE;

8 . Instruction LOOP
Entree1
8 instruction_pour_iteration LOOP
Entree2 Multiplexeur 8 bits 8
8 Sortie instructions_sequentielles
Entree3 4 vers 1
8 END LOOP;
Entree4

Sel1 Sel2
E M . Mellouli 93 E M . Mellouli 91
2.11 Description hiérarchique 2.10 Instructions
2.11.1 Description hiérarchique : Component 2.10.3 Exercice:
.Donner le programme en VHDL d’un Multiplexeur 8 bits : 4 vers 1, en
. Description structurelle utilisant comme solutions:
. Utilisation de composants
2 phases : - Déclaration - Solution 1 : Instruction IF
- Instanciation
Déclaration - Solution 2 : Instruction CASE
La syntaxe est presque identique à celle de l'entité : - Solution 3: WITH sélecteur SELECT
component AND_2
port ( Entree1 8
a : in bit; Entree2 8 Multiplexeur 8 bits 8 Sortie
b : in bit; Entree3 8 4 vers 1
s : out bit); Entree4 8
end component;
Sel1 Sel2

E M . Mellouli 96 E M . Mellouli 94

2.11 Description hiérarchique 2. Présentation des éléments du VHDL


2.11.1 Description hiérarchique : Component 2.11 Description hiérarchique
Instanciation :
. Descriptions plus simples
L'instanciation d'un composant se fait dans le corps de l'architecture de cette . Rapidité de simulation et donc rapidité de mise au point
façon : . Réutilisation de sous-ensembles
NOM_INSTANCE : NOM_COMPOSANT port map (LISTE DES CONNEXIONS); . Concepts : COMPONENT, GENERIC, PACKAGE,
PROCEDURE ET FONCTION
arc of AND_3 is
signal z : bit; LIBRARY, CONFIGURATION
AND_3 is
component and2
port( . Utilisation d'un objet décrit à l'extérieur de la description utilisatrice :
port (
e1 : in bit; - 2 fichiers VHDL distincts
a : bit;
e2 : in bit; . Compilation distincte :
b : bit;
e3 : in bit; - le composant
s : bit);
s : out bit); - l'entité utilisatrice de ce composant
end component;
begin . Entité compilée : Stockage dans la bibliothèque WORK
end ;
inst1 : and2 port map (a=>e1, b=>e2 , s=>z);
inst2 : and2 port map (z, e3, s);
end arc

E M . Mellouli 97 E M . Mellouli 95
2.11 Description hiérarchique 2.11 Description hiérarchique
2.11.3 Description hiérarchique : Package 2.11.1 Description hiérarchique : Component
. Regroupement d'objets divers :  Dans cet exemple , 2 instances de composant "and2" sont appelées
- types pour créer une porte ET à 3 entrées.
- sous-types
- constantes L'association des ports du composants aux signaux de l'instance se
- sous-programmes fait à l'aide de la clause port map.
- composants, …
La syntaxe des associations est soit :
. Accessibilité ou visibilité : le package se nomme mon_package et a été
compilé et stocké dans la bibliothèque librairie1 (différent de work)
 par nom où chaque broche du composant est associée à un signal :
LIBRARY librairie1 cas de inst_1
USE librairie1.mon_package.all  positionnelle où l'ordre des signaux correspond à l'ordre des broches :
cas de inst_2
. Possibilité d'utiliser plusieurs packages dans une même description
. Les standards IEEE 1164 et IEEE 1076.3 sont accessibles via des
packages
E M . Mellouli 100 E M . Mellouli 98

2.11 Description hiérarchique 2.11 Description hiérarchique


2.11.3 Description hiérarchique : Package 2.11.1 Description hiérarchique : Component
. 2 parties : En résumé :
. Partie déclarative (spécification)
- Déclarations des éléments visibles à l'utilisateur du package
Trois opérations sont nécessaires :
. Corps du package (implantation)
- Le couple entité-architecture du sous-ensemble doit être créé et annexé à
- Chaque élément défini dans la partie déclarative est visible du corps
une librairie de l’utilisateur, par défaut la librairie « work ».
- Le sous-ensemble précédent doit être déclaré comme composant dans
PACKAGE data_types IS l’ensemble qui l’utilise, cette déclaration reprend les éléments principaux
SUBTYPES address is bit_vector(24 DOWNTO 0);
SUBTYPES data is bit_vector(15 DOWNTO 0); de l’entité du sous-ensemble.
CONSTANT vector_table_loc : address; - Chaque exemplaire du composant que l’on souhaite inclure dans le
FUNCTION data_to_int(value : data) RETURN integer; schéma en cours d’élaboration doit être connecté aux équipotentielles de
FUNCTION int_to_data(velue:integer) RETURN data;
ce schéma, c’est le mécanisme de l’instanciation.
END data_types;

PACKAGE BODY data_types is - Au moment de la déclaration : (exemple de add)


CONSTANT vector_table_loc : address := X"FFFF00";
FUNCTION data_to_int(value : data) RETURN integer IS component nom_composant -- même nom que l’entité
--body of data_to_int port ( liste_ports ) ; -- même liste que dans l’entité
END data_to_int;
FUNCTION int_to_data(velue:integer) RETURN data IS
end component ;
--body of int_to_data
END int_to_data;
end data_types;
E M . Mellouli 102 E M . Mellouli 99
2.11 Description hiérarchique 2.11 Description hiérarchique
2.11.5 Description hiérarchique : Library 2.11.4 Description hiérarchique : Procédures
Déclaration de procédures
Une librairie est une collection de modules VHDL qui ont déjà été compilés. Ces
PROCEDURE nom (liste de paramètres) IS
modules peuvent être des paquetages, des entités ou des architectures.
déclaration
BEGIN instructions END nom;
. Les programmes objets sont placés dans des bibliothèques
Exemple:
. Eléments d'une bibliothèque : type byte is array (7 downto 0) of std_logic;
. Définitions de types, constantes, procédures  PACKAGE •••
. Architecture de circuits  ARCHITECTURE procedure ByteToInteger (ib: in byte; oi: out integer) is
. Associations composants/architectures  CONFIGURATION variable result : integer := 0;
begin
for i in 0 to 7 loop
. 2 types de bibliothèque if ib(i) = '1' then
. Bibliothèque de l'utilisateur (user library) result := result + 2**i;
end if;
. Bibliothèque système end loop;
oi := result;
end ByteToInteger;

E M . Mellouli 105 E M . Mellouli 103

2.11 Description hiérarchique 2.11 Description hiérarchique


2.11.5 Description hiérarchique : Library 2.11.4 Description hiérarchique : Fonctions
 Tous les paramètres d’une fonction sont de mode in: en dehors de ses
Les librairies variables locales, une fonction ne peut modifier que la valeur retournée.
 Facilite la tâche du concepteur En plus, les paramètres ne peuvent pas être de type variable: ils ne
 Rajout de fonctionnalités supplémentaires peuvent être que des constantes ou des signaux
La librairie IEEE
 A mettre au début de votre description . Déclaration des fonctions
 Pour rajouter les types étendues std_logic et std_logic_vector
FUNCTION nom (liste de paramètres) RETURN type IS déclarations
 use IEEE.STD_LOGIC_1164.all;
BEGIN instructions end nom;
 DORENAVANT nous remplacerons SYSTEMATIQUEMENT Résultat d'une fonction : return expression;
 BIT par STD_LOGIC
 BIT_VECTOR par STD_LOGIC_VECTOR
Exemple
 Pour utiliser des fonctions arithmétiques sur ces STD_LOGIC_VECTOR function f (a, b, c : std_logic) return std_logic is
 USE IEEE.NUMERIC_STD.ALL; variable x : std_logic;
 Et aussi USE IEEE.std_logic_arith.all; begin
x := ((not a) and (not b) and c);
• Q<=Q+1; -- Q étant par exemple un std_logic_vector et 1 est un entier!! return x;
• A<B -- A et B des std_logic_vector end f;
N.B : Par rapport à la fonction, La procédure permet d'avoir plusieurs sorties,
mais à condition de déclarer les entrées et les sorties comme dans une entité
ou composant.
E M . Mellouli 106 E M . Mellouli 104
 Complément sur les opérations arithmétiques
2.11 Description hiérarchique
 Le rajout de use IEEE.numeric_std.all; permet de:
 Exercice:  De travailler avec des valeurs signées et non signées
• signal A,B: signed(3 downto 0);

• signal tempo: unsigned(3 downto 0);

 De convertir un std_logic_vector en signed ou unsigned


• A<= signed(SW(3 downto 0));

• B<=unsigned(RES);

 De convertir des signed ou unsigned en std_logic_vector


• LEDG(3 downto 0)<=std_logic_vector(tempo);

 De travailler avec les opérateurs arithmétiques standard


• >, >=, =<,<, + ,- etc….

 Le rajout de use IEEE.std_logic_unsigned.all; permet


1) Ecrire la table de vérité pour un afficheur 7 segments cathode commune ('1' pour
 De travailler avec les opérateurs arithmétiques standard
allumer)
 de mélanger des entiers avec des std_logic_vector: A<= A +1;
2) Réaliser le programme VHDL complet du transcodeur

E M . Mellouli 109 E M . Mellouli 107

2.11 Description hiérarchique 2.11 Description hiérarchique


 Solution: 2.11.5 Description hiérarchique : Library
1) la table de vérité pour un afficheur 7 segments cathode commune . Bibliothèque WORK
- En réalité : Un espace de travail
- Tous les éléments créés par l'utilisateur au sein d'un même projet
y sont rangés
- Ces éléments sont réutilisables à tout instant dans le projet après
les avoir déclarés
. Exemple d'utilisation d'un package issu de la bibliothèque WORK
- L'utilisateur a créé un package operateur_arithmetique dans WORK
- Pour y avoir accès

USE WORK.operateur_arithmetique.ALL

- Pour utiliser l'élément mult de ce package

FOR ALL : multiplieur USE ENTITY WORK.mult(comportementale)

E M . Mellouli 110 E M . Mellouli 108


2.11 Description hiérarchique
 Solution:
1) la table de vérité pour un afficheur 7 segments cathode commune
2) Voici le programme VHDL du transcodeur

E M . Mellouli 111

Vous aimerez peut-être aussi