Vous êtes sur la page 1sur 82

Langage de modélisation des circuits numériques

VHDL

Pr: A.AMMOUR
INTRODUCTION GENERALE ET OBJECTIFS
 La conception d'un système numérique fait souvent appel à l'utilisation de
microprocesseurs/microcontrôleurs faciles d'utilisation et peu onéreux, mais
souvent insuffisants dans les applications dont les temps de traitements doivent
être optimisés ou dont les données à traiter en même temps sont trop nombreuses.

 L'utilisation d'un composant à "logique programmable" (FPGA) – dont l'architecture


correspondra à celle voulue par le concepteur – devient alors incontournable.
Mais comment concevoir un système numérique dans un tel composant ?
Une réponse évidente consiste à utiliser un langage de description matérielle tel
que VHDL (normalisé IEEE).

 A la fin de ce cours, vous serez capables de :

•Appréhender les fonctionnalités du VHDL en conception de systèmes numériques.


•Etre capable de décrire un système numérique simple en VHDL ainsi que les
stimuli de test associé.
•Comprendre et utiliser un composant à logique programmable de type FPGA
(Altera).
Pr: A.AMMOUR 2
Chapitre 1:
Introduction au langage VHDL
Plan
INTRODUCTION

ORGANISATION DU LANGAGE

TYPES- EXPRESSIONS

DESCRIPTION STRUCTURELLE

DESCRIPTION COMPORTEMENTALE

SIMULATION/SYNTHESE
Pr: A.AMMOUR 4
1-INTRODUCTION : Qu’est ce que le VHDL?
 L’abréviation VHDL signifie VHSIC Hardware Description Langage (VHSIC : Very
High Speed Integrated Circuit). Ce langage a été écrit dans les années 70 pour
fournir un langage de haut niveau adapté à la description fonctionnelle des
systèmes complexes.

 On l’a ensuite étendu en lui rajoutant des extensions pour permettre la


conception (synthèse) de circuits logiques programmables (P.L.D. Programmable
Logic Device).

 Auparavant pour décrire le fonctionnement d’un circuit électronique


programmable les techniciens et les ingénieurs utilisaient des langages de bas
niveau ou plus simplement un outil de saisie de schémas.

 Actuellement la densité de fonctions logiques (portes et bascules) intégrée dans


les PLDs est telle (plusieurs milliers de portes voire millions de portes) qu’il n’est
plus possible d’utiliser les outils d’hier pour développer les circuits d’aujourd’hui.
Pr: A.AMMOUR 5
1-INTRODUCTION : Qu’est ce que le VHDL?
 Les sociétés de développement et les ingénieurs ont voulu
s’affranchir des contraintes technologiques des circuits. Ils ont
donc créé des langages dits de haut niveau à savoir VHDL et
VERILOG.
 Ce langage permet de spécifier les circuits numériques de façon
exécutable.

 En effet les instructions écrites dans ces langages se traduisent


par une configuration logique de portes et de bascules qui est
intégrée à l’intérieur des circuits. C’est pour cela qu’on préfère
parler de description VHDL ou VERILOG que de langage.

Pr: A.AMMOUR 6
1-INTRODUCTION : Simulation/Synthèse

Pr: A.AMMOUR 7
1-INTRODUCTION : Exemple introductif

Description en
VHDL d’un
décodeur

Pr: A.AMMOUR 8
2- ORGANISATION DU LANGUAGE
2-1 Principes d'utilisation du langage

Pour simuler ou effectuer la synthèse logique d'un modèle VHDL, il


faut d'abord le compiler (analyser).

Les résultats d'analyse sont stockés dans une bibliothèque.

Il est possible de faire référence à un objet préalablement analysé en


prenant soin de préciser dans quelle bibliothèque se trouve cet objet.

Une fois la compilation terminée, il faut effectuer l'édition de lien (on


parle d'élaboration pour le VHDL).

Pr: A.AMMOUR 9
2- ORGANISATION DU LANGUAGE
2-3 Convention lexical
 Les conventions lexicales de vhdl sont les mêmes que celles utilisées en C.

 Casse: VHDL est insensible à la casse. Un mot en majuscule est identique à un mot en
minuscule. Il est cependant conseillé d'avoir des règles d'écriture cohérentes. Par
exemple, les mots réservés du langage peuvent être en majuscule et les autres mots
en minuscule. Azerty ≡ aZERTY

 Commentaires: Les commentaires doivent être inclus dans le code, pour augmenter
la lisibilité et la documentation. Ils commencent par 2 tirets (--),

 Identificateurs : Ce sont les noms de variables, de signaux, de fonctions, ...


•Ils ne peuvent contenir que des lettres, des chiffres et le "underscore".
•Ils doivent commencer par une lettre.
•Ils ne peuvent pas contenir d'espace.
•Les mots-clefs du langage ne peuvent pas être utilisés comme identificateurs.

10
Pr: A.AMMOUR
2- ORGANISATION DU LANGUAGE
2-3 Convention lexical

 Les conventions lexicales de vhdl sont les mêmes que celles utilisées en C.

 Expressions: Elles se terminent par un point virgule.

 Littéraux: Ce sont des valeurs explicites :

•67 est un littéral pour le type entier.


•'0' est un littéral pour un bit.
•"001" O"562" X"FF1" sont des littéraux pour les vecteurs de bits.
•"chaine" est un littéral de type chaine de caractères.

11
Pr: A.AMMOUR
2- ORGANISATION DU LANGUAGE
2-3 Bibliothèques

 Les bibliothèques permettent à plusieurs concepteurs de travailler ensemble sur le même


projet et rendent le langage indépendant du système d’exploitation de la machine hôte.

 La création de la bibliothèque ne fait pas partie du langage VHDL. Chaque outil VHDL a ses
propres règles de création. Par exemple, avec le simulateur ModelSim, il faut créer la
bibliothèque avec la commande : vlib BIB;

 L'accès à la bibliothèque fait partie du langage VHDL. Pour accéder à la bibliothèque BIB il
est nécessaire de la déclarer : library BIB;

 La bibliothèque par défaut est WORK. WORK est aussi le nom symbolique de la bibliothèque
dans laquelle sont stockés les résultats.

 La bibliothèque STD est une bibliothèque standard fournie avec le langage , elle contient des
définitions des types et des fonctions de base (integer, BIT ,...) dans le
paquetage STANDARD et des fonctions sur les caractères dans le paquetage TEXTIO.

Pr: A.AMMOUR 10
2- ORGANISATION DU LANGUAGE
2-3 Bibliothèques

 Par défaut, les bibliothèques STD et WORK n’ont pas besoin d’être déclarées pour
être utilisables. Tout se passe comme si un programme VHDL commençait toujours
par : library STD; library WORK;

 Il est très pratique d'utiliser les paquetages des bibliothèques ce qui permet
d'utiliser des objets (constantes, fonctions, composants,...) qui peuvent être définis
dans une bibliothèque différente de celle en cours. C'est le cas des bibliothèques
standards comme l'IEEE qui définit des types et objets normalisés compris par les
outils de synthèse.

 Pour utiliser le contenu d’un paquetage, il faut déclarer la bibliothèque dans


laquelle il se trouve (sauf, éventuellement, si c’est WORK) et le paquetage
use BIBLIOTHEQUE.PAQUETAGE.all; ou, si l’on ne veut pas utiliser tout le paquetage
mais un seul objet : use BIBLIOTHEQUE.PAQUETAGE.OBJET;

Pr: A.AMMOUR 13
2- ORGANISATION DU LANGUAGE
2-1 Structure du langage

 L'analyse d'un modèle VHDL peut s'effectuer sur des parties du code ou "unités de
compilation". Il existe 5 types d'unités de compilation :

•L'entité
•L'architecture
•Le paquetage
•Le corps du paquetage
•La configuration

 L'entité et l'architecture sont des unités de compilation obligatoires pour décrire


un modèle. Les autres unités sont optionnelles mais quasiment indispensables pour
concevoir des gros circuits nécessitant une méthode de conception efficace.

 Une unité de compilation doit être écrite dans le même fichier et un même fichier
peut contenir plusieurs unités de compilation.

Pr: A.AMMOUR 14
2- ORGANISATION DU LANGUAGE
2-4 Entité/Architecture

In 1 Out 1
In 2 Bloc A
In 3 Out 2

Vue externe : Définition de l'entité


Bloc A

In 1
Bloc B Bloc C Out 1
In 2

In 3 Bloc D Bloc E Out 2

Vue interne : Définition de l'architecture


Pr: A.AMMOUR 15
2- ORGANISATION DU LANGUAGE
2-4 Entité

 L'entité est la description de l'interface du circuit . Elle correspond au symbole dans les
représentations schématiques :

 L'entité précise :
•le nom du circuit.
•Les ports d'entrée-sortie :
• Leur nom.
• Leur direction (in, out, inout,buffer). symbole de l'additionneur 1 bit
• Leur type (bit, bit_vector, integer, std_logic,...).
•Les paramètres éventuels pour les modèles générique.
 L'écriture de l'entité pour l'additioneur 1 bit fa peut être la façon
suivante:

 Il faut noter la déclaration préalable de la bibliothèque IEEE et des


paquetages qui permet d'utiliser le type std_logic (std_logic_1164)
ainsi que des fonctions arithmétiques (numeric_std).

Pr: A.AMMOUR 16
2- ORGANISATION DU LANGUAGE
2-5 Architecture

 L'architecture est la description interne du circuit. Elle est toujours associée à une entité.

 Une même entité peut avoir plusieurs architecture.

 Le mécanisme de configuration (décrit dans le VHDL structurel) permet d'indiquer


l'architecture rattachée à une entité.

 L'exemple suivant montre un schéma de l'additionneur 1 bit FA (Full Additionner).

Pr: A.AMMOUR 17
2- ORGANISATION DU LANGUAGE
2-5 Architecture

 Deux architectures du FA possibles écrites en VHDL :

Pr: A.AMMOUR 18
2- ORGANISATION DU LANGUAGE
2-5 Architecture

 VHDL est un langage très déclaratif qui permet au compilateur d'effectuer des
vérifications poussées et fiabiliser ainsi l'écriture d'un modèle.

 Dans une architecture il est nécessaire de déclarer les objets utilisés et leur type avant
la zone décrivant l'architecture (le corps de l'architecture situé entre begin ... end ).

 Parmi les objets très utilisés, figurent les composants (correspondent effectivement aux
composants dont on a besoin dans l'architecture pour une description structurelle) et
les signaux (équipotentielles reliant les instances de composants et les instructions
"concurrentes" et).

 Les ports déclarés dans l'entité sont des signaux utilisables dans l'architecture, il ne
faut pas les redéclarer.

Pr: A.AMMOUR 19
2- ORGANISATION DU LANGUAGE
2-5 Architecture

 L'exemple ci-dessous illustre l'architecture d'un additionneur 1 bit avec les signaux
A, B , Cin (qui sont des ports donc des signaux implicites) , le signal Si et le
composant MAJ .

 Le schéma équivalent de l'additionneur 1 bit peut être le suivant avec 1 composant


MAJ et 2 portes XOR qui peuvent être codées d'une façon comportementale.

Pr: A.AMMOUR 20
2- ORGANISATION DU LANGUAGE
2-5 Architecture
Entité de l'additioneur 1 bit FA

La partie déclarative de l'architecture, avant le mot clé begin, permet de déclarer le


signal SI et le composant MAJ.

Dans le corps de l'architecture (entre begin et end) se trouvent les 3 types


d'instructions concurrentes de VHDL qui peuvent être écrites dans n'importe quel ordre

• Un processus avec le mot clé process.


• Une instruction concurrente d'affectation S <= SI xor Cin ( on dit S reçoit Si xor Cin),
• Une instruction d'appel de composant (instanciation) ou un nom d'instance est donné
(INST_MAJ) de façon à pouvoir appeler plusieurs composants du même type.

Les ports sont des signaux implicites dont le sens doit être respecté. Le compilateur
VHDL aurait mis une erreur si dans le corps de l'architecture s'était trouvé l'instruction:
Cout <= S and B car S est une sortie qui ne peut pas servir d'entrée.

Pr: A.AMMOUR 21
2- ORGANISATION DU LANGUAGE
2-6 Structure d’une description VHDL

Pr: A.AMMOUR 22
2- ORGANISATION DU LANGUAGE
2-7 Paquetage

 Le paquetage est une collection d'objets réutilisables. Il se compose de 2


unités de compilation :
• La déclaration du paquetage
• Le corps du paquetage

 Le contenu de la déclaration du paquetage est visible depuis l'extérieur.

 Le corps décrit la fonction des objets nécessaires à l'utilisation du


paquetage.

 Lorsqu'une unité de compilation utilise un paquetage, la déclaration de


celui-ci doit être analysée en premier.

 Le corps du paquetage n'est pas toujours nécessaire.

Pr: A.AMMOUR 23
2- ORGANISATION DU LANGUAGE
2-7 Paquetage
 Le paquetage PAQ est déclaré avec le mot clé package. Des
 Exemple de déclaration de paquetage: nouveaux types type et sous-types subtype sont déclarés.
Dans cet exemple on déclare le type MOT qui est un vecteur de
8 bit, un type RAM qui est un tableau de MOT et un sous
type MRAM qui est une RAM de 1024 MOTS.

 Des constantes "constant" N_BITS et REL sont déclarées.


N_BITS est un entier > 0 "positive" et REL est un entier
naturel "NATURAL" et est initialisée à la valeur 8.

 Le composant "component" BRIQUE est déclaré ici en


précisnat ces ports et paramètres. La déclaration d'un
composant permet son instanciation dans l'architecture de
façon à effectuer une description structurelle

 Le sous-programme ou fonction "function" MIN est déclarée


dans le paquetage. La description de la fonction sera effectuée
dans le corps du paquetage.

Pr: A.AMMOUR 24
2- ORGANISATION DU LANGUAGE
2-7 Paquetage

 Exemple de corps de paquetage


 Le corps du paquetage "package body"
permet de décrire les sous-programmes et
d'initialiser les constantes.

 La constante N_BITS est initialisée ici. Elle


aurait pu être utilisée localement au corps du
sous programme sans être visible de
l'extérieur.

 Les fonctions peuvent être surchargées en


nom ou en type. Ici 2 fonctions MIN sont
décrites , l'une avec 2 entrées et l'autre avec 3
entrées utilisant celle à 2 entrées.

Pr: A.AMMOUR 25
3- TYPES - EXPRESSIONS
3-1 SIGNAUX

 Signal = Toute grandeur qui peut exister après le processus de synthèse et qui peu être
visualisée sur un oscilloscope si on en interdit la simplification. Signal = grandeur physique.

 Les entrées, sorties et les entrées sorties de l’entité sont des signaux externes.

 Déclaration des signaux internes à l’architecture entre les mots clé architecture et begin
avec la syntaxe.

Signal nomDusignal : typeDusignal := valeurInitiale;

 Des signaux systématiquement typé a l’image de ce qui existe en C,C++,Java…

 Typage fort:

 Contrôle stricte
 Imposant des fonctions de conversion et de surcharge d’opérateurs pour passer d’un
type à un autre

Pr: A.AMMOUR 26
3- TYPES - EXPRESSIONS
3-2 TYPES VHDL est un langage typé où il est obligatoire de spécifier le type des objets utilisés

 bit :
• 2 valeurs ‘0’ ou ‘1’.
• Peu utilisé car insuffisant pour la synthèse et la simulation quand on cible des CPLD, FPGA,…

 Boolean
• 2 valeurs possibles : True ou False.
• Type de référence pour les structures conditionnelles.

 STD_LOGIC
• 3 valeurs ayant un sens physique
- ‘0’, ‘1’ et ‘Z’ pour la haute impédance
 6 valeurs utiles pour la simulation voire la description
 ‘U’ pour non initialisé
 ‘X’ pour un résultat inconnu
 ‘L’ pour un niveau bas probable
 ‘H’ pour un niveau haut probable
 ‘W’ niveau non qualifiable par ‘L’ ou ‘H’
 ‘-’ Sans importance
Pr: A.AMMOUR 27
3- TYPES - EXPRESSIONS
3-2 TYPES
 Types logiques et vectoriels

• Assimilables à des tableaux d’éléments d’un type scalaire.


• STD_LOGIC_VECTOR = vecteur de STD_LOGIC
a= 1 0 0 1
 a de type STD_LOGIC_VECTOR( 3 down to 0)
 a(3) désigne le poids fort a(3) a(2) a(1) a(0)
 a(0) est le poids faible

 b de type STD_LOGIC_VECTOR( 1 to 4)
 b(1) est le poids fort et b(4) le poids faible. b= 1 0 0 1

b(1) b(2) b(3) b(4)


Note 1 : le poids fort est toujours à gauche.
Note 2: les signaux représentant des données numériques codées en binaire sur N bits
doivent être déclarés sous la forme de STD_LOGIC_VECTOR(N-1 downto 0).

 SIGNED ET UNSIGNED

Ce sont des vecteurs de STD_LOGIC utilisables comme des STD_LOGIC VECTOR et pour lesquels les
opérations arithmétiques sont définies pour des représentations signées et non signées dans le
paquetage NUMERIC_STD, Pr: A.AMMOUR 28
3- TYPES - EXPRESSIONS
3-2 TYPES
 Types mathématiques

 INTEGER
• type entier de référence (32 bits par défaut et limités à 32 bits sur certains simulateurs).
• Fonctions de conversion sont disponibles pour passer des INTEGER au SIGNED ou UNSIGNED
et réciproquement
• Mot clé range
 Permet de spécifier l’intervalle des valeurs d’un INTEGER au moment de sa déclaration
 Exemple : b: integer range 0 to 20; -- b est un entier limité à l’intervalle [0;20]

 NATURAL( sous_type d’INTEGER):


• Entier positif ou nul

 POSITIVE(sous_type d’INTEGER)
• Entier positif

 REAL
• Type réel en virgule flottante

• CARATERE OU CHAINE DE CARACTERES


Pr: A.AMMOUR 29
• CHAR / STRING
3- TYPES - EXPRESSIONS
3-3 DECLARATION DE SIGNAUX
 Signaux externes = Ports ( déjà vus)

 Signaux internes à l’architecture

architecture Behavioral of exempleSyntaxe is


Signal A: STD_LOGIC;
Signal B, C,D,E,F,G :STD_LOGIC;
Signal retenue : STD_LOGIC := ‘1’;
Signal compteurH : STD_LOGIC_VECTOR(9 downto 0);
Signal compteurV : STD_LOGIC_VECTOR(0 to 9) : (others => ‘0’);
Signal operande1, operande2 : STD_LOGIC_VECTOR(3 downto 0)= ‘’0000’’;
Signal afficheur7segments : STD_LOGIC_VECTOR(1 to 7);
Signal X,Y : INTEGER range 0 to 1023;
begin
 Déclaration des constantes
architecture Behavioral of exempleSyntaxe is
constant CHIFFRE_1 : STD_LOGIC_VECTOR(1 to 7) := ‘’ 0110000’’;
constant CHIFFRE_2 : STD_LOGIC_VECTOR(1 to 7) := ‘’ 1111000’’;
begin
Pr: A.AMMOUR 30
3- TYPES - EXPRESSIONS
3-4 OPERATEURS EN VHDL

 Operateurs d’affectation pour les signaux: <=


Non_du_signal <= expression;

 Sous réserves qu’ils soient définies pour les types de signaux utilisés, expression peut être
écrite avec les opérateurs suivants et à partir du résultat de fonctions décrites en VHDL.

 Des opérateurs logiques :

• and, or, xor ( ou exclusif)


• not complément
• nand, or

 Des opérateurs arithmétiques ( pour les types INTEGER, SIGNED, et UNSIGNED)


• ‘+’,’-’,’*’,’/’, mod (modulo), rem(reste)
• Un opérateur de concaténation pour les STD, STD_LOGIC_VECTOR, CHAR, STRING
• &
 Des opérateurs relationnels pour les types INTEGER, SIGNED et UNSIGNED
<,>,=,>=,<=,/=(différent de)/=.

Pr: A.AMMOUR 31
3- TYPES - EXPRESSIONS
3-4 OPERATEURS EN VHDL

 Exemples d’affectation:

architecture Behavioral of exempleSyntaxe is


Signal A,B, C,D,E,F,G :STD_LOGIC;
Signal entrees: STD_LOGIC_VECTOR(3 downto 0);
Signal afficheur7segments : STD_LOGIC_VECTOR(1 to 7);
Signal opCode : STD_LOGIC_VECTOR(15 downto 0);
Signal instruction : STD_LOGIC_VECTOR(4 downto 0);
Signal X,Y, P: INTEGER range -32768 to 32767;
begin
C<=not(not(E3) and not(E2) and E1 and not(E0);
entrees <= E3 & E2 & E1 & E0;
A <= afficheurs7segments(1);
G<= afficheurs7segments(7);
Instruction <=opCode(15 downto 11);
P <= X*Y;
end Behavioral

Pr: A.AMMOUR 32
4- DESCRIPTION STRUCTURELLE
4-1 OBJECTIFS
 La description structurelle d'un circuit complexe en vhdl présente de nombreux avantages :

• Une architecture hiérarchique compréhensible : il est plus simple de séparer un circuit en


un ensemble de blocs plus petits, ayant des fonctions bien identifiées. Ces blocs pourront
alors être décrits sous forme comportementale, ou bien à leur tour être séparés en blocs
encore plus simples.

• Une synthèse logique efficace : la synthèse est un processus lent (en terme de temps de
calcul). Plus un bloc est gros et complexe, plus sa synthèse prendra du temps. Il vaut donc
mieux travailler sur des blocs plus petits, plus simples à synthétiser, et rassembler le tout à la
fin.

 L'objectif de cette partie est de voir précisément comment coder une représentation
structurelle d'un circuit, autrement dit :

• Comment déclarer des blocs (qu'on appellera composant)


• Comment utiliser un composant (qui devient une "instance") et déclarer la façon dont il
est connecté.

Pr: A.AMMOUR 33
4- DESCRIPTION STRUCTURELLE
4-2 ELEMENTS DE BASE
 VHDL permet l'assemblage de "composants" ce qui constitue une description structurelle.

 Ce composant peut être appelé plusieurs fois dans un même circuit.

 Pour différencier ces mêmes composants, il est nécessaire de leur donner un nom d’ "instance".
L'appel d'un composant se dit aussi « instanciation ».

 De façon à instancier un composant il est nécessaire de connaître :


• Le prototype du composant (ses ports d'entrée et de sortie). La directive component peut être
utilisée à cette fin.
• A quelle entité et architecture est lié chaque instance de composant. Ce lien peut être connu
grâce à l'unité de configuration.

 Il est important de noter :


• La déclaration du composant (directive component ) est redondante textuellement avec celle
de l'entité associée mais permet :
1. Une compilation indépendante entre l'entité associée au composant et le circuit utilisant le
composant.
2. La conception descendante. Le composant peut être déclaré avant l'entité associée.
Pr: A.AMMOUR 34
3- ARCHITECTURE STRUCTURELLE
4-3 ELEMENTS DE BASE

 La configuration est une unité de compilation optionnelle, très utile pour les gros circuits. Par
exemple pour accélérer la simulation , un même composant peut être associé à un couple
entité/architecture détaillé et synthétisable ou un autre couple plus abstrait et plus rapide à
simuler.

 Pour ne pas utiliser de configuration, une règle fréquente est d'utiliser le même nom pour le
composant et l'entité associée, c'est le cas pour ModelSim et les outils de synthèse FPGA.

Pr: A.AMMOUR 35
4- ARCHITECTURE STRUCTURELLE
4-5 DÉCLARATION ET INSTANCIATION DES COMPOSANTS

 Déclaration

• Le mot clé component sert à déclarer le prototype d'interconnexion. La syntaxe est presque
identique à celle de l'entité :
• Pour créer rapidement un composant, une
opération copier/coller de l'entité en
enlevant le litéral "IS" suffit.

 Instanciation

L'instanciation d'un composant se fait dans le corps de l'architecture de


cette façon :

Pr: A.AMMOUR 36
4- ARCHITECTURE STRUCTURELLE
4-5 DÉCLARATION ET INSTANCIATION DES COMPOSANTS
Exemple:

Pr: A.AMMOUR 37
4- ARCHITECTURE STRUCTURELLE
4-6 GENERECITE

 Déclaration

• Un composant peut être générique en définissant les paramètres qui seront vus comme des
constantes à chaque instance de composant.
• Il est ainsi possible de n'avoir qu'un seul composant pour différentes instances ayant des
paramètres différents.
• Dans la déclaration du composant, la clause generic sert à passer les paramètres au
composant. Dans l'exemple suivant, l'entier positif N indique le nombre de bits de
l'additionneur.

Pr: A.AMMOUR 38
4- ARCHITECTURE STRUCTURELLE
4-6 GENERECITE

 De même l'entité associée au composant doit comporter la clause generic pour déclarer le(s)
paramètre(s)

Pr: A.AMMOUR 39
4- ARCHITECTURE STRUCTURELLE
4-6 GENERECITE

 Instanciation :

L'instanciation d'un composant géneric se fait dans le corps de l'architecture de cette façon :

Pr: A.AMMOUR 40
4- ARCHITECTURE STRUCTURELLE
4-6 GENERECITE

 Instanciation de multiples composants

Les paramètres ne sont parfois pas suffisants pour écrire un code générique : on peut aussi
vouloir instancier un nombre variable de composants (en fonction d'un paramètre, par exemple).
Ceci est fait au moyen des mots-clef for generate..et if generate.

Exemple 1 : on veut décrire un multiplieur générique, tel que :

•L'architecture Carry Lookhead (CLA) est utilisée s'il doit manipuler des nombres de largeur
inférieure à 8 bits,
•L'architecture en arbre de Wallace est utilisée sinon.

L'exemple suivant fait appel à la clause IF GENERATE en testant le paramètre width.


Notez que : le ELSE n'existe pas (oubli de VHDL ?) et qu'il faut refaire un 2ème IF.

1.l'instruction IF GENERATE a besoin obligatoirement d'une étiquette

Pr: A.AMMOUR 41
4- ARCHITECTURE STRUCTURELLE
4-6 GENERECITE

Pr: A.AMMOUR 42
4- ARCHITECTURE STRUCTURELLE
4-6 GENERECITE

Exemple 2 : l'exemple classique de l'additionneur n bits... On utilise ici une boucle FOR
GENERATE pour instancier automatiquement les différentes primitives ainsi que les noeuds les
connectant entre elles. Notez qu'il n'est pas nécessaire de déclarer la variable de boucle mais que
l'instruction FOR GENERATE nécessite une étiquette.

Pr: A.AMMOUR 43
4- ARCHITECTURE STRUCTURELLE
4-4 Banc de test (Test banch)

Exemple : le circuit top, servant à simuler le circuit "module a" doit être autonome : son
entité n'a pas d'entrée ni de sortie.

Pr: A.AMMOUR 44
5- DESCRIPTION COMPORTEMENTALE
5-1 OBJECTIFS

 Dans ce type de descriptions, il y a plusieurs niveaux:

 Nous allons ici étudier les principales descriptions :

• Celle au niveau des équations booléennes, appelée aussi parfois flot de données. Ce
type de représentation modélise les circuits combinatoires, non pas en instanciant des
portes, mais sous forme d'équations booléennes.
• Pour les circuits séquentiels, il faudra faire appel à un niveau plus abstrait.

 Les objectifs de ce chapitre sont de comprendre :

•Les différences entre instructions concurrentes et séquentielles.


•Les processus et les différences entre variable et signal.
•Les structures de contrôle utilisées dans les processus.
•Les affectations concurrentes des signaux, les raccourcis d'écriture.
•Les différents types de délais dans les affectations.
•Comment vérifier une propriété par les assertions.
•Les différents types de sous-programmes.

Pr: A.AMMOUR 45
5- DESCRIPTION COMPORTEMENTALE
5-1 INSTRUCTIONS CONCURRENTES ET SEQUENTIELLES

 Comme tout langage de description de matériel, le VHDL décrit des structures par
assemblage d'instructions concurrentes dont l'ordre d'écriture n'a aucune
importance, contrairement aux instructions séquentielles qui sont exécutées les
unes après les autres, comme c'est le cas du C.

 Il existe 3 principales instructions concurrentes :


1. Les affectations concurrentes de signaux, qui peuvent être simples,
conditionnelles (when…else) ou sélectives (with…select).
2. Les processus, qui offrent la possibilité d'utiliser des instructions séquentielles,
plus naturelles pour l'homme.
3. Les instanciations de composants (étudiées aux chapitre précédent à propos du
VHDL structurel).

 Les objets manipulés par les instructions concurrentes sont les signaux (signal).

 Les processus peuvent avoir leurs propres variables locales (variable).


Pr: A.AMMOUR 46
5- DESCRIPTION COMPORTEMENTALE
5-2 SYNTAXE HORS PROCESS

 Affectation inconditionnelle :

 Affectation conditionnelle WHEN…ELSE :

 C’est une instruction qui a une seule cible mais peut


avoir plusieurs expressions.
 Les conditions sont évaluées séquentiellement, si
une condition est vrai alors l’expression correspondante
est exécutée.

 Affectation sélective:

 C’est une affectation d’une valeur suivant l’état de


l’expression testée

Pr: A.AMMOUR 47
5- DESCRIPTION COMPORTEMENTALE
5-2 EXERCICE: UNITÉ ARITHMÉTIQUE SIMPLE

 Unité arithmétique simple :

 Ecrire le code VHDL qui décrit le fonctionnement de ce circuit en utilisant :

 L’affectation conditionnelle when…else


 L’affectation sélective with…select
 Des signaux de type STD_LOGIC_VECTOR

Pr: A.AMMOUR 48
5- DESCRIPTION COMPORTEMENTALE
5-2 NOTION DU PROCESS:

 Toutes les instructions concurrentes sont des processus, mais la déclaration explicite de processus
par le mot clé process permet de construire sa propre instruction par le biais d'instruction
séquentielles internes au processus.

 Les process sont généralement utilisée pour :


 Réaliser des blocs combinatoires avec une autre approche différente de celle du domaine
concurrent mais aussi des blocs séquentiels .
 Prise en compte aisé des phénomènes synchrones ( cadencé par un signal d’horloge).
 Ecriture de banc de test ( test banch) .

Pr: A.AMMOUR 49
5- DESCRIPTION COMPORTEMENTALE
5-2 NOTION DU PROCESS:
 Le fonctionnement du processus est régi par les règles suivantes:

1.Un processus est une boucle infinie , lorsqu'il arrive à la fin du code, il reprend
automatiquement au début.
2.Un processus doit être sensible à des points d'arrêt de façon à le synchroniser. La
synchronisation est donc indiquée par un point d'arrêt qui est évènement particulier. Il existe 2
types de points d'arrêts :

 Le processus est associé à une "liste de sensibilité" qui contient une liste de signaux qui
réveillent le processus lors d'un changement d'un des signaux. Sa syntaxe
est process(liste de signaux)
 Le processus a des instructions d'arrêt wait dans sa description interne. Le wait est sensible
soit à un signal soit à un temps physique

3. Les variables sont internes au processus et sont affectées immédiatement, contrairement aux
signaux qui eux ne sont pas affectés directement mais par le biais de leur échéancier qui est mis à
jour en fin de processus avec la nouvelle valeur et le temps d'affectation correspond à un delta-
cycle après le signal ayant réveillé le processus.

Pr: A.AMMOUR 50
5- DESCRIPTION COMPORTEMENTALE
5-2 PROCESSUS ET SYNCHRONISATION:

Synchronisation des processus par liste de sensibilité

Nom du process: process(liste de sensibilité)


 Liste de sensibilité = liste des signaux dont le changement d’état lance le calcul du process.
 La liste de sensibilité peut être vide = on ôte les parenthèses. Dans ce cas, le process est éxecuté
sans condition.
 Le nommage du process est facultatif.

 L' exemple suivant permet de coder la logique combinatoire.

Pr: A.AMMOUR 51
5- DESCRIPTION COMPORTEMENTALE
5-2 PROCESSUS ET SYNCHRONISATION:

Synchronisation des processus par liste de sensibilité

Pr: A.AMMOUR 52
5- DESCRIPTION COMPORTEMENTALE
5-2 PROCESSUS ET SYNCHRONISATION:

Synchronisation des processus par liste de sensibilité

 Notez la présence dans la liste de sensibilité des entrées uniquement.

 Attention un processus correspondra à de la logique combinatoire seulement si :

 La liste de sensibilité contient TOUTES les entrées, sinon la fonctionnalité n'est


pas respectée car l'entrée omise ne réveille pas le processus.
 Il faut traiter TOUS les cas dans le chemin de contrôle, sinon il y a implicitement
mémorisation de la sortie pour les cas non traités.

 Si ces règles ne sont pas respectées, le processus est séquentiel.

Pr: A.AMMOUR 53
5- DESCRIPTION COMPORTEMENTALE
5-2 PROCESSUS ET SYNCHRONISATION:

Synchronisation des processus par liste de sensibilité

Bascule D : processus séquentiel

Active sur front montant Active sur front montant


Active sur niveau haut
celar asynchrone clear synchrone

Pr: A.AMMOUR 54
5- DESCRIPTION COMPORTEMENTALE
5-2 PROCESSUS ET SYNCHRONISATION:

 La fonction « rising_edge »
 Cette fonction, définie dans ≪ std_logic_1164 ≫, est très utile pour
détecter les fronts montants d’une horloge.
 Elle vérifie bien que le signal part de ‘0’ avant de passer a ‘1’.
 Il existe une fonction similaire qui teste les fronts descendants :
≪ falling_edge ≫

Pr: A.AMMOUR 55
5- DESCRIPTION COMPORTEMENTALE
5-2 PROCESSUS ET SYNCHRONISATION:

Synchronisation des processus par WAIT


 L'instruction WAIT permet de mettre des points d'arrêt dans le corps du processus. La syntaxe de
l'instruction est la suivante :

wait [on S1,S2,...] [until CONDITION] [for DUREE]


Où S1 et S2,.. sont des signaux, CONDITION est une expression générant un booléen, et DUREE est le
temps physique d'attente.

 L’instruction wait permet d’attendre:

1. Qu’un des signaux d’une liste soit modifié


2. Qu’une condition soit vérifiée
3. Qu’un certain temps se soit écoulé

Pr: A.AMMOUR 56
5- DESCRIPTION COMPORTEMENTALE
5-2 PROCESSUS ET SYNCHRONISATION:

Synchronisation des processus par WAIT


 L'exemple suivant génère une trame de 10 impulsions .

Pr: A.AMMOUR 57
5- DESCRIPTION COMPORTEMENTALE
5-2 PROCESSUS ET SYNCHRONISATION:

Exercice :

Ecrivez un processus permettant de générer un train d'impulsions


toutes les microsecondes : pas d'impulsion, puis une impulsions
de100 ns puis une impulsions de 200ns, jusqu'à 1 microseconde
comme le montre la figure ci-dessous.

Pr: A.AMMOUR 58
5- DESCRIPTION COMPORTEMENTALE
5-2 PROCESSUS ET SYNCHRONISATION:

Forme du signal généré

Pr: A.AMMOUR 59
5- DESCRIPTION COMPORTEMENTALE
5-3 SIGNAUX VS VARIABLES:

 Signaux :
 Les signaux sont équivalents à des variables globales assurant les communications
entre processus.

 Les signaux ne sont pas mis à jour tout de suite mais à la fin du processus avec un
delta-cycle de retard par rapport au signal ayant déclenché le processus.

 Les signaux sont affectés avec l'instruction <= qui se dit aussi "reçoit" plutôt que
"égal" car le signal va recevoir cette valeur en fin de processus avec un delta-cycle de
retard.

Pr: A.AMMOUR 60
5- DESCRIPTION COMPORTEMENTALE
5-3 SIGNAUX VS VARIABLES:

 Variables :
 Les variables sont locales à chaque processus et sont mises à jour immédiatement.

 Elles sont très utiles pour effectuer un codage séquentiel classique comme avec le
langage C.

 Les variables sont déclarées juste avant le corps du processus et sont affectées avec
l'instruction d'affectation immédiate := de façon à bien ne pas confondre avec
l'instruction <= "reçoit" pour les signaux.

 Les variables gardent leur valeur quand le processus est terminé.

Pr: A.AMMOUR 61
5- DESCRIPTION COMPORTEMENTALE
5-3 SIGNAUX VS VARIABLES:

Exemple: :

Si trigger change à t=10, alors var1=5,


var2=5, var3=5 et à t=10+D, sum=15

Pr: A.AMMOUR 62
5- DESCRIPTION COMPORTEMENTALE
5-3 SIGNAUX VS VARIABLES:

Exemple: :

Si trigger change à t=10, tous les


signaux sont mis à jour à t=10+D :
sig1=5, sig2=1, sig3=2 et sum=6

Pr: A.AMMOUR 63
5- DESCRIPTION COMPORTEMENTALE
5-3 SIGNAUX VS VARIABLES:

Exemple à l’intérieur d’un programme principal :

 En supposant que la période d’exécution est de 10 ns, que les valeurs initiales des signaux sont a=1,
b=2, c=3, d=0, et qu’un événement d=4 arrive, le timing de l’exécution serait:

Pr: A.AMMOUR 64
5- DESCRIPTION COMPORTEMENTALE
5-3 SIGNAUX VS VARIABLES:

Exercice :Ecrivez un processus qui effectue la multiplication de 2 signaux


a et b. Si le résultat de la multiplication dépasse le seuil c alors la sortie
prend la valeur c.

Pr: A.AMMOUR 65
5- DESCRIPTION COMPORTEMENTALE
5-4 STRUCTURE DE CONTRÔLE :

 Dans les processus, il est possible d'utiliser des structures de contrôle similaires à celles du C :

• Les instructions de test (if, case)


• Les boucles (loop, for loop, while loop)

 Instruction IF : elle repose sur le test d'une condition qui génère un booléen. Si celui ci est
"TRUE" l'instruction qui suit est exécutée.

 Syntaxe du IF:

 Pour coder un processus combinatoire, l'utilisation du ELSE est obligatoire de façon à traiter toutes
les combinaisons (sinon il y a mémorisation donc c'est da la logique séquentielle).

Pr: A.AMMOUR 66
5- DESCRIPTION COMPORTEMENTALE
5-4 STRUCTURE DE CONTRÔLE :

 Instruction CASE: Elle repose sur le test d'un signal ou d'une variable. En fonction de la valeur,
une instruction spécifique est exécutée.

 Syntaxe du CASE :

 Pour coder un processus combinatoire, l'utilisation du when others est obligatoire de façon à
traiter toutes les combinaisons (sinon il y a mémorisation donc c'est da la logiqiue séquentielle).

Pr: A.AMMOUR 67
5- DESCRIPTION COMPORTEMENTALE
5-4 STRUCTURE DE CONTRÔLE :

 Instruction de boucle:

Il faut noter :

1. Les indices de boucles (ici i pour L1) ne sont


pas à déclarer.
2. Les étiquettes de boucles (L1,L2,L3) sont
optionnelles.
3. L’exécution peut être altérée avec les
clauses next et exit.

Pr: A.AMMOUR 68
5- DESCRIPTION COMPORTEMENTALE
5-4 STRUCTURE DE CONTRÔLE :

 Exemple : la boucle for … loop de cet exemple permet de compter le nombre de bits à 1 d'un
signal.

Pr: A.AMMOUR 69
5- DESCRIPTION COMPORTEMENTALE
5-4 STRUCTURE DE CONTRÔLE :

 Exercice : Ecrivez un processus calculant la parité d'un signal sur n bits.

Pr: A.AMMOUR 70
5- DESCRIPTION COMPORTEMENTALE
5-5 AFFECTATIONS CONCURRENTES DES SIGNAUX

 Ces affectations sont des instructions concurrentes au même titre que les processus et les
instanciations de composants. Le codage comportemental d'une architecture repose sur
l'utilisation de ces 3 types d'instructions concurrentes qui peuvent apparaître dans n'importe quel
ordre.

 Une instruction concurrente est équivalente à un processus et correspond à un raccourci d'écriture


pour éviter le verbosité du processus.

Pr: A.AMMOUR 71
5- DESCRIPTION COMPORTEMENTALE
5-2 PROCESSUS ET SYNCHRONISATION:

 Dans un ≪ process ≫, les instructions s’éxecutent de façon


séquentielle.
 Le ≪ process ≫ s’éxecute a chaque changement d’état
d’un des signaux de la liste de sensibilité.
 La mise a jour des variables se fait au fur et a mesure que
les instructions se déroulent.
 La mise a jour des signaux se fait a la fin du ≪ process ≫,
après le ≪ end ≫.
 Tous les ≪ process ≫ se déroulent en parallèle. L’ordre
d’écriture des process n’a aucune importance.

Pr: A.AMMOUR 72
5- DESCRIPTION COMPORTEMENTALE
5-5 AFFECTATIONS CONCURRENTES DES SIGNAUX

Pr: A.AMMOUR 73
5- DESCRIPTION COMPORTEMENTALE
5-5 AFFECTATIONS CONCURRENTES DES SIGNAUX

Affectation concurrente conditionnelle

 Il existe également des instruction concurrentes


conditionnelles permettant d'effectuer des raccourcis d'écriture
pour remplacer des processus simples à base de IF et CASE

 Pour les fonctions combinatoires, il est souvent plus prudent


d'utiliser les affectations concurrentes plutôt que les processus où il
est possible d'omettre un signal d'entrée dans la liste de sensibilité.
Il faut toutefois avoir un chemin de contrôle exhaustif et toujours
avoir la clause else ou when others pour ne rien omettre.

Pr: A.AMMOUR 74
5- DESCRIPTION COMPORTEMENTALE
5-5 AFFECTATIONS ET DELAIS

 VHDL permet de spécifier des délais dans les affectations.

 Il existe deux types d'affectations avec délai :

• Affectation avec délai inertiel : x <= 3 after 2 ns; ou plus explicitement x <= inertial 3
after 2 ns;

• Affectation avec délai de transport : x <= transport 3 after 2 ns;

• Le type inertiel permet de "filtrer" les variations de X trop courtes par rapport au délai de la
transaction. Par exemple si x est à 1 pendant 1ns, l'affectation x <= 3 after 2 ns; ne changera
pas la forme d'onde de x qui restera à 0.

• Contrairement au mode inertiel , le type transport n'opère pas de "réjection des parasites". Il
respecte les temps de propagation mais est certainement moins réaliste que le mode inertiel.

Pr: A.AMMOUR 75
5- DESCRIPTION COMPORTEMENTALE
5-5 AFFECTATIONS ET DELAIS

Exemple : A <= ’0’, ’1’ after 5 ns, ’0’ after 10 ns, ’1’ after 20 ns, ’0’
after 22 ns; S <= A after 3 ns; --delai inertial

Pr: A.AMMOUR 76
5- DESCRIPTION COMPORTEMENTALE
5-5 AFFECTATIONS ET DELAIS

Exemple :
A <= ’0’, ’1’ after 5 ns, ’0’ after 10 ns, ’1’ after 20 ns, ’0’ after 22 ns;
S <= transport A after 3 ns;

Pr: A.AMMOUR 77
5- DESCRIPTION COMPORTEMENTALE
5-6 ASSERTIONS

 Les assertions permettent de vérifier une propriété et générer un message d'erreur si cette
propriété n'est pas vérifiée.
La syntaxe est la suivante :
assert CONDITION
[report MESSAGE]
[severity NIVEAU];

CONDITION = condition générant un booleén. Cette condition doit être vraie pour que rien ne se
passe
MESSAGE = chaîne de caractères renseignant le fait que la condition n'a pas été remplie
NIVEAU = niveau d'erreur. Il en existe 4 prédéfinis : NOTE,WARNING, ERROR, FAILURE

 Les assertions peuvent font partie du domaine séquentiel (dans un processus) ou du domaine
concurrent.

 Exemple:

Pr: A.AMMOUR 78
5- DESCRIPTION COMPORTEMENTALE
5-6 SOUS PROGRAMMES

 IL existe 2 types de sous-programmes:


1.Les fonctions
2.Les procédures

 Les sous-programmes font partie du domaine séquentiel et ont la même utilité que pour les autres
langages de programmation : regrouper les instructions qu'on utilise souvent.

 Les procédures font peuvent être appelées aussi bien dans le domaine séquentiel que concurrent
La différence entre fonctions et procédures sont les suivantes:
.

Pr: A.AMMOUR 79
5- DESCRIPTION COMPORTEMENTALE
5-6 SOUS PROGRAMMES

Pr: A.AMMOUR 80
5- DESCRIPTION COMPORTEMENTALE
5-6 SOUS PROGRAMMES

Par rapport à la fonction, La procédure permet d'avoir plusieurs sorties, mais à condition de déclarer les
entrées et les sorties comme dans une entité ou composant.

Pr: A.AMMOUR 81
5- DESCRIPTION COMPORTEMENTALE
5-6 SOUS PROGRAMMES
Exemples :

Fonction de calcul de minimum et maximum en procédure.

Pr: A.AMMOUR 82

Vous aimerez peut-être aussi