0% ont trouvé ce document utile (0 vote)
118 vues65 pages

Cours VHDL: Concepts et Applications

Transféré par

kawtar elbiraki
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)
118 vues65 pages

Cours VHDL: Concepts et Applications

Transféré par

kawtar elbiraki
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

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