0% ont trouvé ce document utile (0 vote)
16 vues38 pages

Lecture 5

Le document présente une introduction au VHDL, un langage de description matériel utilisé pour la conception de circuits intégrés à haute vitesse. Il décrit les concepts clés tels que les entités, les architectures, les ports, et les instructions VHDL, ainsi que des exemples de déclarations et d'architectures. Le VHDL permet une description matérielle portable et peut être utilisé pour simuler et synthétiser des circuits numériques.

Transféré par

achraf.gazi.alp.2003
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
16 vues38 pages

Lecture 5

Le document présente une introduction au VHDL, un langage de description matériel utilisé pour la conception de circuits intégrés à haute vitesse. Il décrit les concepts clés tels que les entités, les architectures, les ports, et les instructions VHDL, ainsi que des exemples de déclarations et d'architectures. Le VHDL permet une description matérielle portable et peut être utilisé pour simuler et synthétiser des circuits numériques.

Transféré par

achraf.gazi.alp.2003
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi