Vous êtes sur la page 1sur 51

Chapitre 2 : Description de circuits

numériques avec VHDL

ISET Sousse –
2020-2021
© R. Hertelli

1 Systèmes électroniques embarqués 2020-2021 © R. Hertelli


Plan

Introduction générale
I. Introduction au langage VHDL
II. VHDL : Le Langage
III. VHDL en logique combinatoire
IV. VHDL en logique séquentielle

© R. Hertelli

2 Systèmes électroniques embarqués 2020-2021


.
PARTIE I
INTRODUCTION AU LANGAGE
VHDL

1. Introduction
2. Réalisation d’un projet
3. Flot de conception pour un circuit
numérique
4. Démarche de développer d’une application
de logique
© R. Hertelli

3 Systèmes électroniques embarqués 2020-2021


Introduction
VHSIC ( Very High Speed Integrated Circuit)
Hardware
Description
Language
But : Langage de description matérielle

 Augmentation de la vitesse de conception des circuits


Simulation rapide
Langage de programmation tel ADA, C, Pascal

Caractéristiques :
 Standard (indépendant du logiciel échange facile)
Méthodologies de conception diverses
Outil complet (design, simulation, synthèse)
Haut niveau d’abstraction (indépendant de la technologie)
© R. Hertelli

4 Systèmes électroniques embarqués 2020-2021


.
Réalisation d’un projet

© R. Hertelli

5 Systèmes électroniques embarqués 2020-2021


.
Flot de conception pour un circuit numérique
 Niveau d’abstraction
 Les différentes manières d’écriture en VHDL sont décrites par le
concept des niveaux d’abstraction. Un niveau d’abstraction définie
comment sont les détails d’une architecture pour une description
particulière .

Comportementale

RTL

Porte logique

Circuit (transistor)
© R. Hertelli

6 Systèmes électroniques embarqués 2020-2021


.
Flot de conception pour un circuit numérique
 Niveau circuit
 C’est celui qui fournit les détails de circuit au niveau silicium et
même des informations concernant le temps d’exécution et certains
effets analogiques.

Comportementale

RTL

Porte logique

Circuit (transistor)
© R. Hertelli

7 Systèmes électroniques embarqués 2020-2021


.
Flot de conception pour un circuit numérique
 Niveau portes logiques
 C’est celui qui fournit les détails de circuit au niveau silicium et
même des informations concernant le temps d’exécution et certains
effets analogiques.

Comportementale

RTL

Porte logique
Circuit (transistor)
© R. Hertelli

8 Systèmes électroniques embarqués 2020-2021


.
Flot de conception pour un circuit numérique
 Niveau RTL (Register Level Trasnfert)
 Au niveau registre,on utilise le langage VHDL d’une manière
stricte : on définit tous les registres qui correspond à l’entité et la
logique entre eux. On obtient alors des informations sur
l’architecture et non pas des détails sur la technologie employé.

Comportementale

RTL
Porte logique

Circuit (transistor)
© R. Hertelli

9 Systèmes électroniques embarqués 2020-2021


.
Flot de conception pour un circuit numérique
 Niveau Comportementale
 A ce niveau, l’utilisation du VHDL à pour but de décrire le
fonctionnement de l’entité, sans prendre en considération
l’architectures des registres

Comportementale
RTL

Porte logique

Circuit (transistor)
© R. Hertelli

10 Systèmes électroniques embarqués 2020-2021


.
Démarche de développer d’une application

de logique programmable
 Pour développer une application de logique programmable, il faudra
suivre la démarche présenté ci- dessous:
1 • Saisie du texte VHDL (ou de schéma)
2 • Vérification Génération d’une NETLIST
3 • Simulation fonctionnelle
4 • Choix d’un composant et routage
5 • Simulation temporelle
6 • Programmation du composant et test
© R. Hertelli

11 Systèmes électroniques embarqués 2020-2021


.
PARTIE II
VHDL : LE LANGAGE
1. Introduction
2. Unité de compilation
3. Librairies
4. Paire Entité/Architecture
5. Entité, entrées/sorties (I/O)
6. Architecture
7. Quelques détails du langage VHDL
© R. Hertelli

