Introduction à:
VHDL
Very High-Speed Integrated Circuit
Hardware Description Language
The Very High Speed Integrated Circuit (VHSIC) Program : était
un programme de recherche du département de la Défense (DOD) des
États-Unis de 1980 à 1990. Sa mission était de développer des circuits
électroniques intégrés à très haute vitesse.
Introduction
❑ Permettre le développement rapide de solutions numériques.
❑ Utiliser n’importe quel outil de synthèse.
❑ VHDL est utilisé pour :
§ Simuler un circuit (testbench)
§ Synthétiser des descriptions matérielles
❑ La synthèse correspond à la réduction d’une description matérielle à
un niveau plus-bas (netlist – liste de signaux ou d’équations)
❑ Fournir des constructions de description du matériel de haut-niveau.
❑ Description matérielle qui ne dépend pas de la cible : portabilité
❑ Le matériel est un abus de langage : nous entendons par matériel ce
qui est décrit par des équations logiques et implanté dans un PLD
MSEI – Département GE – BABA (2024-25) 2 Modifié le 05 Mars. 2025
Conception VHDL
❑ En VHDL, tout circuit est décrit par un couple de design
units: ENTITY et ARCHITECTURE
§ ENTITY: déclaration qui décrit les I/O du circuit,
§ ARCHITECTURE: corps qui décrit l’architecture du circuit.
01. ENTITY design IS PORT (
02. a,b: IN std_logic;
03. sum,carry: OUT std_logic
04. );
05. END design;
06. ARCHITECTURE arch OF design IS design
07. BEGIN
08. sum <= a XOR b;
09. carry <= a AND b;
10. END arch;
MSEI – Département GE – BABA (2024-25) 3 Modifié le 05 Mars. 2025
Déclaration de Entity
01. ENTITY mon_entité IS
02. GENERIC (…) ; -- option
03. PORT (
04. nom_signal : mode type ;
05. ...
06. ) ;
07. END mon_entité;
❑ mon_entité : un nom arbitraire
❑ generic : utilisé pour définir des composants paramétrés
❑ nom_signal : l’identifiant du port/signal
❑ mode : décrit la direction du flux de données
❑ type : indique l’ensemble de valeurs que mon_signal peut prendre
MSEI – Département GE – BABA (2024-25) 4 Modifié le 05 Mars. 2025
Ports et modes
❑ Les PORTS sont des points de communication, souvent sont associés
avec les broches du composant programmable.
❑ Un MODE décrit la circulation des données dans un port :
§ IN les données ne peuvent qu’entrer dans
ENTITY
§ OUT les données ne peuvent que sortir de ENTITY
§ INOUT les données sont bidirectionnelles (circulation
dans les 2 sens)
§ BUFFER les données sortent de ENTITY, mais aussi
Elles sont renvoyées à l’intérieur de ENTITY
MSEI – Département GE – BABA (2024-25) 5 Modifié le 05 Mars. 2025
IEEE 1164
❑ C’est un paquetage créé pour aider les utilisateurs
❑ Donne une certaine flexibilité pour écrire le code, simuler ou
synthétiser son design
❑ 02 types logiques utilisés : std_logic et std_logic_vect
❑ 09 valeurs possibles, mais seulement 06 sont synthétisables :
'0' niveau 0 fort
'1' niveau 1 fort
'Z' haute impédance
'L' niveau 0 faible
'H' niveau 1 faible
'-' indifférent
MSEI – Département GE – BABA (2024-25) 6 Modifié le 05 Mars. 2025
Exemple de déclaration de ENTITY
01. LIBRARY ieee;
02. USE ieee.std_logic_1164.ALL;
03.
04. ENTITY boite_noire IS PORT (
05. clk, rst: IN std_logic;
06. d: IN std_logic_vector(7 DOWNTO 0);
07. q: OUT std_logic_vector(7 DOWNTO 0);
08. co: OUT std_logic);
09. END boite_noire;
Boite_noire
rst
q[7:0]
d[7:0]
co
clk
MSEI – Département GE – BABA (2024-25) 7 Modifié le 05 Mars. 2025
Exercice #1 : ENTITY
❑ Écrire une déclaration d’une entité avec :
§ Port D : un bus 12-bit, entrée seulement
§ Port OE et CLK : des entrées, 1 seul bit
§ Port AD : un bus 12-bit, à trois états bidirectionnels
§ Port A : un bus 12-bit, sortie seulement
§ Port INT : une sortie à trois états
§ Port AS : une sortie mon_design
d[11:0] ad[11:0]
oe a[11:0]
clk int
as
MSEI – Département GE – BABA (2024-25) 8 Modifié le 05 Mars. 2025
Exercice #1 : Solution
01. LIBRARY ieee;
02. USE ieee.std_logic_1164.ALL;
03. USE ieee.numeric_std.ALL;
04.
05. ENTITY mon_design IS
06. GENERIC (N: NATURAL := 12);
07. PORT (
08. d: IN std_logic_vector(N-1 DOWNTO 0);
09. oe,clk:IN std_logic;
10. ad: INOUT std_logic_vector(N-1 DOWNTO 0);
11. a: OUT std_logic_vector(N-1 DOWNTO 0);
12. int: OUT std_logic;
13. as: BUFFER std_logic); mon_design
14. END mon_design;
d[11:0] ad[11:0]
oe a[11:0]
-- Dans cette présentation, les mots int
clk
-- clés VHDL sont en : gras, CAPITAL ; as
-- cependant, VHDL n’est pas sensible
-- à la casse :
-- clock, Clock, CLOCK font référence au même signal,
-- signale le début d’un commentaire
MSEI – Département GE – BABA (2024-25) 9 Modifié le 05 Mars. 2025
ARCHITECTURE
❑ L’architecture décrit ce que la boite noire contient
❑ Cette description peut combiner :
§ Une description structurelle
- Description du circuit : block logique par block logique
comme dans un schéma logique.
- Un block logique est appelé aussi composant (component)
§ Une description comportementale/Dataflow
- Description algorithmique (haut-niveau) :
IF a = b THEN state <= IDLE;
- Équations booliennes (flux de données) :
x <= (a OR b) AND c;
MSEI – Département GE – BABA (2024-25) 10 Modifié le 05 Mars. 2025
Déclaration d’une architecture
01. ARCHITECTURE mon_arch OF mon_design IS
02. -- déclaration de signaux (option), etc.
03. BEGIN
04. -- instructions VHDL
05. END mon_arch;
❑ mon_design : le nom de l’entité à décrire
❑ mon_arch : un nom arbitraire donné à l’architecture
❑ la déclaration des signaux : utilisée pour définir un signal local
❑ instructions : décrient la fonction ou le contenu de l’entité
MSEI – Département GE – BABA (2024-25) 11 Modifié le 05 Mars. 2025
Exemple #1 : Déclaration de Architecture Comportementale
01. ENTITY compare4bits IS PORT (
02. a, b: IN std_logic_vector (0 TO 3);
03. F: OUT std_logic);
04. END compare4bits;
05.
06. ARCHITECTURE comportement OF compare4bits IS
07. BEGIN
08. compares: PROCESS (a, b)
09. BEGIN
10. IF a = b THEN F <= '1';
11. ELSE F <= '0';
12. END IF;
13. END PROCESS compares;
14. END comportement;
MSEI – Département GE – BABA (2024-25) 12 Modifié le 05 Mars. 2025
Exemple #2 : Déclaration d’une Architecture Structurelle
A0 x0
01. ENTITY compare4bits IS PORT ( B0
02. a: IN std_logic_vector(0 TO 3); A1 x1
03. b: IN std_logic_vector(0 TO 3); B1 F
04. F: OUT std_logic); A2 x2
05. END compare4bits; B2
06. A3 x3
07. USE [Link] ; B3
08.
09. ARCHITECTURE structure OF compare4bits IS
10. SIGNAL x: std_logic_vector (0 to 3);
11. BEGIN
12. u0: xnor2 PORT MAP (a(0),b(0),x(0)) ;
13. u1: xnor2 PORT MAP (a(1),b(1),x(1)) ;
14. u2: xnor2 PORT MAP (a(2),b(2),x(2)) ;
15. u3: xnor2 PORT MAP (a(3),b(3),x(3)) ;
16. u4: and4 PORT MAP (x(0),x(1),x(2),x(3),F);
17. END structure;
MSEI – Département GE – BABA (2024-25) 13 Modifié le 05 Mars. 2025
Exemple #3 : Déclaration d’une Architecture mixte
❑ Les styles de déclaration d’une architecture peuvent être combinés :
01. ENTITY logic IS PORT ( a LOGIC
02. a,b,c: IN std_logic; d
b
03. F: OUT std_logic);
04. END logic; g1
F
05. c
06. USE [Link];
07.
08. ARCHITECTURE arch_logic OF logic IS
09. SIGNAL d: std_logic;
10. BEGIN
11. d <= a AND b; -- Comportementale/Dataflow
12. g1: nor2 PORT MAP (c, d, F); -- Structurelle
13. END arch_logic;
MSEI – Département GE – BABA (2024-25) 14 Modifié le 05 Mars. 2025
Instructions VHDL
❑ Il y a deux types d’instructions (statements) :
§ Séquentielles
- Une série d’instructions l’une après l’autre
- Elles sont groupées dans un PROCESS
§ Concurrentes
- Les instructions en dors de l’instruction PROCESS sont
concurrentes durant la simulation
- Les instructions PROCESS sont concurrentes
MSEI – Département GE – BABA (2024-25) 15 Modifié le 05 Mars. 2025
Instructions concurrentes en VHDL
❑ Les instructions concurrentes incluent :
§ Équations booliennes
§ Assignations conditionnelles/sélectives d’un signal
(WHEN-ELSE, WITH-SELECT)
§ Instanciations
❑ Exemples :
-- Exemple d’équation boolienne
x <= (a AND (NOT c)) OR (b AND c);
-- Exemple d’assignation conditionnelle
y <= d WHEN (s = '1') ELSE c;
-- Exemple d’instanciation
instance: nand2 PORT MAP (h, g, f);
MSEI – Département GE – BABA (2024-25) 16 Modifié le 05 Mars. 2025
Instruction PROCESS
01. mon_process: PROCESS (liste de sensitivité)
02. -- déclaration de variables locales
03. BEGIN
04. -- instructions séquentielles
05. END PROCESS mon_process;
❑ mon_process : optionnel
❑ L’ordre des signaux dans la liste de sensibilité n’est pas important
❑ PROCESS est exécuté une fois un signal dans la liste de sensitivité
change de valeur.
❑ Les affectations de signaux se produisent après l’instruction END
PROCESS
MSEI – Département GE – BABA (2024-25) 17 Modifié le 05 Mars. 2025
Logique combinatoire
❑ Elle peut être décrite par des instructions concurrentes :
§ WHEN-ELSE,
§ WITH-SELECT-WHEN,
§ Équations booliennes,
§ Instanciation de composants.
❑ Elle peut être décrite aussi par des instructions séquentielles :
§ IF-THEN-ELSE,
§ CASE-WHEN.
-- Les instructions séquentielles sont groupées
-- dans des PROCESS
-- Les PROCESS sont concurrents entre eux
-- L’ordre des instructions séquentielles est
-- important
MSEI – Département GE – BABA (2024-25) 18 Modifié le 05 Mars. 2025
Logique combinatoire avec : WHEN-ELSE
❑ Un signal se voit affecter une valeur sur des conditions
❑ L’ordre d’apparition définit la priorité
❑ Utiliser la clause ELSE vers la fin pour éviter un latch
❑ Utiliser une seule fois l’opérateur d’affectation <= s
❑ Le cas du multiplexeur 4-1 : 2
01. x <= a WHEN (s = “00”) ELSE a
02. b WHEN (s = “01”) ELSE b x
03. c WHEN (s = “10”) ELSE c mux
04. d ; d
MSEI – Département GE – BABA (2024-25) 19 Modifié le 05 Mars. 2025
Logique combinatoire avec : WITH-SELECT-WHEN
❑ L’affectation est basée sur un signal de sélection
❑ Les clauses WHEN doivent être mutuellement exclusives
❑ Utiliser WHEN OTHERS pour éviter un verrou (latch)
❑ Utiliser une seule fois l’opérateur d’affectation <=
❑ Le cas du multiplexeur 4-1 :
01. WITH s SELECT
02. x <= a WHEN “00”,
03. b WHEN “01”,
04. c WHEN “10”,
05. d WHEN OTHERS;
MSEI – Département GE – BABA (2024-25) 20 Modifié le 05 Mars. 2025
Logique combinatoire avec : IF-THEN-ELSE
❑ Utilisée pour choisir un ensemble d’instructions à exécuter
❑ Choix basé sur l’évaluation d’une ou plusieurs conditions booliennes
❑ Le cas du multiplexeur 4-1 :
01. mux4_1: PROCESS (a, b, c, d, s)
02. BEGIN
03. IF s = “00” THEN x <= a;
04. ELSIF s = “01” THEN x <= b;
05. ELSIF s = “10” THEN x <= c;
06. ELSE x <= d;
07. END IF;
08. END PROCESS mux4_1;
-- Absence de ELSE engendre une mémoire implicite
MSEI – Département GE – BABA (2024-25) 21 Modifié le 05 Mars. 2025
Logique combinatoire avec : CASE-WHEN
❑ Le cas du multiplexeur 4-1 :
01. ARCHITECTURE archdesign OF design IS
02. SIGNAL s: std_logic_vector(0 TO 1);
03. BEGIN
04. mux4_1: PROCESS (a,b,c,d,s)
05. BEGIN
06. CASE s IS
07. WHEN "00" => x <= a;
08. WHEN "01" => x <= b;
09. WHEN "10” => x <= c;
10. WHEN OTHERS => x <= d;
11. END CASE;
12. END PROCESS mux4_1;
13. END archdesign;
-- CASE-WHEN est en quelque sorte la contrepartie
-- séquentielle de WITH-SELECT-WHEN
MSEI – Département GE – BABA (2024-25) 22 Modifié le 05 Mars. 2025
Instructions séquentielles : Exemple
❑ Dans PROCESS on y trouve des instructions de logique combinatoire et
aussi de logique séquentielle (registres)
01. PROCESS
02. BEGIN
03. -- WAIT implique une liste a b c
04. -- de sensitivité
05. WAIT UNTIL clock = '1';
06. b <= a;
07. c <= b; clock
08. END PROCESS;
❑ L’affectation n’est pas effective immédiatement : les signaux sont
(scheduled) mis à jour en arrivant à l’instruction END PROCESS
❑ Ceci engendre la synthèse de 2 registres (mémoires)
❑ WAIT doit être la première instruction dans un process
MSEI – Département GE – BABA (2024-25) 23 Modifié le 05 Mars. 2025
Variables
❑ Pour pallier au problème précédant on peut utiliser une variable :
§ Une variable est utilisée uniquement dans PROCESS et ne permet
pas la communication entre les PROCESS
§ Une variable peut être de tout type valide dans VHDL
§ La valeur affectée à une variable est immédiate
§ Un operateur spécial pour affecter une valeur à une variable :
c := a AND b ;
MSEI – Département GE – BABA (2024-25) 24 Modifié le 05 Mars. 2025
Variable vs Signal
❑ Solution du problème précédant :
01. -- a et c sont supposés des signaux définis
02. -- quelque part
03.
04. PROCESS
05. VARIABLE b : std_logic ;
06. BEGIN
07. WAIT UNTIL clock = '1' ; a c
08. -- affectation immediate
09. b := a ;
10. -- affectation retardée clock
11. c <= b ;
[Link] PROCESS ;
MSEI – Département GE – BABA (2024-25) 25 Modifié le 05 Mars. 2025
Operateurs
❑ Logique
§ NOT, AND, NAND, OR, NOR, XOR, XNOR
❑ Relationnel
= égal à
/= diffèrent de
< inferieur à
<= inférieur ou égal à
> supérieur à
>= supérieur ou égal à
-- Dans une comparaison de vecteurs de bits de
-- différentes tailles la comparaison est en fait
-- de gauche vers la droite :
-- ainsi "11" est plus grand que "1011 logiques
MSEI – Département GE – BABA (2024-25) 26 Modifié le 05 Mars. 2025
Operateurs
❑ Operateur unaire sur les types std_logic et std_logic_vector
- (negation arithmétique, -2699, -17)
❑ Operateur arithmétique sur std_logic et std_logic_vector
+ (addition)
* (multiplication)
- (soustraction, a - b)
❑ Operateur de concaténation sur une chaîne de caractère
& ("11" & '0' & "101" ó "110101")
❑ Operateurs de décalage sur les vecteurs de bits -- peu utilisés
sll (décalage logique à gauche)
srl (décalage logique à droite)
rol (rotation à gauche)
ror (rotation à droite)
MSEI – Département GE – BABA (2024-25) 27 Modifié le 05 Mars. 2025
Logique à trois états
01. ENTITY trois_etats IS
02. PORT( oe: in std_logic;
03. data: out std_logic_vector(0 to 7));
04. END trois_etats;
05.
06. ARCHITECTURE arch OF test_three IS
07. BEGIN
08. PROCESS (oe)
09. BEGIN
oe
10. IF (oe = '1') THEN
11. data <= "01100100"; "10011011" data
12. ELSE 8
13. data <= "ZZZZZZZZ";
14. END IF;
15. END PROCESS;
16. END arch;
MSEI – Département GE – BABA (2024-25) 28 Modifié le 05 Mars. 2025
Indifférence : Don’t care
❑ On peut utiliser de façon explicite l’état logique indifférence (don’t
care) pour produire des équations logiques optimales
01. IF (a = '1') AND (b = '1') THEN
02. x <= c;
03. ELSE
04. x <= '-';
05. END IF;
❑ Le code VHDL ci-dessus produit l’équation x = c
-- std_match doit être utilisé quand une
-- comparaison de deux vecteurs de bits
-- contenants des don’t cares
MSEI – Département GE – BABA (2024-25) 29 Modifié le 05 Mars. 2025
Comparaison des vecteurs de bits et des chaines de caractères
❑ La comparaison de "1101" à "11-1" produit FALSE
❑ Utiliser std_match(a,"string")
❑ Il faut inclure la package std_arith
01. ...
02. SIGNAL a : std_logic_vector (1 to 4) ;
03. ...
04. IF (std_match(a,"10-1")) THEN
05. x <= '1';
06. END IF;
MSEI – Département GE – BABA (2024-25) 30 Modifié le 05 Mars. 2025
Exercice #2 : Architecture d’un Comparateur
❑ La déclaration de ENTITY est :
01. LIBRARY ieee; a(0 TO 3)
02. USE ieee.std_logic_1164.ALL; f
b(0 TO 3)
03. ENTITY compare4bits IS PORT (
04. a, b: IN std_logic_vector(0 TO 3);
05. f: OUT std_logic);
06. END compare4bits;
❑ Décrire l’architecture de telle sorte que la sortie f est mise à 1 logique
quand a est égal à b
MSEI – Département GE – BABA (2024-25) 31 Modifié le 05 Mars. 2025
Exercice #2 : plusieurs solutions possibles
❑ Fonctionnement concurrent avec une affectation conditionnelle
01. ARCHITECTURE arch1 OF compare4bits IS
02. BEGIN
03. f <= '1' WHEN a = b ELSE '0';
04. END arch1;
❑ Fonctionnement concurrent avec des équations booliennes
01. ARCHITECTURE arch2 OF compare4bits IS
02. BEGIN
03. f <= NOT(
04. (a(0) XOR b(0)) OR
05. (a(1) XOR b(1)) OR
06. (a(2) XOR b(2)) OR
07. (a(3) XOR b(3)));
08. END arch2;
MSEI – Département GE – BABA (2024-25) 32 Modifié le 05 Mars. 2025
Exercice #2 : plusieurs solutions possibles
❑ Fonctionnement séquentiel avec PROCESS
01. ARCHITECTURE arch3 OF compare4bits IS
02. BEGIN
03. comp: PROCESS (a, b)
04. BEGIN
05. IF a = b THEN
06. f <= '1';
07. ELSE
a(0 TO 3)
08. f <= '0'; f
09. END IF; b(0 TO 3)
10. END PROCESS comp;
11. END arch3;
MSEI – Département GE – BABA (2024-25) 33 Modifié le 05 Mars. 2025
Registres : Exemple de Bascule D
d q
01. ENTITY registre IS PORT ( clk
02. d, clk: IN std_logic;
03. q: OUT std_logic);
04. END registre;
05.
06. ARCHITECTURE arch OF registre IS
07. BEGIN
08. dff: PROCESS (clk)
09. BEGIN
10. IF clk’EVENT AND clk = '1' THEN
11. q <= d;
12. END IF;
13. END PROCESS dff;
14. END arch;
MSEI – Département GE – BABA (2024-25) 34 Modifié le 05 Mars. 2025
Registres
❑ Le synthétiseur déduit qu’un registre doit être créé car :
❑ L’ horloge (clk) est dans la liste de sensitivité
§ La formulation (clk’EVENT AND clk = '1') apparait
dans PROCESS
§ La formulation (clk’EVENT AND clk = '1') stipule que
la sortie q recopie la valeur de d sur front montant de clk
❑ L’absence de la clause ELSE dans l’instruction IF-THEN,
implique que si le front montant de clk n’est pas satisfaite, q
garde sa valeur (mémoire)
❑ Si le synthétiseur ne parvient pas à déterminer la valeur future du
signal, il va inférer implicitement un verrou (latch)
MSEI – Département GE – BABA (2024-25) 35 Modifié le 05 Mars. 2025
Exemple #1 de compteur 4-bit avec signal reset synchrone
01. USE ieee.numeric_std.ALL;
02. ...
03. PROCESS (clk)
04. BEGIN
05. IF clk’EVENT AND clk= '1' THEN
06. IF rst = '1' THEN
07. count <= "0000"; -- or x"0" en hexadecimal
08. ELSE
09. count <= count + 1;
10. END IF;
11. END IF;
12. END PROCESS;
❑ Ce PROCESS est sensitive uniquement aux transitions de clk
❑ Que devient le code HDL pour un signal reset asynchrone ?
MSEI – Département GE – BABA (2024-25) 36 Modifié le 05 Mars. 2025
Exemple 2# de compteur 4-bit avec signal reset asynchrone
01. USE ieee.numeric_std.ALL;
02. ...
03. PROCESS (clk, rst)
04. BEGIN
05. IF rst = '1' THEN
06. count <= x"0";
07. ELSEIF clk’EVENT AND clk= '1' THEN
08. count <= count + 1;
09. END IF;
10. END PROCESS;
❑ Ce PROCESS est sensitif aux transitions de clk et de rst
MSEI – Département GE – BABA (2024-25) 37 Modifié le 05 Mars. 2025
Exercice #4
❑ Écrire un code VHDL qui décrit le circuit ci-dessous
ENC
COUNTER
DATA
DIN
LD 4 COUNT
LD Q 4
ENC COMPARATOR
CLK
RST P
RST (sync)
P=Q
Q
REGISTER
DIN
ENR Q 4
ENR
MSEI – Département GE – BABA (2024-25) 38 Modifié le 05 Mars. 2025