Académique Documents
Professionnel Documents
Culture Documents
ENSAF
3
Présenté par: Pr. El Mehdi MELLOULI
E M . Mellouli
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é
E M . Mellouli 12
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
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
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.
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)
E M . Mellouli 33 E M . Mellouli 31
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
E M . Mellouli 37 E M . Mellouli 35
E M . Mellouli 41 E M . Mellouli 39
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
♦ 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
E M . Mellouli 49 E M . Mellouli 47
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
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
'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
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
E M . Mellouli 68 E M . Mellouli 66
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
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
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
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
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
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
. 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
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
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
• B<=unsigned(RES);
USE WORK.operateur_arithmetique.ALL
E M . Mellouli 111