12 Systèmes électroniques embarqués 2020-2021


Introduction
 Comme tout langage, le langage VHDL fait appel à des LIBRAIRIES.
• Il peut effectuer de la simulation et de la synthèse.
• Il utilise des mots clés:
– les lignes de commande sont terminées par " ; "
– les "blancs" n'ont pas d'effet (utilisés pour la lisibilité).
– les commentaires sont précédés de " -- ".
– On peut utiliser indifféremment les majuscules ou les
minuscules cependant les mots clés sont souvent mis en
majuscules.
 les modèles peuvent être décrits en :
• Comportemental
• structurel
• mixte (les deux précédents). © R. Hertelli

13 Systèmes électroniques embarqués 2020-2021


.
Unités de compilation
 Peuvent être compilées séparément - (Un seul fichier *.vhd ou
plusieurs)

© R. Hertelli

14 Systèmes électroniques embarqués 2020-2021


.
Librairies
 Tous programmes VHDL nécessitent la déclaration d’une ou de
plusieurs bibliothèques qui incluent la définition des types de signaux
et des opérations que l’on peut effectuer entre ceux-ci.
 Les plus usuelles sont:

• IEEE.std_logic_1164.all; -- définition du type bit, vecteur de bit, etc..


• IEEE.std_logic_arith.all; -- opérations signées ou non signées
• IEEE.std_logic_signed.all; -- opérations signées ou non signées
• IEEE.std_logic_unsigned.all;
-- similaire à numeric_std=operations entre vecteurs
-- = opérations entre vecteurs de std_logic avec (vecteurs de) std_logic
-- (vecteurs d’)entier(s)

© R. Hertelli

15 Systèmes électroniques embarqués 2020-2021


.
Paire entité/architecture
 Tout programme VHDL contient au moins une paire
indissociable entité/architecture.
Exemple : le half adder
-- ceci est un commentaire
-- déclaration des librairies
library ieee;
use ieee.std_logic_1164.all;
-- déclaration de l’entité
entity HA is
port(A,B : in std_logic; S,R : out
std_logic);
end HA;
-- architecture de type flot de données
architecture arch_HA_flot of HA is
begin
S <= A xor B;
C <= A and B;
end arch_HA_flot;
© R. Hertelli

16 Systèmes électroniques embarqués 2020-2021


.
Entité : ENTITY
 Elle donne une vue extérieure du modèle VHDL réalisé. Elle
s'apparente à un symbole .
 Syntaxe
ENTITY <nom_entité> IS
Déclarations génériques;
Déclaration des ports;
END <nom_entité>;

où <nom_entité> est le nom donné au modèle VHDL (ex: multiplexeur,


additionneur...).
 Déclarations génériques: Utilisées pour passer des informations au modèle. C'est le
cas lorsqu'on veut avoir un modèle générique réutilisable (ex: compteur à N bits: la
valeur de N est passée en paramètre générique).

 Déclaration des ports: Elle permet de décrire les broches d'entrées et de sorties du
modèle.
© R. Hertelli

17 Systèmes électroniques embarqués 2020-2021


.
Entité, entrées/sorties (I/O) (1)
 L’entité définit le nom de la description VHDL ainsi que les I/O. La syntaxe se
formule comme suit
ENTITY <nom_entité> IS
Déclaration des ports I/O;
END <nom_entité>;
 L’instruction port définit les I/O par la syntaxe
NOM_DU_SIGNAL : MODE TYPE;
 NOM_DU_SIGNAL est composé de caractère commençant par une lettre.
 Le MODE du signal peut-être
 in, un port d’entrée
 out, un port de sortie
 inout, un port bidirectionnel
 signal + out (= buffer); un port de sortie mais aussi utilisé en interne
dans la description
 signal, un point interne
 variable, aucun sens physique © R. Hertelli

18 Systèmes électroniques embarqués 2020-2021


.
Entité, entrées/sorties (I/O) (2)
 Les TYPE fort utilisés pour un signal sont :
• std_logic : ‘0’ ,’1’, ‘Z’ , ‘L, ‘H’, ‘-’,…
• std_logic_vector (X downto 0) ou (0 to X) : « 0011»
• integer  compteur, indice de boucle,…

 Remarque: on peut définir un nouveau type. Par exemple,


