Vous êtes sur la page 1sur 65

Université Hassan 1er

Faculté des Sciences et Techniques


Settat

Module: Electronique numérique et VHDL

Département: Génie mécanique et Génie Electrique

VHDL
Filière : Génie Electrique et Systèmes Automatisés

Pr : Nihal REMZAN

Année universitaire : 2023/2024


Plan du cours
 VHDL : définition, caractéristiques, objectifs, principe …….

 Eléments fondamentaux du langage VHDL


✓ Les objets : constantes, variables, signaux et fichiers
✓ Les opérateurs : logique, comparaison, addition ….
✓ Les bibliothèques : work, std et ieee

 La déclaration d’entité : interface entre monde extérieur et unité de conception

 Le corps d’architecture
✓ Types : scalaires, composés, accès et fichiers
✓ Zone concurrente
✓ Zone séquentielle

2
Qu’est ce que VHDL?
❑ VHSIC (Very High Speed Integrated Circuit) Hardware Description Langage.

❑ Langage pour décrire la structure et le comportement de systèmes


électroniques, en particulier des circuits digitaux (ASIC, FPGA, . . . ).
❑ Standard IEEE.

❑ Indépendant de la technologie cible.

❑ Indépendant de la méthodologie de conception.

❑ Indépendant des outils de conception.

❑ Langage très général ! très complexe (! dépendent de tout!)

❑ VHDL n’est pas un langage de programmation


c’est un langage de description (spécification) de système.
3
Historique
❑ 1980: le département de défense américain lance un appel d’offre pour un langage qui
permettrait de décrire tous les systèmes électroniques utilisés.

❑ 1983: trois compagnies (Intermetics, IBM, Texas Instruments) commencent le


développement.

❑ 1985: première version officielle de VHDL (version7.2).

❑ 1986: VHDL est donné à IEEE pour en faire un standard.

❑ 1987: Standard IEEE1076-1987.

❑ 1993: Standard IEEE1076-1993. (des changements minimes)

❑ 1999:Standard IEEE1076.6-1999

❑ La norme est révisée tous les 5 ans (P1076-87, P1076-93, P1076-2000, P1076-2002,
P1076-2006)

4
Introduction
❑ Programmation ou description ?
➢ Les objectifs du langage VHDL
 Conception de circuits intégrés reconfigurable ou non (ASIC, FPGA…) :
SYNTHESE
 Mise au point de modèle de simulations numériques (circuits virtuels) :
MODELISATION
➢ Le langage est capable de DECRIRE
 des comportements concurrents ( // )
Les deux portes
 Des comportements séquentiels travaillent en //

❑ Le principe majeur de VHDL


 Est de fournir un langage commun, depuis la description au niveau
système jusqu’au circuit. A tous les niveaux de description le langage
est le même.
5
langage de programmation VHDL
VHDL n’est pas un langage de programmation comme le C, c’est
un langage de description du matériel (verilog, SystemC …).

➢ un langage de programmation est destiné à être traduit en


langage machine puis à être exécuté par un microprocesseur.

➢un langage de description de matériel comme VHDL décrit une


réalité matérielle, c’est-à-dire le fonctionnement d’un système
numérique. Il va être traduit (synthétisé) en un ensemble de circuits
logiques combinatoires et séquentiels qui vont être implémentés
dans un circuit intégré.

6
Avantages du VHDL
❑ Langage complet qui couvre à la fois les phases de :
✓ spécification,
✓ modélisation,
✓ simulation,
✓ synthèse.
❑ Langage indépendant :
✓ standard IEEE (standardisé en 1987, complété en 1993),
✓ indépendant de la technologie du circuit,
✓ Independent des systèmes – hôtes (PC ou station de travail).
❑ Langage flexible : supporte différents niveaux de description
❑ description modulaire et hiérarchique
• les descriptions sont plus simples,
• la fiabilité est améliorée : chaque sous-ensemble peut être testé seul,
• les sous-ensembles sont réutilisables.

7
Structure du VHDL
Il existe 5 catégories d’unité de conception

• L’entité (mot clé entity)


Circuit principal Décrit un système vu extérieur (boîte noire)

• L’architecture (mot clé architecture)


Décrit l’intérieur (le fonctionnement) d’une boîte noire.

• La configuration (mot clé configuration)

Package • La déclaration de paquetage (mot clé package)


(librairie)
• Le corps de paquetage (mot clé package body)

8
Objets
❑ Quatre classes d’objets en VHDL :
➢ Les constantes
Comme les autres langages, elles ont une valeur fixe
➢ Les variables
Comme les autres langages, elles ont une valeur immédiatement modifiable par affectation
➢ Les signaux
Notion nouvelle, la valeur ne se modifie pas immédiatement
➢ fichier
fait référence à un stockage sur une mémoire de masse (disque) externe

❑ Les objets d’un programme VHDL sont tous typés.

Avant toute utilisation d’une constante, d’une variable ou d’un signal, il faut les déclarer.

❑ La déclaration des objets s’effectue uniquement dans la partie déclarative du


programme.

9
Objets
❑ data object object name : data type := initial value;
❑ CONSTANT name : type := value;
✓ constant my_constant: integer:=32;
✓ constant my_vector : std_logic_vector(3 downto 0):= "1010";

❑ VARIABLE name : type [range] [:= init_value];


✓ VARIABLE my_logic: std_logic:=’1’;
✓ VARIABLE my_vector : std_logic_vector(3 downto 0):= "1110";

❑ SIGNAL name : type [range] [:= initial_value];


✓ SIGNAL my_bit: bit:=’1’;;
✓ SIGNAL count : INTEGER RANGE 0 TO 100 ;
✓ SIGNAL my_vector : std_logic_vector(3 downto 0):= "1010";
10
Les opérateurs
❑ Opérateur logique : and, or, nand, nor, xor, xnor, sll, srl, sra, rol,
ror

❑ Opérateur de comparaison : =, /=, <, < =, >, > =

❑ Opérateur d’addition : +, -, &

❑ Opérateur mathématique : *, /, mod, rem

❑ Opérateur de signe : -

❑ Opérateur divers : **, abs, not

11
Programmer en VHDL
❑ Définition de l’entité (boîte noire avec les ports d’entrée/sortie)

❑ Définition de l’architecture interne de cette boîte noire


Déclaration des constantes, des signaux, des fonctions, des
procédures, des blocs hiérarchiques utilisés dans le
programme

❑ Corps du programme consistant


✓ Les instructions concurrentes
✓ Les instructions séquentielles encapsulées dans des « process »

❑ VHDL est insensible à la casse. On écrit souvent les mots réservés du langage en
majuscule, le reste en minuscule.

❑ Les commentaires sont précédés de deux tirés : -- exemple)


