Académique Documents
Professionnel Documents
Culture Documents
E M . Mellouli 2
2. Présentation des éléments du VHDL
2.1. Qu’est ce que le VHDL?
Les sociétés de développement et les ingénieurs ont voulu s’affranchir
des contraintes technologiques des circuits. Ils ont donc créé des
langages dits de haut niveau à savoir VHDL et VERILOG.
Ils permettent au code écrit d’être portable, c’est à dire qu’une
description écrite pour un circuit peut être facilement utilisée pour un
autre circuit.
En effet les instructions écrites dans ces langages se traduisent par une
configuration logique de portes et de bascules qui est intégrée à
l’intérieur des circuits. C’est pour cela qu’on préfère parler de description
VHDL ou VERILOG que de langage.
E M . Mellouli 3
2. Présentation des éléments du VHDL
2.2. Pourquoi un langage de description?
Le schéma structurel que l'on utilise depuis si longtemps et si souvent
n'est en fait qu'un outil de description graphique.
E M . Mellouli 4
2. Présentation des éléments du VHDL
2.3. Historique
Le VHDL (Very High Speed Integrated Circuit, Hardware Description
language) est le fruit du besoin de normalisation des langages de
description de matériel (Première norme IEEE 1076-87 en
décembre 1987).
Auparavant, chaque fournisseur de CAO proposait son propre
langage de modélisation (GHDL chez GENRAD, BLM ou M chez
Mentor Graphics, Verilog chez Cadence etc...) mais aussi un autre
langage pour la synthèse et encore un autre pour le test. Au début
des années 80, le ministère de la défense des Etats Unis confiait le
soin à Intermetrics, IBM et Texas Instruments de mettre au point ce
langage.
L'objectif était bien sûre de s'assurer une certaine indépendance vis
à vis des fournisseurs de matériels et de logiciels
E M . Mellouli 5
2. Présentation des éléments du VHDL
2.3. Historique
En 1994 la version IEEE 1076-93 suivie du standard IEEE 1164 fut
établie (Normalisation des signaux logiques multivaleurs)
Il y aura aussi la norme IEEE 1076.3 (Numeric Standart pour la
synthèse). Implantation d ’un nombre signé
En 1995, afin de normaliser les méthodes de modélisation des
retards des circuits ASIC ou FPGA, de grands industriels se sont
associés dans la « VITAL initiative » (VHDL Initiative Toward ASIC
Libraries) fournissant des bibliothèques normalisées VITAL. Ceci est
concrétisé par la norme IEEE 1076.4
En 1999, le VHDL a connu une nouvelle extension avec la première
norme IEEE-1076.1-1999 du langage de modélisation mixte et multi-
technologique VHDL-AMS
E M . Mellouli 6
2. Présentation des éléments du VHDL
2.4. Structure d’une description VHDL
En VHDL, une structure logique est décrite à l'aide d'une entité et
d'une architecture de la façon suivante :
E M . Mellouli 7
2. Présentation des éléments du VHDL
2.4. Structure d’une description VHDL
E M . Mellouli 8
2.4. Structure d’une description VHDL
2.4.1. Déclaration des bibliothèques
E M . Mellouli 9
2.4. Structure d’une description VHDL
2.4.2 Déclaration de l’entité (entity) et des entrées/sorties
In 1 Out 1
In 2 Bloc A
In 3 Out 2
In 1
Bloc B Bloc C Out 1
In 2
E M . Mellouli 11
2.4. Structure d’une description VHDL
2.4.2 Déclaration de l’entité (entity) et des entrées/sorties
R/W
Données Erreur
E M . Mellouli 12
2.4. Structure d’une description VHDL
2.4.2 Déclaration de l’entité (entity) et des entrées/sorties
. Déclaration :
ENTITY nom_entite IS
PORT ( entrees : IN type_entrees;
sorties : OUT type_sorties;
entreessorties : INOUT type_entreessorties;
entreessorties_buffer : BUFFER type_entreessorties_buffer);
END nom_entite;
E M . Mellouli 13
2.4. Structure d’une description VHDL
2.4.2 Déclaration de l’entité (entity) et des entrées/sorties
a) Le NOM_DU_SIGNAL.
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.
VHDL n’est pas sensible à la « casse », c’est à dire qu’il ne fait pas la
distinction entre les majuscules et les minuscules.
E M . Mellouli 14
2.4. Structure d’une description VHDL
2.4.2 Déclaration de l’entité (entity) et des entrées/sorties
b) Le SENS du signal
E M . Mellouli 15
2.4. Structure d’une description VHDL
2.4.2 Déclaration de l’entité (entity) et des entrées/sorties
c) Le TYPE
E M . Mellouli 16
Exercices
Exercice 1 : Définir
l’entité décrivant un
additionneur de 1 bit.
Exercice 2 : Définir
l’entité décrivant un
additionneur de deux
mots de quatre bits.
E M . Mellouli 17
2.4. Structure d’une description VHDL
2.4.2 Déclaration de l’entité (entity) et des entrées/sorties
Exercice 3
Exercice 4
E M . Mellouli 18
2.4. Structure d’une description VHDL
2.4.3 Architecture
. Déclaration
E M . Mellouli 19
2.4. Structure d’une description VHDL
2.4.3 Architecture
. Exemples -- Décodeur 7 segments
E M . Mellouli 20
2.4. Structure d’une description VHDL
2.4.3 Architecture
. 3 Types de description :
. Description comportementale
- Description purement fonctionnelle du circuit
- Portabilité, lisibilité, maintenance, évolutivité
- Description flot de données pour traduire une table de vérité
. Description structurelle
- Traduction d’une représentation schématique
- Efficacité, compacité, clarté
. Description mixte
- Au sein d’une même architecture, il est possible d ’utiliser
des modules décrits de manière comportementale ou structurelle
E M . Mellouli 21
2.4. Structure d’une description VHDL
A. Architecture : Description comportementale
. Description haut niveau
ARCHITECTURE haut_niveau OF adder IS
BEGIN
S <= A + B;
END haut_niveau;
E M . Mellouli 22
2.4. Structure d’une description VHDL
A. Architecture : Description comportementale
. Exemple : Description comportementale d'une bascule D sur niveaux
Q
D
Horloge
D H Q
0 0
1 1
X X Q-1
E M . Mellouli 23
2.4. Structure d’une description VHDL
A. Architecture : Description structurelle
. Traduction d'une représentation schématique
A(0) VHDL
S(0)
B(0)
A(1)
B(1)
A(0) S(1) ARCHITECTURE structurelle OF adder IS
B(0)
COMPONENT xor2
port(e1,e2 : in bit; s : out bit); end COMPONENT
COMPONENT and2
port(e1,e2 : in bit;s : out bit); end COMPONENT
SIGNAL inter1,inter2 :bit;
BEGIN
u1 : PORT MAP xor2 (e1=>A(0),e2=>B(0),s=>S(0));
u2 : PORT MAP xor2 (e1=>A(1),e2=>B(1),s=>inter1);
u3 : PORT MAP and2 (e1=>A(0),e2=>B(0),s=>inter2);
u4 : PORT MAP xor2 (e1=>inter1,e2=>inter2,s=>S(1));
end structurelle;
E M . Mellouli 24
2.4. Structure d’une description VHDL
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;
BEGIN
b VHDL PROCESS(clk)
a Adder s IF rising_edge(clk) THEN
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 25
2. Présentation des éléments du VHDL
2.4. Structure d’une description VHDL
L'entité donne les informations concernant les signaux d'entrées et
de sorties de la structure ainsi que leurs noms et leurs types.
E M . Mellouli 26
2.4. Structure d’une description VHDL
Exemple : description comportementale
E M . Mellouli 27
2.4. Structure d’une description VHDL
Exemple : description comportementale
E M . Mellouli 28
2.4. Structure d’une description VHDL
Exemple : description structurelle
E M . Mellouli 29
2.4. Structure d’une description VHDL
Exemple : description structurelle
E M . Mellouli 30
2. Présentation des éléments du VHDL
2.5. Les Objets
3 types d’objets :
Constantes :
valeur fixe après initialisation
Variables :
valeur modifiable par affectation (affectation instantanée)
Signaux :
spécifiques aux langages de description de matériel
modélisent les informations qui circulent sur les fils ou bus
E M . Mellouli 31
2. Présentation des éléments du VHDL
2.5. Les Objets
Constantes :
Utilisation des constantes et des variables : proche des langages
traditionnels
. Constantes (Constant)
E M . Mellouli 32
2. Présentation des éléments du VHDL
2.5. Les Objets
Variables :
. Variables (Variable)
. Exemple:
E M . Mellouli 33
2. Présentation des éléments du VHDL
2.5. Les Objets
Signaux : (signal)
• ils sont la base des langages de description de matériel
• ils véhiculent les informations entre composants
• 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)
• Une valeur courante et une valeur future
E M . Mellouli 34
2. Présentation des éléments du VHDL
2.5. Les Objets
Signaux : (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;
E M . Mellouli 36
2. Présentation des éléments du VHDL
2.5. Les Objets
Affectation des signaux :
VHDL permet de spécifier des délais dans les affectations.
2 modes de fonctionnement :
mode inertiel :
• filtre les impulsions de longueur insuffisante
mode transmission :
• transmission de toutes les impulsions
E M . Mellouli 37
2. Présentation des éléments du VHDL
2.5. Les Objets
Mode inertiel
utiliser pour les composants dont le temps de traversé est non
nul (tous les composants décrits de façon réaliste)
E M . Mellouli 38
2. Présentation des éléments du VHDL
2.5. Les Objets
Mode transport
E M . Mellouli 39
2. Présentation des éléments du VHDL
2.5. Les Objets
Mode inertiel vs mode transport
E M . Mellouli 40
2. Présentation des éléments du VHDL
2.5. Les Objets
Différences entre variables et signaux
E M . Mellouli 41
2. Présentation des éléments du VHDL
2.5. Les Objets
Signaux : Différences entre variables et signaux
. Synthèse d'une VARIABLE ≠ Synthèse d'un SIGNAL
E M . Mellouli 42
2. Présentation des éléments du VHDL
2.6. Types Prédéfinis ou non, fonction de résolution
Le VHDL est un langage fortement typé. Chaque objet doit être
déclaré et appartenir à un type connu (ensemble de valeurs possibles).
Type = ensemble de valeurs + opérateurs associés
Sous-type = type dérivé d'un type de base (type parent) avec
contraintes
4 classes de types
Types scalaires: entier, réel, énuméré, physique
Types composites: tableaux, enregistrements
Pointeurs
Fichiers
Déclaration de type:
Déclaration de sous-type:
E M . Mellouli 43
2. Présentation des éléments du VHDL
2.6. Types Prédéfinis ou non, fonction de résolution
E M . Mellouli 44
2. Présentation des éléments du VHDL
2.6.1 Types : scalaire
. Types entiers :
-231 + 1 ≤ entier ≤ 231 - 1
E M . Mellouli 45
2. Présentation des éléments du VHDL
2.6.1 Types : scalaire
. Types entiers :
E M . Mellouli 46
2. Présentation des éléments du VHDL
2.6.1 Types : scalaire
. Types énumérés :
Ensemble de valeurs désignées par des identificateurs ou des caractères
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 47
2. Présentation des éléments du VHDL
2.6.1 Types : scalaire
. Exercices :
E M . Mellouli 48
2. Présentation des éléments du VHDL
2.6.1 Types : scalaire
. Types physiques :
♦ Opérateurs
• Arithmétiques: + – * / abs
• Relationnels: = /= < <= > >=
E M . Mellouli 49
2. Présentation des éléments du VHDL
2.6.1 Types : scalaire
. Types physiques :
E M . Mellouli 50
2. Présentation des éléments du VHDL
2.6.2 Types : composés
Les tableaux :
dimensions multiples
les indices sont de type discret (énuméré ou entier)
2 sortes de tableaux :
• contraint : on spécifie le sens de variation des indices
• non contraint : on repousse la définition de la taille à plus tard
E M . Mellouli 51
2. Présentation des éléments du VHDL
2.6.2.1 Type : tableaux
Exemples de types non prédéfinis
type word is array (31 downto 0) of bit; -- intervalle descendant
type memory is array (0 to 255) of word; -- intervalle montant
E M . Mellouli 52
2. Présentation des éléments du VHDL
2.6.2.1 Type : tableaux
Types prédéfinis
E M . Mellouli 53
2. Présentation des éléments du VHDL
2.6.2.1 Type : tableaux
Exemple
E M . Mellouli 54
2. Présentation des éléments du VHDL
2.6.2.1 Type : tableaux
Exemple
E M . Mellouli 55
2. Présentation des éléments du VHDL
2.6.2.1 Type : tableaux
Exemple
E M . Mellouli 56
2. Présentation des éléments du VHDL
2.6.2.1 Type : tableaux
♦ Opérateurs
E M . Mellouli 57
2. Présentation des éléments du VHDL
2.6.2 Types : composés
Un type enregistrement définit une collection d'éléments (ou de champs) nommés dont
les valeurs peuvent être de types différents. Chaque nom d'élément doit être unique.
♦ Exemples de types non prédéfinis type memory_bus is record
addr : bit_vector(15 downto 0);
data : bit_vector(7 downto 0);
read, write: bit;
enable : boolean;
end record memory_bus;
type complex is record
real_part, imag_part: real;
end record complex;
♦ Accès aux éléments d'un enregistrement
-- soit MB1 et MB2 deux objets de type memory_bus et Z de type complex
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
Z.real_part, Z.imag_part -- nombres réels
Affectation par champs ou globale
MB1:=MB2
MB1.addr:=MB2.addr
E M . Mellouli 58
2. Présentation des éléments du VHDL
2.6.4 Sous-Types
Un sous-type reste compatible avec son type d’origine contrairement à un type
nouvellement créé.
E M . Mellouli 59
2. Présentation des éléments du VHDL
2.6.5 Types prédéfinis
Prédéfinis
E M . Mellouli 60
2. Présentation des éléments du VHDL
2.6.6 Type std_logic
Les types prédéfinis proposés par le langage VHDL initial sont vite devenus
insuffisants dans la plupart des cas.
Il suffit, pour s'en convaincre, d'essayer de décrire à l'aide de signaux de
type bit la porte trois états ci-dessous :
Avec un signal S de type bit pouvant prendre deux valeurs '0' et '1', la
description de cette structure est impossible. Il faut utiliser un type qui
permette au signal S de prendre la valeur 'Z‘ haute impédance.
E M . Mellouli 61
2. Présentation des éléments du VHDL
2.6.6 Type std_logic
L'objectif final étant de pouvoir décrire toutes les structures logiques
possibles. C'est dans cette optique que le type std_logic conforme au
standard IEEE 1164 a été créé.
E M . Mellouli 62
2. Présentation des éléments du VHDL
2.6.7 Fonction de resolution d’un type
Dans l'exemple ci-dessous, on constate que le signal S possède plusieurs
sources. La description VHDL d'une telle structure ne pose pas de difficultés
particulières.
Or, pour qu'une telle description puisse être simulée il faut que le simulateur
sache résoudre les différents cas possibles d'état du signal S.
E M . Mellouli 63
2. Présentation des éléments du VHDL
2.6.7 Fonction de resolution d’un type
Pour permettre au simulateur de résoudre une affectation multiple d'un
signal, le langage VHDL permet à un type d'être résolu, c'est-à-dire
d'énumérer au sein de la description tous les cas possibles d'associations et
les résultats qui en découlent.
E M . Mellouli 64
2. Présentation des éléments du VHDL
2.7 Opérateurs standards
. Remarque : Le VHDL est un langage développé initialement pour la
modélisation et la simulation, par conséquent certains opérateurs sont à
déconseiller en synthèse
. Opérateurs logiques
E M . Mellouli 65
2. Présentation des éléments du VHDL
2.7 Opérateurs standards
. Opérateurs logiques
. Exemple 1
a(0)
c(0)
b(0)
SIGNAL a,b,c : std_logic_vector(1 downto 0);
);
Synthèse
c <= a AND b; a(1)
c(1)
b(1)
. Exemple 2
d
SIGNAL d, e, f, g : bit; e g
g <= (d AND e) AND f;
Synthèse f
E M . Mellouli 66
2. Présentation des éléments du VHDL
2.7 Opérateurs standards
. Opérateurs relationnels Nom Type opérandes Signification
= Egal
Ils permettent de modifier
/= Non égal
l’état d’un signal ou de
signaux suivant le résultat < Entrées : Tout scalaire Inférieur
d’un test ou d’une condition <= Sortie : Boolean Inférieur ou égal
> Supérieur
>= Supérieur ou égal
. Exemple a0
a1
SIGNAL a,b : bit_vector(1 DOWNTO 0); !b0
SIGNAL s : bit; Synthèse a0
IF a > b THEN s <= "1"; !b1 s
!b0
END IF;
a1
!b1
E M . Mellouli 67
2. Présentation des éléments du VHDL
2.7 Opérateurs standards
. Opérateurs de décalages
Nom Type opérandes Signification
. Exemple a1 b0
SIGNAL a,b : BIT_VECTOR(0 TO 3);
... a2 b1
Synthèse
b = a décalé de 1 bit à gauche
b <= a sll 1; --b
... a3 b2
'0' b3
clk
E M . Mellouli 68
2. Présentation des éléments du VHDL
2.7 Opérateurs standards
Opérateurs arithmétiques
B -1 T
C
Use ieee.numeric_std.all ;
Use ieee.std_logic_arith.all ;
E M . Mellouli 70
2. Présentation des éléments du VHDL
2.7 Opérateurs standards
. Opérateur de concaténation
ARCHITETCURE ...
SIGNAL A : BIT_VECTOR(2 DOWNTO 1 );
SIGNAL B : BIT;
SIGNAL C : BIT_VECTOR(5 DOWNTO 0 ); A(1) C(0)
BEGIN
C <= not B & "101" & not A(2 DOWNTO 1); A(2) C(1)
VDD C(2)
GND C(3)
VDD C(4)
« bon » & « jour » produira « bonjour » ;
« 101 » & « 10 » produira « 10110 » B C(5)
E M . Mellouli 71
2. Présentation des éléments du VHDL
2.7 Opérateurs standards
. Opérateur de concaténation
Décalage à droite :
Décalage à gauche :
E M . Mellouli 72
2. Présentation des éléments du VHDL
2.7 Opérateurs standards
• L’affectation simple : <=
Dans une description VHDL, c’est certainement l’opérateur le plus utilisé.
Permet de modifier l’état d’un signal en fonction d’autres signaux et/ou
d’autres opérateurs.
Pour les signaux composés de plusieurs bits on utilise les guillemets " … "
E M . Mellouli 73
2. Présentation des éléments du VHDL
2.7 Opérateurs standards
Exemple:
Library ieee;
Use ieee.std_logic_1164.all;
entity AFFEC is
port (
E1,E2 : in std_logic;
BUS1,BUS2,BUS3 : out std_logic_vector(3 downto 0);
S1,S2,S3,S4 : out std_logic)
end AFFEC;
architecture DESCRIPTION of AFFEC is
begin
S1 <= '1'; -- S1 = 1
S2 <= '0'; -- S2 = 0
S3 <= E1; -- S3 = E1
S4 <= '1' when (E1 ='1') else S4; -- S4 = 1 si E1=1 sinon S4
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 74
2. Présentation des éléments du VHDL
2.8 Attributs
Un attribut est une caractéristique associée à un type ou un objet. Chaque
attribut est référencé par son nom consistant en un préfixe, une apostrophe et
l´attribut lui-même. Le préfixe doit être un type, sous-type, tableau, ou bloc.
E M . Mellouli 75
2. Présentation des éléments du VHDL
2.8 Attributs
. Attributs d'un scalaire
T'left -> Limite gauche de T
T'right -> Limite droite de T
T'low -> Limite basse de T
T'high -> Limite haute de T
. Attributs d'un ensemble discret
T'pos(X) -> Numéro de la position de X dans T
T'val(N) -> Valeur à la position N dans T
T'leftof(X) -> Valeur à une position à gauche de X dans T
T'rightof(X) -> Valeur à une position à droite de X dans T
T'pred(X) -> Valeur à une position au dessous de X dans T
T'succ(X) -> Valeur à une position au dessus de X dans T
E M . Mellouli 76
2. Présentation des éléments du VHDL
2.8 Attributs
. Exemples - Attributs d'un scalaire
Type adr is integer range 7 downto 0;
adr ’left = 7
adr ’right = 0
adr ’low = 0
adr ’high = 7
MVL4'pos(‘ 1 ’) = 2
MVL4'val(0) = ‘ U ’
MVL4 ’rightof(‘ 1 ’) = ‘ Z ’
MVL4 ’leftof(‘ 1 ’) = ‘ 0 ’
MVL4 ’succ(2) = ‘ Z ’ //Valeur au dessus de 2 dans MVL4
MVL4 ’succ(‘1’) = ‘ Z ’
MVL4 ’prec(2) = ‘ 0 ’ // Valeur au dessous de 2 dans MVL4
E M . Mellouli 77
2. Présentation des éléments du VHDL
2.8 Attributs
. Attributs d'un tableau
A'left(N) -> Limite gauche de l'intervalle des indices de la dim. N de A
A'right(N) -> Limite droite de l'intervalle des indices de la dim. N de A
A'low(N) -> Limite basse de l'intervalle des indices de la dim. N de A
A'highof(N) -> Limite haute de l'intervalle des indices de la dim. N de A
A'range(N) -> Intervalle des indices de la dim. N de A
A'reverse_range(N) -> Intervalle inverse des indices de la dim. N de A
A'length(N) -> Longueur de l'intervalle des indices de la dim. N de A
E M . Mellouli 78
2. Présentation des éléments du VHDL
2.8 Attributs
. Exemples : Attributs d'un tableau
E M . Mellouli 79
2. Présentation des éléments du VHDL
2.8 Attributs
Attributs de signal
Pour cette catégorie d’attribut, le préfixe doit être un signal. Le type du
résultat peut être signal ou fonction.
• Objets signaux implicites:
S'delayed (T) Signal ayant même valeur que S mais retardé de
T unités de temps (T ≥ 0 ns)
S'stable(T) Signal de type boolean valant TRUE si aucun
événement n'est arrivé sur S durant T unités
de temps (T ≥ 0 ns), et FALSE sinon
• Fonctions:
S'event Fonction à valeur de type boolean valant TRUE
si un événement est arrivé sur S durant le cycle
de simulation courant, et FALSE sinon
S'last_event Fonction à valeur de type time valant le temps
écoulé depuis le dernier événement sur S
S'last_value Fonction à valeur du type de S valant la valeur
de S avant le dernier événement sur S
E M . Mellouli 80
2. Présentation des éléments du VHDL
2.8 Attributs
Attributs de signal
S’active :
• boolean
• true si il y a eu une transaction (affectation) sur le signal dans le
cycle de simulation en cours
S’quiet(T) :
• boolean
• true si le signal a eu ni transaction ni événement pendant un temps T
S’last_active :
• time
• rend le temps écoulé depuis la dernière transaction
E M . Mellouli 81
2. Présentation des éléments du VHDL
2.8 Attributs
Utilisation des attributs de signaux :
détection d'un front montant :
E M . Mellouli 82
2. Présentation des éléments du VHDL
2.9 Exécution parallèle et séquentielle
. Particularisme du VHDL : Exécution parallèle ou séquentielle
. Exécution parallèle
. 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
. Chaque opération dans une architecture est exécutée à chaque instant
. 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.
. Les instructions sont exécutées séquentiellement
. Les modifications des signaux (signal) sont effectives à la fin du process
E M . Mellouli 83
2. Présentation des éléments du VHDL
2.9 Exécution parallèle et séquentielle
. Exécution mixte
. Possibilité d'associer dans une même architecture des modules à exécution
parallèle et séquentielle
. 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);
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) b Comparateur qs
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 84
2. Présentation des éléments du VHDL
2.10 Instructions
. Deux types d'exécution : Deux familles d'instructions
I1
I1 I2 I3
I2
E M . Mellouli 85
2.10 Instructions
2.10.1 Instructions de type parallèle
. Assignation inconditionnelle
signal <= expression
. Assignation conditionnelle
signal <= {expression WHEN condition} ELSE expression
E M . Mellouli 86
2.10 Instructions
2.10.1 Instructions de type parallèle
. Assignation inconditionnelle
signal <= expression
. Assignation conditionnelle
signal <= {expression WHEN condition} ELSE expression
Exercice1:
Donner le programme (entité plus l’architecture ) du circuit ci-dessous
en utilisant l’assignation conditionnelle suivante:
signal <= {expression WHEN condition} ELSE expression
E M . Mellouli 87
2.10 Instructions
2.10.1 Instructions de type parallèle
. Assignation inconditionnelle
signal <= expression
. Assignation conditionnelle
signal <= {expression WHEN condition} ELSE expression
Exercice2 :
Donner le programme (entité plus l’architecture ) du circuit ci-dessous
en utilisant l’assignation conditionnelle suivante:
signal <= {expression WHEN condition} ELSE expression
E M . Mellouli 88
2.10 Instructions
2.10.1 Instructions de type parallèle
. Assignation sélective
E M . Mellouli 89
2.10 Instructions
2.10.1 Instructions de type parallèle
. Assignation d'un composant
label : nom_du_composant PORT MAP (association des ports)
ARCHITECTURE arch_full OF full_adder IS
SIGNAL inter : bit;
COMPONENT half_adder PORT (a,b,cin : IN bit;
cout,s : OUT bit);
END COMPONENT;
BEGIN
u1 : half_adder PORT MAP (a=>a(0),b=>b(0),cin=>cin,cout=>inter,s=>s(0));
u2 : half_adder PORT MAP (a(1),b(1),inter, cout,s(1));
END arch_full;
E M . Mellouli 90
2.10 Instructions
2.10.1 Instructions de type parallèle
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
vérifiée..
. Instruction GENERATE
Structure répétitive
label : FOR variable_boucle IN val_initiale TO val_finale GENERATE
{instructions parallèles}
END GENERATE label
Structure conditionnelle
label : IF condition GENERATE
{instructions parallèles}
END GENERATE label
Notez que :
• le ELSE n'existe pas (oubli de VHDL ?) et qu'il faut refaire un 2ème IF
IF..
• Les deux instructions IF GENERATE et FOR GENERATE ont besoin obligatoirement d'une
étiquette
E M . Mellouli 91
2.10 Instructions
2.10.1 Instructions de type parallèle
Instanciation de multiples composants: Instruction GENERATE
Exemple:
E M . Mellouli 92
2.10 Instructions
2.10.1 Instructions de type parallèle
. Instruction PROCESS
E M . Mellouli 93
2.10 Instructions
2.10.1 Instructions de type parallèle
. Instruction PROCESS
Phrases wait:
wait on A, B; -- changement de A ou B
wait for délai; -- une certaine durée
wait until condition;
wait on ListeDeSignaux until condition
N.B : L'instruction WAIT n'est pas synthétisable avec la condition de durée.
Elle est très utile pour les testbench pour la simulation.
E M . Mellouli 94
2.10 Instructions
2.10.1 Instructions de type parallèle
. Instruction PROCESS
E M . Mellouli 95
2.10 Instructions
2.10.1 Instructions de type parallèle
. Instruction PROCESS
E M . Mellouli 96
2.10 Instructions
2.10.1 Instructions de type parallèle
Exemple avec des variables:
entity toto is
end toto;
architecture var of toto is
signal trigger, sum : integer := 0;
begin
process
variable var1 : integer := 1;
variable var2 : integer := 2;
variable var3 : integer := 3;
begin
wait on trigger;
var1 := var2 + var3;
var2 := var1;
var3 := var2;
sum <= var1 + var2 + var3;
end process;
end var;
Si trigger change à t=10, alors var1=5, var2=5, var3=5 et à t=10+D, sum=15
E M . Mellouli 97
2.10 Instructions
2.10.1 Instructions de type parallèle
Exemple avec des signaux:
entity toto is
end toto;
architecture var of toto is
signal trigger, sum : integer := 0;
signal sig1 : integer := 1;
signal sig2 : integer := 2;
signal sig3 : integer := 3;
begin
process
begin
wait on trigger;
sig1 <= sig2 + sig3;
sig2 <= sig1;
sig3 <= sig2;
sum <= sig1 + sig2 + sig3;
end process;
end var;
Si trigger change à t=10, tous les signaux sont mis à jour à t=10+D :
sig1=5, sig2=1, sig3=2 et sum=6
E M . Mellouli 98
2.10 Instructions
2.10.1 Instructions de type parallèle
E M . Mellouli 99
2.10 Instructions
2.10.1 Instructions de type parallèle
Un port de sortie ne peut être utilisé que comme destination
d’une expression. Exemple:
entity nonet is
port (a, b : in bit;
z, zbarre : out bit);
end nonet;
architecture fausse of nonet is
begin
z <= a and b;
zbarre <= not z;
end fausse;
architecture correcte of nonet is
signal resultat : bit;
begin
resultat <= a and b;
z <= resultat;
zbarre <= not resultat;
end correcte;
E M . Mellouli 100
2.10 Instructions
2.10.2 Instructions de type séquentiel
. Ces instructions sont uniquement utilisées dans un Process
. Assignation inconditionnelle de variables et de signaux
Même traitement que pour le mode parallèle
. Instruction IF
IF condition THEN
IF up_down = "1" THEN
instructions_sequentielles s <= s + 1;
ELSIF condition THEN ELSE
instructions_sequentielles s <= s - 1;
END IF;
ELSE instructions_sequentielles
END IF;
E M . Mellouli 101
2.10 Instructions
2.10.2 Instructions de type séquentiel
. Ces instructions sont uniquement utilisées dans un Process
. Assignation inconditionnelle de variables et de signaux
. Instruction IF
IF condition THEN
instructions_sequentielles
ELSIF condition THEN
instructions_sequentielles
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 102
2.10 Instructions
2.10.2 Instructions de type séquentiel
. Instruction CASE
CASE expresssion is
{WHEN valeur_expression => instructions_sequentielles};
{WHEN OTHERS => instructions_sequentielles};
END CASE;
CASE selection IS
WHEN '0' => s <= a;
WHEN '1' => s <= b;
WHEN OTHERS => NULL;
. Instruction LOOP END CASE;
instruction_pour_iteration LOOP
instructions_sequentielles
END LOOP;
VARIABLE indice,resultat : INTEGER := 0;
VARIABLE indice,resultat : INTEGER;
Boucle1 : WHILE indice < 10 LOOP
Boucle2 : FOR indice IN 0 TO 9 LOOP
indice := indice + 1;
resultat := resultat + adresse(indice);
resultat := resultat + adresse(indice);
END LOOP boucle2;
END LOOP boucle1;
E M . Mellouli 103
2.10 Instructions
2.10.2 Instructions de type séquentiel
. Instruction NEXT
NEXT label_boucle WHEN condition
. Instruction EXIT
EXIT label_boucle WHEN condition
E M . Mellouli 104
2.10 Instructions
2.10.2 Instructions de type séquentiel
. Instruction NULL
Instruction sans aucun effet
CASE commande_moteur IS
WHEN avant => marche_avant;
WHEN arriere => marche_arriere;
WHEN statuquo => NULL;
END CASE;
. Instruction ASSERT
Vérification d'une condition spécifique
Information d'une éventuelle violation de cette condition
ASSERT condition REPORT message SEVERITY {note/warning/error/Failure}
PROCESS(clk)
BEGIN IF clk='1' THEN
ASSERT d'STABLE(15 ns);
REPORT "setup non respecté" SEVERITY warning;
…
END IF;
END PROCESS;
E M . Mellouli 105
2.10 Instructions
2.10.3 Exemples
. Multiplexeur 8 bits : 4 vers 1
1ère phase : définition des entrée/sorties (ENTITY)
Multiplexeur 8 bits
Entrées Sorties
4 vers 1
8
Entree1
8
Entree2 Multiplexeur 8 bits 8
8 Sortie
Entree3 4 vers 1
8
Entree4
Sel1 Sel2
E M . Mellouli 106
2.10 Instructions
2.10.3 Exemples
. Multiplexeur 8 bits : 4 vers 1
2ème phase : définition du fonctionnement ou de la structure
(ARCHITECTURE)
- Solution 1 : Instruction IF
Entree1 8
Entree2 8 Multiplexeur 8 bits 8 Sortie
Entree3 8 4 vers 1
Entree4 8
Sel1 Sel2
E M . Mellouli 107
2.10 Instructions
2.10.3 Exemples
. Multiplexeur 8 bits : 4 vers 1
- Solution 1 : Instruction IF
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY mux41 IS
PORT(entree1,entree2,entree3,entree4: IN std_logic_vector(7 DOWNTO 0);
sel: IN std_logic_vector(0 to 1);
sortie : OUT std_logic_vector(7 DOWNTO 0));
END mux41;
ARCHITECTURE comportementale OF mux41 IS
BEGIN
PROCESS(sel)
BEGIN
IF (sel="00") THEN sortie<=entree1;
ELSE IF (sel="01") THEN sortie<=entree2;END IF;
ELSE IF (sel="10") THEN sortie<=entree3;END IF;
ELSE sortie<=entree4;END IF;
END PROCESS;
END comportemental;
E M . Mellouli 108
2.10 Instructions
2.10.3 Exemples
. Multiplexeur 8 bits : 4 vers 1
- Solution 2 : Instruction CASE
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY mux41 IS
PORT(entree1,entree2,entree3,entree4: IN std_logic_vector(0 TO 7);
sel: IN std_logic_vector(0 to 1);
sortie : OUT std_logic_vector(7 DOWNTO 0));
END mux41;
ARCHITECTURE comportementale OF mux41 IS
BEGIN
PROCESS(sel)
BEGIN
CASE sel IS
WHEN "00" => sortie<=entree1;
WHEN "01" => sortie<=entree2;
WHEN "10" => sortie<=entree3;
WHEN OTHERS => sortie<=entree4;
END CASE;
END PROCESS
END comportementale;
E M . Mellouli 109
2. Présentation des éléments du VHDL
2.11 Description hiérarchique
. Descriptions plus simples
. Rapidité de simulation et donc rapidité de mise au point
. Réutilisation de sous-ensembles
. Concepts : COMPONENT, GENERIC, PACKAGE,
PROCEDURE ET FONCTION
LIBRARY, CONFIGURATION
E M . Mellouli 110
2.11 Description hiérarchique
2.11.1 Description hiérarchique : Component
. Description structurelle
. Utilisation de composants
2 phases : - Déclaration
- Instanciation
Déclaration
La syntaxe est presque identique à celle de l'entité :
component AND_2
port (
a : in bit;
b : in bit;
s : out bit);
end component;
E M . Mellouli 111
2.11 Description hiérarchique
2.11.1 Description hiérarchique : Component
Instanciation :
L'instanciation d'un composant se fait dans le corps de l'architecture de cette
façon :
NOM_INSTANCE : NOM_COMPOSANT port map (LISTE DES CONNEXIONS);
E M . Mellouli 112
2.11 Description hiérarchique
2.11.1 Description hiérarchique : Component
Dans cet exemple , 2 instances de composant "and2" sont appelées
pour créer une porte ET à 3 entrées.
E M . Mellouli 113
2.11 Description hiérarchique
2.11.1 Description hiérarchique : Component
Adder2.vhd
Exemple additionneur
ENTITY full_adder IS
PORT(
ENTITY full_adder IS
a,b : IN bit_vector(1 DOWNTO 0);
PORT(
cin : IN bit;
a,b : IN bit_vector(1 DOWNTO 0);
cout : OUT bit;
cin : IN bit;
Adder1.vhd s : out bit_vector(1 DOWNTO 0));
cout : OUT bit;
END full_adder
s : out bit_vector(1 DOWNTO 0));
ARCHITECTURE arch_full OF full_adder IS
ENTITY add1bit IS END full_adder
SIGNAL inter : bit;
PORT( a,b,cin : IN bit;
COMPONENT add1bit
cout,s : OUT bit); ARCHITECTURE arch_full OF full_adder IS
PORT (a,b,cin : IN bit;
END add1bit; SIGNAL inter : bit;
cout,s : OUT bit);
COMPONENT half_adder PORT (a,b,cin : IN bit;
END COMPONENT;
ARCHITECTURE arch_half OF add1bit IS cout,s : OUT bit);
BEGIN
BEGIN END COMPONENT;
u1: add1bit PORT MAP
s <= a XOR b XOR cin; BEGIN
(a(0),b(0),cin,inter,s(0));
cout <= (a AND b) OR (a AND cin) u1:half_adder PORT MAP
u2: add1bit PORT MAP
OR (b AND cin); (a(0),b(0),cin,inter,s(0));
(a(1),b(1),inter, cout,s(1));
END arch_half; u2:half_adder PORT MAP (a(1),b(1),inter,s(1));
END arch_full;
END arch_full;
E M . Mellouli 114
2.11 Description hiérarchique
2.11.1 Description hiérarchique : Component
En résumé :
Trois opérations sont nécessaires :
- Le couple entité-architecture du sous-ensemble doit être créé et annexé à
une librairie de l’utilisateur, par défaut la librairie « work ».
- Le sous-ensemble précédent doit être déclaré comme composant dans
l’ensemble qui l’utilise, cette déclaration reprend les éléments principaux
de l’entité du sous-ensemble.
- Chaque exemplaire du composant que l’on souhaite inclure dans le
schéma en cours d’élaboration doit être connecté aux équipotentielles de
ce schéma, c’est le mécanisme de l’instanciation.
E M . Mellouli 115
2.11 Description hiérarchique
2.11.2 Description hiérarchique : Généricité
. Possibilité d'utiliser un même objet plusieurs fois avec des tailles différentes
. La clause generic map dans l'instanciation du composant ADD permet de fixer
la valeur du paramètre.
. Possibilité d'instancier des entités/architectures fonctionnellement
identiques mais de taille différente
ENTITY adder is
.Déclaration d'un GENERIC (largeur : integer :=8); -- valeur par défaut
additionneur PORT( a,b: IN signed_vector(largeur-1 DOWNTO 0);
s : OUT signed_vector(largeur DOWNTO 0);
END adder;
E M . Mellouli 117
2.11 Description hiérarchique
2.11.2 Description hiérarchique : Généricité
E M . Mellouli 118
2.11 Description hiérarchique
2.11.2 Description hiérarchique : Généricité
Autre exemple : additionneur structurelle générique :
E M . Mellouli 119
2.11 Description hiérarchique
2.11.2 Description hiérarchique : Généricité
On dispose de l’entité Add et son architecture :
entity Add is architecture structurelle of AdditionneurN is
port ( component Add
A, B, Cin : in std_logic; port (
S, Cout : out std_logic); A, B, Cin : in std_logic;
end Add ; S, Cout : out std_logic);
L’entité Additionneur end component;
signal C : std_logic_vector(0 to N);
générique s’écrit :
begin
entity AdditionneurN is label: for I in 0 to N-1 generate
generic (N : Natural := 8); Instance : Add port map (X(I), Y(I), C(I),
port ( S(I), C(i+1));
X, Y : in std_logic_vector ( N-1 downto 0); end generate label;
Cin : in std_logic; C(0) <= Cin;
S : out std_logic_vector (N-1 downto 0); Cout <= C(N);
Cout : out std_logic); end structurelle ;
end AdditionneurN ;
E M . Mellouli 120
2.11 Description hiérarchique
2.11.2 Description hiérarchique : Généricité
Exercice:: Donner le programme (Entité et Architecture) du circuit ci-
Exercice ci-
dessous en utilisant l’assignation d’un composant port map.
map.
E M . Mellouli 121
2.11 Description hiérarchique
2.11.3 Description hiérarchique : Package
. Regroupement d'objets divers :
- types
- sous-types
- constantes
- sous-programmes
- composants, …
LIBRARY librairie1
USE librairie1.mon_package.all
std1164.vhd std_logic_1164 ieee Standard for describing interconnection data types for
std1164b.vhd VHDL modeling, and the STD_LOGIC and STD_LOGIC
_VECTOR types.
Exemple:
type byte is array (7 downto 0) of std_logic;
•••
procedure ByteToInteger (ib: in byte; oi: out
integer) is
variable result : integer := 0;
begin
for i in 0 to 7 loop
if ib(i) = '1' then
result := result + 2**i;
end if;
end loop;
oi := result;
end ByteToInteger;
E M . Mellouli 125
2.11 Description hiérarchique
2.11.4 Description hiérarchique : Fonctions
Tous les paramètres d’une fonction sont de mode in: en dehors de ses
variables locales, une fonction ne peut modifier que la valeur retournée.
En plus, les paramètres ne peuvent pas être de type variable: ils ne
peuvent être que des constantes ou des signaux
Exemple
function f (a, b, c : std_logic) return std_logic is
variable x : std_logic;
begin
x := ((not a) and (not b) and c);
return x;
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 126
Fonction de calcul de minimum
et maximum en procédure.
procedure MinMax( a,b : in unigned (7 downto 0);
min : out unsigned(7 downto 0);
max : out unsigned(7 downto 0)) is Il faut 2
begin fonctions min et max pour avoir
if (a < b) then l'équivalent en fonction. Voici
min <= a; max <= b; l'exemple de min :
else
min <= b; max <= a; function min (a,b : unsigned(7 downto 0)
end if; return unsigned(7 downto 0) is
end procedure MinMax; varaiable min : unsigned(7 downto0);
begin
MinMax(x, y, z, t); if (a < b) then
min := a;
else
min := b;
end if;
return min;
endfunction
...
z := min(x, y);
E M . Mellouli 127
2.11 Description hiérarchique
2.11.5 Description hiérarchique : Library
Une librairie est une collection de modules VHDL qui ont déjà été compilés. Ces
modules peuvent être des paquetages, des entités ou des architectures.
. 2 types de bibliothèque
. Bibliothèque de l'utilisateur (user library)
. Bibliothèque système
E M . Mellouli 128
2.11 Description hiérarchique
2.11.5 Description hiérarchique : Library
Les librairies
Facilite la tâche du concepteur
Rajout de fonctionnalités supplémentaires
La librairie IEEE
A mettre au début de votre description
Pour rajouter les types étendues std_logic et std_logic_vector
use IEEE.STD_LOGIC_1164.all;
DORENAVANT nous remplacerons SYSTEMATIQUEMENT
BIT par STD_LOGIC
BIT_VECTOR par STD_LOGIC_VECTOR
Pour utiliser des fonctions arithmétiques sur ces STD_LOGIC_VECTOR
USE IEEE.NUMERIC_STD.ALL;
Et aussi USE IEEE.std_logic_arith.all;
• Q<=Q+1; -- Q étant par exemple un std_logic_vector et 1 est un entier!!
• A<B -- A et B des std_logic_vector
E M . Mellouli 129
Complément sur les opérations arithmétiques
Le rajout de use IEEE.numeric_std.all;
IEEE.numeric_std.all permet de:
De travailler avec des valeurs signées et non signées
• signal A,B: signed(3 downto 0);
• B<=unsigned(RES);
E M . Mellouli 130
2.11 Description hiérarchique
2.11.5 Description hiérarchique : Library
. 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
E M . Mellouli 131
2.11 Description hiérarchique
Exercice:
1) Ecrire la table de vérité pour un afficheur 7 segments cathode commune ('1' pour
allumer)
2) Réaliser le programme VHDL complet du transcodeur
E M . Mellouli 132
2.11 Description hiérarchique
Solution:
1) la table de vérité pour un afficheur 7 segments cathode commune
E M . Mellouli 133
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 134