type etat4 is (e0,e1,e2,e3);

 Exemple : Comparateur

ENTITY comparateur IS
PORT( 8
SIGNAL a : IN bit_vector(7 DOWNTO 0);
SIGNAL b : IN bit_vector(7 DOWNTO 0); 8
SIGNAL egal : OUT bit);
END comparateur;
© R. Hertelli

19 Systèmes électroniques embarqués 2020-2021


.
Entité, entrées/sorties (I/O) (3)
 1.Exercices :
 Pour chacun de ces blocs , donnez le code VHDL des entités.

© R. Hertelli

20 Systèmes électroniques embarqués 2020-2021


.
Architecture (1)
 Elle a pour rôle de décrire le comportement du composant VHDL.
Elle correspond au schéma électrique interne du composant et est
nécessairement associée à une entité.
 Toutes les instructions qui la composent sont exécutées de manière
concurrente (ou simultanée).
 Le fonctionnement peut être combinatoire et/ou séquentielle.
 Les descriptions peuvent être:
• Comportementales ( elles ne font pas appel à des structures
matérielles)
• Structurelles ( netlist au niveau composant)
• Mixtes ( un mélange des deux).

© R. Hertelli

21 Systèmes électroniques embarqués 2020-2021


.
Architecture (2)
 FLOT DE DONNEES
 Description des équations
logiques
 Petits circuits
 COMPORTEMENTAL
• Description conditionnelle  STRUCTUREL
• Nécessite un process  Description du circuit sous
• Circuits de toutes tailles forme de
 boîtes noires interconnectées
 Circuits de taille moyenne à
grande

© R. Hertelli

22 Systèmes électroniques embarqués 2020-2021


.
Architecture (3)
 Syntaxe
ARCHITECTURE <nom_arch> OF <nom_entité> IS
Zone de déclaration
BEGIN
Description de la structure logique
END <nom_arch>;
 Zone de déclaration: Elle permet d'identifier des signaux, des constantes ainsi que
leurs caractéristiques utilisés par l'architecture.
• exemple: signal sig_Ut : integer range 0 to 9 ;

 Description de la structure logique: C'est une suite d'instructions concurrentes.

 exemple 1:
multiplexeur deux entrées a et b et une sortie s.

© R. Hertelli

23 Systèmes électroniques embarqués 2020-2021


.
Architecture (4)
Library IEEE;
USE IEEE.std_logic_1164.all;
ENTITY multi_2 IS
Port (a, b, sel : in std_logic;
s : out std_logic
);
END multi_2 ;
ARCHITECTURE arch_multi_2 OF multi_2 IS
BEGIN
s <= (a AND NOT sel) OR (b AND sel);
-- représentation structurelle
END arch_multi_2 ;

OU ENCORE:
s <= a WHEN sel = '0' ELSE b ;
-- représentation comportementale
OU ENCORE:
WITH sel SELECT
s <= a WHEN '0' ,
b WHEN '1',
'0' WHEN OTHERS;
-- autre représentation comportementale
© R. Hertelli

24 Systèmes électroniques embarqués 2020-2021


.
Quelques détails du langage VHDL
 Espaces, littéraux et commentaires
 Il n’y a pas de différence entre les espaces, tabulations et retours de chariot, présents seuls ou en groupe.
 Le langage n’est pas sensible à la casse.
 Un littéral composé d’un caractère unique est placé entre apostrophes : ‘a’, ‘5’.
 Un littéral composé d’une chaîne de caractères est placé entre guillemets : "bonjour", "123ABC".
 Un littéral numérique peut être spécifié avec sa base, avec le format suivant :
base # chiffres [.chiffres]#[exposant]
où les crochets indiquent des éléments facultatifs. La base doit être entre 2 et 16, inclusivement. Par
exemple, les nombres suivants ont tous la même valeur :
10#33# = 10#3.3#E1 = 2#10001# = 16#21# = 7#45#

Les chiffres doivent être inférieurs à la base, et peuvent prendre les valeurs 0 à F inclusivement.
 Un littéral composé de bits peut être exprimé en bases 2, 8 ou 16, avec les spécificateurs de base B,
O et F, respectivement : B"11111111", O"377", X"FF".

 Tout texte placé après deux tirets et jusqu’à la fin d’une ligne est un commentaire, ce qui est semblable
au ‘//’ de C. Il n’y a pas de commentaires en bloc (/* … */) en VHDL.
© R. Hertelli

25 Systèmes électroniques embarqués 2020-2021


.
Quelques détails du langage VHDL
 Objets
 Ici, ‘objet’ n’a pas le même sens que dans un langage orienté objet. Il y a quatre catégories d’objets en
VHDL :
 constant (et generic) : peut contenir une valeur unique qui ne change pas; un objet
generic est une constante spéciale permettant d’appliquer un paramètre à une entité lors de
son instanciation;
 variable: peut contenir une valeur temporaire; les objets variable sont utiles pour stocker
des valeurs intérimaires dans les calculs;
 signal (et port) : peut contenir une liste de valeurs dans le temps; un objet signal
correspond en général à un fil d’un circuit; un port d’une entité est implicitement un signal
pour cette entité;
 file: un objet dans lequel on peut écrire et lire des valeurs, et qui correspond à un fichier du
système d’exploitation.

 Lors de la déclaration d’un objet, on spécifie sa catégorie, son identificateur et son type. On
peut aussi lui assigner une valeur initiale

© R. Hertelli

26 Systèmes électroniques embarqués 2020-2021


.
Quelques détails du langage VHDL
 Identificateurs
 Un identificateur de base légal est composé de lettres, chiffres et/ou du soulignement. Le
premier caractère doit être une lettre, le dernier ne peut pas être le soulignement, et on ne peut
utiliser deux soulignements de suite. Un identificateur ne peut pas être l’un des mots réservés
du langage.
 Les mots réservés de VHDL (selon la norme 1076-2002) sont :
abs, access, after, alias, all, and, architecture, array, assert,
attribute, begin, block, body, buffer, bus, case, component,
configuration, constant, disconnect, downto, else, elsif, end,
entity, exit, file, for, function, generate, generic, group,
guarded, if, impure, in, inertial, inout, is, label, library,
linkage, literal, loop, map, mod, nand, new, next, nor, not,
null, of, on, open, or, others, out, package, port, postponed,
procedural, procedure, process, protected, pure, range, record,
reference, register, reject, rem, report, return, rol, ror,
select, severity, signal, shared, sla, sll, sra, srl, subtype,
then, to, transport, type, unaffected, units, until, use,
variable, wait, when, while, with, xnor, xor
© R. Hertelli

27 Systèmes électroniques embarqués 2020-2021


.
Quelques détails du langage VHDL
 Conversions explicites de type et qualification de type
 Dans VHDL ,Il est possible de faire des conversions explicites de types (type casting).
 Les conversions explicites de type ne sont permises qu’entre type apparentés, comme par
exemple real et integer.

type source
catégorie valeurs
ou sous-type de la définition

boolean type prédéfini FALSE et TRUE

bit type prédéfini ‘0’ et ‘1’

256 caractères de la norme ISO


scalaires 8859-1, avec des abréviations
reconnues et certaines qui sont
character type prédéfini propres à VHDL
Les 128 premiers sont les
caractères ASCII.
plage minimale de  2 31  1 à
integer type prédéfini
. 2 31  1
© R. Hertelli

28 Systèmes électroniques embarqués 2020-2021


.
Quelques détails du langage VHDL

type source
catégorie valeurs
ou sous-type de la définition
31
natural sous-type prédéfini 0 à 2 1
positive sous-type prédéfini 1 à 2 31  1
typiquement
real type prédéfini –1.7014111E±308 à
1.7014111E±308
‘U’ : valeur inconnue, pas
initialisée
‘X’ : valeur inconnue forcée
scalaires ‘0’ : 0 forcé
‘1’ : 1 forcé
Package
std_logic ‘Z’ : haute impédance (pas
std_logic_1164
connecté)
‘W’ : inconnu faible
‘L’ : 0 faible
‘H’ : 1 faible
‘-‘ : peu importe (don’t care)
© R. Hertelli