12
L’entité
❑ L'entité définit les ports (vue externe) et leur mode (in, out, inout, buffer).

❑ Syntaxe:

entity nom_de_l_entite is
port(liste_des_port_avec_leur_mode);
end nom_de_l_entite;

13
L’entité

remarquez à la fin de la
définition du port, le
point-virgule se trouve
après la parenthèse
fermante.

X, Y et Z étant du même
mode et du même type,
ils peuvent être listés sur
la même ligne, séparés
par des virgules.

14
Bibliothèques
❑ Le mot ‘library’ est utilisé pour indiquer que des packages vont être ajoutés à la
conception VHDL à partir de la bibliothèque spécifiée.
❑ La syntaxe du paquet a trois champs séparés par un point.

Nom de la bibliothèque

Nom de la bibliothèque Nom du package fonctionnalité spécifique

15
Exemples d’entité
❑ Décrire les ports de circuits suivants par un segment d'entité VHDL.

16
Architecture
❑ Définition de signaux et d'autres objets internes

❑ Description du fonctionnement ou de la structure de l’entité à l’aide


d’instructions concurrentes

❑ Elle est toujours associée à une entité, une entité peut avoir plusieurs
architectures:

❑ Syntaxe
architecture nom_de_l_architecture of nom_de_l_entite is
{partie déclarative}
begin
{suite d’instructions concurrentes}
end nom_de_l_architecture;
17
Affectation aux signaux
❑ Affectation des signaux se fait par le signe <=

Signal A,B,C: std_logic; --declaration



A <= not B ;
B <= ‘1’ ;
C <= A and B ;

Dans une architecture, toutes les lignes combinatoires ou bloc de


processus sont exécutées en parallèle.
18
Structure d’un programme VHDL
ENTITY nom_de_l_entite IS

{generic (liste_des_parametres)}

{port (liste_des_port_avec_leur_mode)}

END {nom_de_l_entite};

ARCHITECTURE nom_de_l_architecture OF nom_de_l_entite IS


{partie déclarative de l'architecture}
BEGIN
{zone des instructions concurrentes }
{comme des affectations, des process; …}
END nom_de_l_architecture;

19
Structure d’un programme VHDL

20
Exemples
❑ Donner le code VHDL de l’équation suivante:

❑ Donner le code VHDL du circuit suivant:

21
Exemples
❑ Donner le couple entité - architecture.

Demi-additionneur

A B S C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

22
Exemples
❑ Donner le couple entité - architecture.

bascule RS

23
Exemples
❑ Dessinez le circuit logique à implémenter avec le VHDL suivant

24
Exemples
❑ Donner le code VHDL du circuit suivant (additionneur complet).

25
Exemples
❑ Dessinez le circuit logique à implémenter avec le VHDL suivant

26
Types en VHDL

❑ Tout objet en VHDL doit être typé.

❑ Un type définit

•l'ensemble des valeurs que l'on peut affecter à l'objet

•l'ensemble des opérations disponibles sur l'objet

27
Types, schéma global

28
Type scalaire

❑ Énuméré : Ce type déclare toutes les valeurs qu'un objet de ce type peut prendre.
type T_FEU is (ROUGE, ORANGE, VERT);
signal FEU : T_FEU;
type ETAT is (INIT, LECT, ECR, ATT);

❑ Les types ci-dessous sont des types prédéfinis


type BOOLEAN is (FALSE, TRUE);
type BIT is ('0' , '1’);

❑ Entier :

type memory_size is range 1 to 2048;

❑ Un seul type prédéfini : integer


signal COMPT : integer range 0 to 15;
29
Exemple
❑ Ecrire un programme VHDL qui calcule la fonction y=𝑥 2 où x
est un entier compris entre 0 et 7.

30
Exemple
❑ Ecrire un programme VHDL qui calcule la fonction y=𝑥 2 où x
est un entier compris entre 0 et 7.

entity carre is
port( x: in integer range 0 to 7;
y: out integer range 0 to 49);
end carre;
architecture arch1 of carre is
begin
y<=x**2;
end arch1;

31
Type scalaire
❑ Réel :
type signal_level is range -15.0 to 15.0
type probability is range 0.0 to 1.0;

❑ Un seul type prédéfini : real

signal MASSE : REAL;

32
Type scalaire
❑ physique : Ce type décrit des objets qui peuvent prendre des valeurs entières,
exprimées avec des unites définies par le type

❑ Un seul type prédéfini : time


type TIME is range –2147483647 to +2147483647 --64 bits
units fs; ps=1000 fs; ns=1000 ps; us = 1000 ns;
ms = 1000 us; sec = 1000 ms; min = 60 sec; hr=60 min;
end units;
signal T : time;
T <= 5 ns;

33
Logique à valeurs multiples
❑ Il existe des signaux logiques à plusieurs états:

0, 1, haute impédance, don’t care, non déterminé, …

❑ Le type "std_logic" remplace le type "bit" pour permettre d’avoir 9 états différents

❑ Utilisation de librairie IEEE.std_logic_1164

❑ exemple
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
signal SORTIE, Q: std_logic;

SORTIE <= ‘Z’; -- haute impédance
Q <= ‘1’;
34
Le type std_logic
❑ Le type std_logic :
‘ U ’ non initialisé
‘ X ’ non connu
‘ 0 ’ logique 0 Strong drive
‘ 1 ’ logique 1
‘ Z ’ haute impédance
‘ W ’ non connu
‘ L ’ logique 0 Weak drive
‘ H ’ logique 1
‘ - ’ don’t care

35
Type composite
Deux types sont considérés : tableau et record

❑ Un tableau est un ensemble d’éléments du même type

❑ Pour un ensemble de std_logic, nous avons le type prédéfini


std_logic_vector : on définit la taille et l'ordre des éléments
signal BUS1 : std_logic_vector (7 downto 0);
signal REG : std_logic_vector (0 to 31);

❑ On peut aussi définir un type tableau d’éléments composites


type MEMO is array (0 to 1023) of
std_logic_vector(7 downto 0);
signal A,B : MEMO;

36
Accès aux éléments
❑ Déclaration:
A,B: std_logic_vector(15 downto 0);

❑ Directement:
A(3) <= ‘1’;
B(15) <= ‘0’;

❑ Par tranches
A(15 downto 12) <= "1011";
A(10 downto 2) <= B(15 downto 7);

37
Accès aux éléments de tableaux
❑ Par agrégat

✓ Notation positionnelle
A(3 downto 1) <= ('0', '1', B(15));

✓ Par concaténation
signal A,B,C,D : std_logic;
signal BYTE : std_logic_vector(7 downto 0);
signal Z_BUS,A_BUS : std_logic_vector(3 downto 0);
Z_BUS <= A & C & D & B;
BYTE <= Z_BUS & A_BUS;

38
Exemple
❑ Ecrire un programme VHDL qui prend deux entrées de type std_logic_vector de
longueur 5 et 7, les concaténer et envoyer le résultat.

39
Exemple
❑ Ecrire un programme VHDL qui prend deux entrées de type std_logic_vector de
longueur 5 et 7, les concaténer et envoyer le résultat.
Entity concatenation is

port( x_vec: in std_logic_vector(4 downto 0);

y_vec: in std_logic_vector(6 downto 0);

z_vec: out std_logic_vector(11 downto 0) );

end concatenation;

architecture arch2 of concatenation is

begin

z_vec<=x_vec & y_vec;

end arch2; 40
Exemples
SIGNAL A: STD_LOGIC; a <= ‘1’;
SIGNAL B: STD_LOGIC_VECTOR(3 b <= ”0000”; -- Base Binaire par
DOWNTO 0); défaut
SIGNAL C: STD_LOGIC_VECTOR(3 c <= B”0000”; -- Base Binaire
DOWNTO 0); explicite
SIGNAL D: STD_LOGIC_VECTOR(7 d <= ”0110_0111”; -- Utiliser ‘_’
DOWNTO 0); pour augmenter la lisibilité
SIGNAL E: STD_LOGIC_VECTOR(15 e <= X”AF67”; -- Base
DOWNTO 0); Hexadecimale
SIGNAL F: STD_LOGIC_VECTOR(8 f <= O”723”; -- Base Octale
DOWNTO 0);
41
Enregistrement (record)
Ensemble d'éléments de types différents
type NAME is
record
identifier : type_indication;
:
identifier : type_indication;
end record;
type PAQUET is
record
mot_unique : std_logic_vector (7 downto 0);
data : std_logic_vector (23 downto 0);
CRC : std_logic_vector( 5 downto 0);
num : integer range 0 to 1023;
end record;
signal paq_rec : PAQUET;
paq_rec.CRC <= "111000";
42
Exemple
type nom_de_mois is (jan, fev, mar, avr, mai, jun, jul, aou, sep, oct, nov, dec) ;

type date is

record

jour : integer range 1 to 31;

mois : nom_de_mois ;

annee : integer range 0 to 4000;

end record;

signal dat_rec : date;

dat_rec.jour <= 21;

dat_rec.mois <= dec;

dat_rec.annee <= 2021;


43
zone concurrente
❑ Le corps de l'architecture est une zone concurrente: les instructions s'exécutent toutes
en même temps (en parallèle).

I <= A or B; S <= I and C


S <= I and C I <= A or B;

44
zone concurrente

 Le langage VHDL disposent de plusieurs instructions concurrentes, soit:

➢ L’affectation simple … <= …

➢ L’affectation conditionnelle when … else

➢ L’affectation sélectionnée with … Select

45
Affectation Simple

 La syntaxe générique d'une affectation simple est la suivante:

Signal_1 <= Signal_2 fonction_logique Signal_3;

architecture Logique of Nand2 is

begin

Y <= A nand B;

end Logique;

46
Exemples
 Exemple 1: Donner la description VHDL du circuit

47
Exemples
 Exemple 2: Donner le code VHDL du circuit suivant

48
Exemples
 Exemple 3: Donner le code VHDL du circuit suivant

49
Exemples
 Exemple 4: Donner la description VHDL du circuit

50
Affectation conditionnelle

La syntaxe générique d'une affectation conditionnelle est la


suivante:

Signal_S <= Signal_1 when Condition_1 else


Signal_2 when Condition_2 else
.... ....
Signal_X when Condition_X else
Signal_Y;

51
Affectation conditionnelle

Exemple :

S <= A when (Sel = "00") else


B when (Sel = "01") else
C when (Sel = "10") else
'0';

52
Exemples
 Exemple 1: Donner la description VHDL du circuit (Comparateur à 4-bits)

53
Exemples
 Exemple 2: Donner la description VHDL du circuit

54
Exemples
 Exemple 3: Donner la description VHDL du circuit

55
Exemples
 Exemple 4: Donner la description VHDL du circuit

56
Exemples
 Exemple 5: Donner la description VHDL des circuits suivant

57
Exemples
 Exemple 6: Donner la description VHDL du circuit

58
Exemples
 Exemple 7: Donner la description VHDL du circuit

59
Affectation sélectionnée

La syntaxe générique d'une affectation d'un signal sélectionné


est la suivante:

with Vecteur_De_Commande select


Signal_Sortie <=Valeur_1 when Etat_Logique_1,
Valeur_2 when Etat_Logique_2,
.... ....
Valeur_N when others;

60
Affectation sélectionnée
Exemple :

With Sel select


S <= A when "00",
B when "01",
C when "10",
'0' when others;
61
Exemples

Exemple 1: Donner la table de vérité, le code VHDL du circuit suivant


en utilisant l affectation simple, conditionnelle et sélectionnée :

F(x,y,z)= x’y’ + y’z

62
Exemples
Exemple 2: Donner le code VHDL de l’encodeur octal (8 to 3) en utilisant l affectation
conditionnelle (when … else) et sélectionnée (with … select) :

63
Exemples
Exemple 3: Donner le code VHDL du
multiplexeur 8 vers 1 en utilisant l
affectation conditionnée (when … else)
et sélectionnée (with … select) :

64
Exemples
Exemple 4: Donner le code VHDL d’un transcodeur: Gray => Binaire pur en utilisant
with … select

65

Vous aimerez peut-être aussi