29 Systèmes électroniques embarqués 2020-2021


.
Quelques détails du langage VHDL
type source
catégorie valeurs
ou sous-type de la définition
bit_vector type prédéfini tableau de bit
string type prédéfini tableau de character
Package
std_logic_vector tableau de std_logic
std_logic_1164
tableau de std_logic,
Package
composés unsigned
numeric_std
interprété comme un nombre
binaire non signé
tableau de std_logic,
Package interprété comme un nombre
signed
numeric_std binaire signé
en complément à deux
 exemple : conversions explicites de types
variable v1 : real;
variable v2 : integer;
variable v3 : std_logic_vector( 3 downto 0) := "1101";
v1 := real(3);
v2 := integer (1.5 * 0.999);
-- v2 := integer("0010"); -- illégal
-- v3 := std_logic_vector(5); -- illégal
© R. Hertelli

30 Systèmes électroniques embarqués 2020-2021


.
Quelques détails du langage VHDL
 Définition de nouveaux types
 On peut définir de nouveaux types avec le mot clé type, et des sous-types avec le mot clé
subtype. On peut entre autres définir des types composés dont les éléments sont tous du
même type et sont numérotés (vecteurs ou matrices – array) ou dont les éléments peuvent
être de types différents et qui sont nommés (structures – record)
 exemple : définition de nouveaux types
type entiers_sous_20 is range 0 to 19;
type matrice_reelle_1_par_10 is array (1 to 10) of real;
type tableauSLV3 is array (natural range <>) of std_logic_vector (2
downto 0);
constant vecteurs : tableauSLV3 := ("000", "001", "010", "011", "100",
"101", "110", "111");
type nom_de_mois is (janvier, février, mars, avril, mai, juin,juillet,
aout, septembre, octobre, novembre, décembre);
type date is record
jour : integer range 1 to 31;
mois : nom_de_mois;
année : positive range 1 to 3000;
end record;
constant confederation : date := (1, juillet, 1867);
© R. Hertelli

31 Systèmes électroniques embarqués 2020-2021


.
Quelques détails du langage VHDL
 Opérateurs
type de type de type de
catégorie opérateurs l’opérande de l’opérande de l’expression
gauche droite
and, or, nand, nor,
logique xor, xnor, not
bit, boolean

relation =, /=, <, <=, >, >= scalaire ou tableau boolean


sll (déc. logique gauche),
srl (déc. logique droite),
comme
sla (déc. arithmétique gauche), tableau de bit
décalage sra (déc. arithmétique droit), ou boolean
integer l’opérande de
gauche
rol (rotation gauche),
ror (rotation droite)
+, -, *, /,
abs (valeur absolue), type
mod (modulo), type numérique type
arithmétique rem (reste) numérique numérique
** (exponentiation) integer

concaténation & tableau ou type énuméré tableau

© R. Hertelli

32 Systèmes électroniques embarqués 2020-2021


.
Quelques détails du langage VHDL
 Attributs
 En VHDL, les attributs permettent d’obtenir de l’information à propos de types, signaux,
variables, constantes, etc.

Utilisation de l’attribut Résultat

A’left, A’right Index le plus à gauche, le plus à droite du vecteur A

A’low, A’high Index le plus bas, le plus haut du vecteur A

A’range La gamme des index du vecteur A

A’length Le nombre d’éléments du vecteur A


T’left, T’right, La valeur la plus à gauche, à droite, la plus basse, la plus élevée du
T’low, T’high type T
T’Image(x) La représentation textuelle de la valeur x dans le type T.

T’Value(s) La valeur dans le type T de la chaîne de caractères s.

S’event Vrai si un événement s’est produit sur le signal S.


© R. Hertelli

33 Systèmes électroniques embarqués 2020-2021


.
PARTIE III
VHDL EN LOGIQUE COMBINATOIRE
1. Rappel
2. Description par flot de données
3. Description structurale
4. Description comportementale
5. Structures de répétition
6. Structures de sélection
7. Sous-programmes: fonctions et
procédures
© R. Hertelli

34 Systèmes électroniques embarqués 2020-2021


Rappel
 La logique combinatoire conduisent à l’établissement de pures combinaisons
dans lesquelles la notion de temps n’intervient pas. Les états des variables
d’entrée sont seuls à considérer.

 Le corps d’une architecture contient des énoncés qui sont réputés être exécutés de
façon concurrente. Les trois sortes d’énoncés concurrents les plus utilisés pour la
description d’un circuit sont :
• les assignations de signaux concurrentes, choisies et conditionnelles;
• les instanciations de composantes; et,
• les processus.

Énoncés concurrents Style de description du


circuit
Assignations de signaux concurrentes, choisies et conditionnelles Par flot de données
Instanciations de composantes Structurale
Processus Comportementale
© R. Hertelli

35 Systèmes électroniques embarqués 2020-2021


Description par flot de données (1)
1.concurrent signal assignment
 Le modèle d’un circuit numérique par flot de données décrit sa
fonction sans nécessairement définir sa structure. En général, cela
signifie que les valeurs des signaux et ports du circuit sont établies
par des assignation concurrentes de valeurs (concurrent signal
assignment).

 Pour les circuits combinatoires, les assignations concurrentes à des


signaux utilisent souvent des opérateurs logiques qui sont des mots
clés du langage: and, or, nand, nor, xor, xnor, not.

 On peut utiliser des parenthèses pour faire respecter la préséance


requise dans les expressions. Ceci est illustré
© R. Hertelli

36 Systèmes électroniques embarqués 2020-2021


Description par flot de données (2)

library ieee;
use ieee.std_logic_1164.all;

entity combinatoire1 is
port (
A : in std_logic;
B : in std_logic;
C : in std_logic;
F : out std_logic
);
end combinatoire1;

architecture flotDeDonnees1 of combinatoire1 is


begin
F <= not(A and (B xor not(C)));
end flotDeDonnees1;
© R. Hertelli

37 Systèmes électroniques embarqués 2020-2021


Description par flot de données (3)
2.selected signal assignment
 Il est possible de choisir la valeur à assigner à un signal parmi une liste de valeurs possibles
d’une expression. Ce type d’assignation s’appelle une assignation choisie (selected
signal assignment).

architecture flotDeDonnees2 of combinatoire1 is


signal entree : std_logic_vector(2 downto 0);
begin
entree <= (A, B, C);
with entree select
F <=
A B C F
'1' when "000",
0 0 0 1
'1' when "001",
0 0 1 1
'1' when "010",
0 1 0 1
'1' when "011",
0 1 1 1
'0' when "100",
1 0 0 0
'1' when "101",
1 0 1 1
'1' when "110",
1 1 0 1
'0' when "111",
1 1 1 0
'0' when others;
end flotDeDonnees2;
© R. Hertelli

38 Systèmes électroniques embarqués 2020-2021


Description par flot de données (4)
3.conditionnal signal assignment
 Il est aussi possible de choisir la valeur à assigner à un signal selon qu’une condition soit
vraie ou non. Ce type d’assignation s’appelle une assignation conditionnelle
(conditionnal signal assignment),.
 Une troisième architecture est définie pour l’entité combinatoire1. Cette fois, on utilise
l’énoncé when-else, qui est similaire à l’énoncé if-then-else.

architecture flotDeDonnees3 of combinatoire1 is


begin
F <= '1' when (A = '0' or B /= C) else '0';
end flotDeDonnees3;

© R. Hertelli

39 Systèmes électroniques embarqués 2020-2021


Description structurale (1)
 Un circuit numérique peut être défini par sa structure, c'est-à-dire par un assemblage
de blocs.
 Une description structurale correspond à une description par schéma, où les
instanciations de composantes et leurs interconnexions sont énumérées avec du
texte.
 Une description structurale nécessite la déclaration, avec le mot clé component, de
chacune des composantes utilisées.
 Ensuite, on peut instancier chaque composante déclarée autant de fois que
nécessaire.
 On déclare en général des fils avec des objets signal, et on établit les connexions
par des assignations concurrentes.

© R. Hertelli

40 Systèmes électroniques embarqués 2020-2021


Description structurale (2)

 Déclarez les entités des composantes INV, NAND2 et XOR2.

© R. Hertelli

41 Systèmes électroniques embarqués 2020-2021


Description structurale (3)
architecture structurale of combinatoire1 is
component INV is-- inverseur
port (I : in std_logic; O : out std_logic);
end component;
component NAND2 is
port (I0, I1 : in std_logic; O : out std_logic);
end component;
component XOR2 is
port (I0 : in std_logic; I1 : in std_logic; O : out std_logic);
end component;

signal NET18 : std_logic;


signal NET37 : std_logic;

begin

U1 : NAND2 port map(I0 => NET37, I1 => A, O => F);


U2 : XOR2 port map(I0 => NET18, I1 => B, O => NET37);
U3 : INV port map(I => C, O => NET18);

end architecture structurale;

© R. Hertelli

42 Systèmes électroniques embarqués 2020-2021


Description comportementale (1)

 En VHDL, la description comportementale d’un système numérique est faite à


l’aide d’énoncés similaires à ceux d’un langage procédural comme C et Java,
incluant les structures de condition et de répétition.

 Il est alors possible d’abstraire le comportement du circuit à un très haut niveau,


et donc de définir un système complexe en peu de temps, de façon concise,
paramétrable et facilement modifiable.

 Cependant, comme une description comportementale peut prendre multiples


formes, il faut garder en tête la nature du circuit désiré et l’inventaire de
composantes matérielles disponibles pour s’assurer que la description puisse être
synthétisée en un circuit de complexité acceptable.

 Les descriptions comportementales en VHDL se font à l’aide de l’énoncé


process (pour processus) à l’intérieur d’une architecture.
© R. Hertelli

43 Systèmes électroniques embarqués 2020-2021


Description comportementale (2)
 La forme d’un énoncé process est:
[étiquette] : process (liste de sensitivité)
[déclarations de constantes et de variables]
begin
énoncés exéctués séquentiellement;
end process;

 Dans la partie déclarative, on peut retrouver des déclarations de types, d’objets


des catégories variable et constant, de fonctions et de procédure. Les items
déclarés dans cette partie ne sont visibles qu’à l’intérieur du processus.
 Le corps de l’énoncé process suit l’énoncé begin. On y retrouve des énoncés
séquentiels qui décrivent le comportement du processus.
 La liste de sensitivité du processus permet d’établir quand celui-ci doit être
exécuté. Lors de la simulation, un processus est exécuté une première fois quand
la simulation est lancée. Ensuite, il n’est exécuté que lorsqu’au moins un des
signaux de sa liste de sensitivité est modifié. Il est possible qu’un processus
assigne une valeur à un signal qui est présent dans sa liste de sensitivité. Dans ce
cas, le processus est lancé à nouveau dès qu’il se termine. © R. Hertelli

44 Systèmes électroniques embarqués 2020-2021


Description comportementale (3)
 Équivalence d’une assignation concurrente et d’un énoncé process

-- utilisation d’un processus


-- assignation concurrente process (A, B, C)
F <= not(A and (B xor not(C))); begin
F <= not(A and (B xor not(C)));
end process;
 Dans le corps du processus, les énoncés sont évalués de façon séquentielle,
contrairement aux énoncés dans le corps de l’architecture qui sont évalués de façon
concurrente.
 Cependant, les assignations de valeurs aux objets de catégorie signal ne sont
effectuées que lorsque le processus se termine.
 Si plusieurs assignations sont faites à un objet de catégorie signal dans un
processus, seule la dernière sera en fait effectuée. Les expressions contenant des
objets de catégorie signal sont évaluées avec les valeurs présentes lorsque le
processus est lancé. Il faut donc utiliser les assignations multiples et
interdépendantes d’objets de catégorie signal à l’intérieur d’un processus avec
beaucoup de prudence.
© R. Hertelli

45 Systèmes électroniques embarqués 2020-2021


Description comportementale (4)
 Contrairement aux objets de catégorie signal, les objets de catégorie variable
prennent immédiatement la valeur qui leur est assignée par un énoncé. Cela signifie
que leur comportement est identique à celui des variables d’un programme dans un
langage comme C ou Java.

 En VHDL, les variables sont utilisées à l’intérieur des processus pour garder des
valeurs de façon temporaire, pour calculer des valeurs devant être utilisées dans des
expressions subséquentes, ou encore pour séparer de longs calculs sur plusieurs
énoncés.

 Pour assigner une valeur à un objet de la catégorie variable, on utilise le symbole


‘:=’.
 Le symbole ‘<=’ est réservé aux objets de la catégorie signal.

 À l’intérieur d’un processus, on peut utiliser des structures de condition (if-then-


else et case) et de répétition (loop), et on peut appeler des fonctions et des
procédures
© R. Hertelli

46 Systèmes électroniques embarqués 2020-2021


Structures de répétition
 On peut utiliser deux types de structures de répétition à l’intérieur d’un processus :
for et while.
 Pour la boucle for, il n’est pas nécessaire de déclarer le compteur de boucle. La
déclaration du compteur et son type sont implicitement déclarés par la gamme de
valeurs de la boucle.
 structures de répétition
for identificateur in gammeDeValeurs
loop
énoncés;
end loop;

while ( condition de répétition ) loop


énoncés;
end loop;
 Exercice 4 F
I &
 Réalisez une porte ET avec 4 entrées : porteET4

© R. Hertelli

47 Systèmes électroniques embarqués 2020-2021


Structures de sélection
 On peut utiliser deux types de structures de sélection à l’intérieur d’un processus :
if-then-else et case

-- énoncé if-then-else
if ( condition ) then
énoncés;
elsif ( condition ) then
énoncés;
else
énoncés;
end if;

-- énoncé case
case ( expression ) is
when ( choix unique, plusieurs séparés par ‘|’, ou gamme de valeurs )
=> énoncés;
when ( choix unique, plusieurs séparés par ‘|’, ou gamme de valeurs )
=> énoncés;
when others => énoncés;
end case;
© R. Hertelli

48 Systèmes électroniques embarqués 2020-2021


Sous-programmes : fonctions et procédures
 Il y a deux types de sous-programmes en VHDL, les
fonctions et les procédures.

Fonction
 Une fonction est un sous-programme qui retourne un
résultat unique. La valeur retournée peut être d’un type
scalaire ou composé. Une fonction peut accepter des
paramètres en entrée. Ces paramètres ne peuvent pas être
modifiés par la fonction. On utilise un appel de fonction
dans une expression.

© R. Hertelli

49 Systèmes électroniques embarqués 2020-2021


Sous-programmes : fonctions et procédures
 Il y a deux types de sous-programmes en VHDL, les fonctions et les
procédures.
Fonction
 Une fonction est un sous-programme qui retourne un résultat unique.
La valeur retournée peut être d’un type scalaire ou composé. Une
fonction peut accepter des paramètres en entrée. Ces paramètres ne
peuvent pas être modifiés par la fonction. On utilise un appel de
fonction dans une expression.

function porteET(V: std_logic_vector) return std_logic is


variable resultat : std_logic := '1';
begin
for k in V'range loop
resultat := resultat and V(k);
end loop;
return resultat;
end; © R. Hertelli

50 Systèmes électroniques embarqués 2020-2021


Sous-programmes : fonctions et procédures
Procedure
 Une procédure est un sous-programme avec une liste de paramètres.
Comme pour les ports d’une entité, les paramètres peuvent avoir les
modes in, out et inout, permettant ainsi à la procédure d’accepter des
valeurs en entrée, de retourner des résultats, et de modifier des
paramètres qui lui sont passés. Alors qu’un appel de fonction est
utilisé dans une expression, un appel de procédure est considéré
comme un énoncé concurrent.
 Les fonctions et les procédures peuvent être surchargées, c'est-à-dire
que deux peuvent avoir le même identificateur mais une liste de
paramètres différents.
 Les opérateurs de VHDL peuvent aussi être surchargés en utilisant le
nom de l’opérateur comme identificateur du sous-programme, placé
entre guillemets.
© R. Hertelli

51 Systèmes électroniques embarqués 2020-2021

Vous aimerez peut-être aussi