Université de Boumerdes
Faculté de la Technologie
Département des systèmes d‟ingénierie électrique
Spécialité: Instrumentation Biomédicale
MODULE: SYSTÈMES EMBARQUÉS BIOMÉDICAUX
CHAPITRE 3: PRINCIPES DU LANGAGE VHDL
Mme H. Boumeridja Chebaani
Année Universitaire 2020/2021
Powerpoint Templates
OBJECTIFS
L‟utilisation de la syntaxe de VHDL
Afin de
Réaliser des applications digitales sur des
dispositifs programmables comme FPGA.
1. Que signifie HDL?
HDL est l'abréviation de « Hardware Description Language ou
l a n g a g e d e d e s c r i p t i o n m a t é r i e l l e » et
VHSIC - Very High Speed Integrated Circuit
POURQUOI UTILISE-T-ON
UN HDL?
Circuits modernes sont devenus complexes =>
Le nombre de transistors dans les circuits modernes est supérieur à 100 M;
Temps estimé pour une implémentation “manuelle”
(100 M transistor, 10 sec/transistor) 135.5 années !
Donc,
En décrivant la fonction du schéma en langage haut niveau ( = facile à comprendre),
nous pouvons la simuler avant sa fabrication. Cela nous permet de détecter les erreurs de
conception.
La Simulation garantit que la conception se comporte comme il se doit.
Conception en VHDL
Une conception digitale par VHDL exige:
1. Définition de packages et bibliothèques exigés, ex: std_logic_1164.
2. Une ENTITÉ (correspond à l‟interface du circuit)
3. Une ARCHITECTURE (décrit le fonctionnement du circuit).
Une entité peut avoir plusieurs architectures.
Description d‟un circuit digital: L ‟ i n t e r f a c e
Un circuit digital est décrit comme un module ayant des
entrées et des sorties.
Les valeurs des sorties sont une certaine fonction des valeurs
des entrées.
Le module F a deux entrées, A et B, ainsi qu‟une sortie Y.
En utilisant la terminologie de VHDL, le module F est appelé entity, et les
entrées/sorties sont des ports.
Description d‟un circuit digital: Le Comportement ou le fonctionnement
Ici, le module décrit la fonction “addition” des deux entrées A et B: Y=A+B.
En VHDL, le fonctionnement du circuit digital
est spécifié dans un corps appelé architecture.
Les ports A,B et Y sont des signaux.
Description d‟un circuit digital:
ENTITE + ARCHITECTURE = CIRCUIT DIGITAL
Entity mon_circuit is
Port( Mon_circuit: Identificateur utilisé par
l‟utilisateur pour nommer l‟entité.
);
End mon_circuit;
Architecture bev of mon_circuit is
-- partie déclarative contenant
-- des signaux intermediaires
-- des constantes Bev: Identificateur utilisé par
-- des sous programmes l‟utilisateur pour nommer
-- des composants,etc. l‟architecture.
Begin
End;
Eléments lexicaux et Syntaxe
Comme lorsque vous apprenez un nouveau langage…
Lorsque nous voulons apprendre une
this makes
nouvelle langue (Anglais, Chinois ou
us
autre), nous commençons par apprendre for the
is
l’alphabet des symboles utilisé par cette
langue puis former des mots à l‟aide de language new
ces symboles.
Ensuite, nous apprenons la manière de
mettre les mots ensemble afin de former
des phrases et apprendre la signification de
ces combinaisons de mots.
Nous arrivons à la maîtrise d'une langue
quand nous pouvons facilement exprimer
ce que nous devons dire en utilisant des
phrases correctement formées.
Eléments lexicaux et Syntaxe
Comme lorsque vous apprenez un nouveau langage…
This language is new for us!
…………………………….
« Même idée »
s‟applique quand nous avons besoin
d'apprendre un nouveau langage à usage
spécial, tel
que VHDL pour décrire les systèmes
numériques.
…………………………….
Eléments lexicaux et Syntaxe
Comme lorsque vous apprenez un nouveau langage…
1.L'alphabet de VHDL se compose de tous les caractères de la norme ISO
8859 Latin-1 8-bit:
Qui comprend les lettres majuscules et minuscules ( y compris
les lettres avec des signes diacritiques, telles que " à ", " ä " , etc.
les chiffres de 0 à 9, la ponctuation et d'autres caractères
spéciaux…..
2.L‟apprentissage des éléments lexicaux du langage VHDL, ce sont:
les identifiants, les mots réservés, les symboles et les littéraux spéciaux.
3.L‟apprentissage de la syntaxe du langage: C‟est la grammaire qui
détermine quelles sont les combinaisons d'éléments lexicaux qui vont
constituer les descriptions VHDL correctes ( ou légales).
Alphabet
VHDL
4.L‟apprentissage de la Apprentissage de:
sémantique(ou la signification), de Identificateurs
descriptions VHDL: cela permet à un Mots réservés, symboles,
ensemble de symboles de décrire un etc.
modèle numérique.
Syntaxe :
5.L‟apprentissage à développer nos Combinaison des
propres descriptions VHDL pour éléments lexicaux
décrire une conception dont nous
voulons travaillons: Ceci est la partie
créative de la modélisation, ensuite si Apprentissage de la
nous sommes à l‟aise, nous pouvons sémantique
améliorer grandement nos
compétences en conception.
Créativité pour le
développement d‟un
modèle de circuit digital
VHDL ...comme tout langage de programmation
1. Eléments Lexicaux 2. Types de Données et Objets
Commentaires Type Entier
Identificateurs Type Physique
Nombres Type Réel
Caractères Type Enuméré
Chaine de caractères: Strings Vecteurs
Enregistrement
3. Expressions et Opérateurs Sous Type
Déclaration d‟Objet
4. Assignation Séquentielle
Attributs
Assignation de Variable 5. VHDL décrit le comportement d‟un circuit digital
Déclaration If Déclaration d‟Entité
Déclaration Case Déclaration d‟Architecture
Déclaration Loop Déclaration de Signal
Déclaration Null Assignation de Signal
Assignation Concurrente de Signal
Process
Déclaration de Composant
1. Eléments Lexicaux
Commentaire Est considéré comme tel après deux tirets consécutifs “--”.
Identificateur Est utilisé pour donner un nom aux différents objets du langage.
Nombre Est considéré dans la base 10, mais on peut admettre d‟autres bases
en utilisant le symbole # : 2#11000100#
Caractère Soit une lettre ou un caractère mis entre apostrophes simples: „3‟, „t‟.
Chaine Un ensemble de caractères ou lettres se trouvant entre deux guillemets:
“salam”
Mots réservés Sont les instructions, ordres et éléments qui permettent de définir
des instructions.
Chaines de bits Les types bit et bit_vector sont une représentation du 0 et 1
binaire.
2. Types de Données et Objets
VHDL est un langage typé où il est nécessaire de préciser le
type des objets utilisés
Tous les OBJETS DE DONNÉES doivent être définis avec un
type de données: Exemple1 signal Sig1, Sig2: std_logic;
Tous les OBJETS doivent être assignés à un type.
Le TYPE DE DONNÉES spécifie le groupe de valeurs qu‟un OBJET DE
DONNÉES peut prendre ainsi que les opérations permises avec ces valeurs:
Exemple2 sortie <= sig1 + sig2;
2. Types de Données et Objets
Il y a 4 classes de types
Types scalaires : entier, réel, énuméré, physique
Types composites : tableaux, enregistrements
Fichiers
Pointeurs
La déclaration du Type de données peut être dans la déclaration de:
PACKAGE
ENTITÉ
ARCHITECTURE
SOUS-PROGRAMMES
PROCESS
2. Types de Données et Objets
Dans e1
l‟Entité e2[3:0] BOITE_NOIRE
s1
clk q[3:0]
ENTITY décrit une fonction, vue de l'extérieur :
Nom
Entrées/Sorties
Les signaux d'Entrée/Sortie de l'ENTITY sont des PORTs
Chaque PORT possède:
un nom,
un mode (sens),
un type (associé éventuellement à un ensemble de
valeurs).
Un OBJET de TYPE: :
Est un élément nommé ( donnée) dans une description
VHDL, qui a une valeur d‟un type spécifié.
VHDL possède 3 sortes d‟objet :
CONSTANTES
VARIABLES
SIGNAUX
Signal
Les signaux représentent les données physiques échangées entre
des blocs logiques d‟un circuit.
Chacun d‟entre eux sera matérialisé dans le schéma final par une
équipotentielle.
Les signaux sont globaux.
Exemple:
Les « ports » d‟entrée et de sortie, attachés à une entité sont des signaux.
OBJET de TYPE: Signal
- - elle se place dans la partie déclarative d‟une architecture
signal identifier_1 , identifier_2 : type ;
Exemple:
SIGNAL output : INTEGER := 2;
Affectation d‟une valeur d‟un signal :
- - se place dans le corps d‟une architecture ou d‟un processus:
identifier_1 <= identifier_ou_valeur_compatible_avec_le_type ;
La valeur affectée peut être le résultat d‟une expression, simple ou
complexe, ou la valeur renvoyée par l‟appel d‟une fonction.
Traduction:
L‟affectation d‟une valeur à un signal est tout simplement la connexion de la
sortie d‟un opérateur à l‟équipotentielle correspondante.
Exemples
A <= B and C;
ou bien,
A <= Max(F,G); - - Ici Max représente une fonction;
OBJET de TYPE: Importance d‟un Signal
Les signaux sont utilisés pour communiquer entres les composants du système.
Les Signaux peuvent être des réels, entiers, chaines de caractères ou physiques.
Certains délais peuvent accompagnés l‟assignation du signal.
Exemples:
SIGNAL sig : real; - - déclaration d‟un signal de type réel
S1 <= (a and b) after 10 ns; - - after est un délai
OBJET de TYPE: Variables
Elle sont des objets qui servent à stocker un résultat
intermédiaire pour faciliter la construction d‟un algorithme
séquentiel.
Elles ne peuvent être utilisées que dans les processus, les procédures
ou les fonctions. ( donc elles sont locales)
Syntaxe:
- - se place dans la partie déclarative d‟un processus, d‟une procédure ou d‟une
fonction
variable nom1 , nom2 : type [:= expression];
Affectation d‟une valeur :
nom := valeur_compatible_avec_le_type ;
Exemples:
VARIABLE opcode : BIT_VECTOR(3 DOWNTO 0) := "0000";
VARIABLE freq : INTEGER;
Traduction:
Elles ont une portée limitée au module de programme dans
lequel elles ont été déclarées, et sont détruites à la sortie de
ce module.
Elles ne sont pas des équipotentielles comme les signaux.
Leur affectation est immédiate.
Importance:
La valeur affectée peut être le résultat d’une expression ou la
valeur renvoyée par l’appel d’une fonction.
Cependant,
On notera qu‟il est possible d’affecter la valeur d’une variable à un
signal, et inversement, pourvu que les types soient compatibles.
Exemple:
ARCHITECTURE variables OF test IS
BEGIN
PROCESS (a, b, c)
VARIABLE a,b,c,out_3,out_4: BIT;
BEGIN
out_3 := a NAND b;
out_4 := out_3 XOR c;
END PROCESS;
END;
OBJET de TYPE: Constantes
Les constantes sont des objets dont la valeur est fixée une fois
pour toute.
Syntaxe :
constant identifier_1 : type[ := := valeur_de_la_constante ] ;
Déclaration d‟une constante :
constant e : real := 2.71828;
constant number_of_bytes : integer := 4;
constant number_of_bits : integer := 8 * number_of_bytes;
constant max_size : natural:=5;
Affectation d‟une valeur :
p <= e* d; -- p et d des signaux
For i in 0 to max_size loop
LES TYPES
Le type définit l'ensemble des valeurs que l'objet peut assumer,
ainsi que l'ensemble des opérations qui peuvent être effectuées sur
ces valeurs.
La notion de type est très importante en VHDL.
On dit que VHDL est un langage fortement typé, ce qui signifie
que chaque objet ne peut prendre que des valeurs de son type
désigné.
Types doivent doit correspondre à
L‟assignation des instructions
Comparaisons
Appel de Fonction
On distingue deux catégories de types:
1. Types prédéfinis
2. Types définis par l’utilisateur.
LES TYPES DE DONNEES
TYPES de DONNEES
SCALAIRES Type Fichier &
• Numerique Type Pointeurs
(Integer, Real)
• Ne sont pas utilisés
• Enumérés dans la modélisation
Hardware
•Physique
Les Types sont exigés pour tout La déclaration du Type de données peut
Signal être dans :
Variable
Constante PACKAGE
Paramètre d‟une Fonction ENTITÉ
Résultat d‟une Fonction ARCHITECTURE
SOUS-PROGRAMMES
PROCESS
LES TYPES DE DONNEES: LE TYPE SCALAIRE
Types de données prédéfinis
énuméré tel que : bit („0‟ ou „1‟)
integer
real
time (type physique)
SYNTAXE
TYPE Identifier IS Type-Definition
(I) Type de données numériques
• Type-Definition is a Range_Constraint comme suit:
Type-Definition := Range valeur_intiale < To | DownTo> valeur_finale
ordre croissant ordre décroissant
LES TYPES DE DONNEES: LE TYPE SCALAIRE
Exemples
TYPE address IS RANGE 0 To 127;
TYPE index IS RANGE 7 DownTo 0;
TYPE voltage IS RANGE -0.5 To 5.5;
Formats des Nombres:
• Les entiers n‟ont pas de point décimal.
• Les entiers peuvent être signés ou non signés (ex. -5 356 )
• Les rééls possèdent le point décimal ainsi que l‟exposant et la mantisse et
peuvent être signés ou non signés.(ex. -3.75 1E-9 1.5E-12 )
LES TYPES DE DONNEES: LE TYPE SCALAIRE:
L‟ENTIER
Integer
L‟intervalle de l‟entier pour une implémentation est défini par le standard:
–2147483647 à +2147483647
type byte is range 0 to 255;
type sword_int is range –32768 to 32767;
type bit_index is range 31 downto 0;
Un signal ou une variable déclaré comme type entier et qui doit être synthétisé
en éléments logiques, doit être limité par un range.
VARIABLE n: integer RANGE -15 TO 15;
Positive -- INTEGERS > 0
Natural -- INTEGERS ≥ 0
LES TYPES DE DONNEES: LE TYPE SCALAIRE:
LE RÉEL
REAL
Le domaine de variation de ce type est:
- - assignation d‟un type réel
Exemples:
type input_level is range -10.0 to +10.0;
type probability is range 0.0 to 1.0;
- - assignation d‟un réel à un objet
variable input_A : input_level; - - sa valeur initiale est –10.0.
LES TYPES DE DONNEES: LE TYPE SCALAIRE
(II) Type de données énuméré
Liste des littéraux sont ordonnés entre des parenthèses.
Chacun d„eux peut être un identificateur ou un caractère littéral.
Ils sont séparés par des virgules.
La première position se trouve sur l‟élément qui se trouve le plus à gauche
et elle est 0.
Variables et signaux de type Énuméré auront l'élément le plus à gauche
comme valeur par défaut (initiale).
Exemples
TYPE Color IS ( Red, Orange, Yellow, Green, Blue, Indigo, Violet);
TYPE Tri_Level IS ( „0‟, „1‟, „Z‟);
TYPE Bus_Kind IS ( Data, Address, Control);
TYPE state IS ( Init, Receive, Wait, Terminal);
LES TYPES DE DONNEES: LE TYPE SCALAIRE
Types de données énumérés prédéfinis
1- TYPE BIT IS ( „0‟ , „1‟) ;
2- TYPE BOOLEAN IS ( False, True) ;
3- TYPE CHARACTER IS ( les 256 caractères du jeu ISO 8859-1......) ;
4- TYPE STD_LOGIC IS (
„U‟ , -- Uninitialized
„X‟ , -- Forcing Unknown
„0‟ , -- Forcing 0
„1‟ , -- Forcing 1
„Z‟ , -- High Impedance
„W‟ , -- Weak Unknown
„L‟ , -- Weak 0
„H‟ , -- Weak 1
„-‟ , -- Don`t Care
);
LES TYPES DE DONNEES: LE TYPE SCALAIRE
STD_LOGIC
Le type std_logic est similaire au type bit.
Le package std_logic_1164 de IEEE définit le std_logic comme un type de
données ayant les valeurs 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-'.
Pour pouvoir utiliser ce type de données, il est nécessaire d‟inclure le
package dans la description en utilisant les deux lignes avant la déclaration de
l‟entité.
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
LES TYPES DE DONNEES: LE TYPE SCALAIRE
STD_LOGIC
Les valeurs '0', '1', 'L' et 'H' sont utilisées dans la
synthèse des circuits.
Les valeurs 'Z' et '-' possèdent des restrictions sur et ou
peuvent être utilisées.
Les valeurs 'U', 'W' et 'X' sont utilisées uniquement pour
la simulation et l‟évaluation du design et non pas pour la
synthèse.
Pour la majorité des designs, on utilise STD_LOGIC
car il est plus complet que le type BIT.
TYPES DE DONNÉES: LE TYPE STRUCTURE
Un type composé est un type de données formé par des
éléments d‟autres types, par exemple scalaire ou bien eux mêmes
composites.
L‟utilisateur peut structurer ses données par les deux formes
proposées par ce type qui sont:
Tableau (ARRAYS)
et Enregistrement (RECORDS).
TYPES DE DONNÉES: LE TYPE STRUCTURE
Un tableau ou array est une collection d‟éléments de même
type repérés par les valeurs d‟indices.
Un tableau caractérisé par un seul indice est appelé vecteur.
Les indices sont des objets de types scalaires: entiers ou
énumérés.
Les tableaux peuvent être de une ou plusieurs dimensions.
TYPE nom_du_vecteur IS ARRAY ( rang ) OF type;
-- Un vecteur de bits est défini avec bit_vector
-- Un vecteur de caractères est défini avec string
TYPES DE DONNÉES: LE TYPE STRUCTURE
CLASSIFICATION
Les vecteurs sont une collection d‟éléments du même type et peuvent
être:
De 1 dimension (1D)
De 1x1 dimension (1Dx1D)
De 2 dimensions (2D) ou vecteur de scalaires.
De dimensions supérieures, mais généralement ne sont pas
synthétisables.
DECLARATION
La syntaxe pour spécifier un nouveau type de vecteur est:
Type nom_du_type is ARRAY ( spécification ) of data_type;
Pour utiliser le nouveau type de vecteur, on déclare des signaux,
constantes ou variables comme:
Signal nom_du_signal : nom_du_type [:= valeur initiale];
SYNTAXE
TYPE id Is Array ( Rang Contraint) of Type;
Exemples
TYPE word Is Array ( 0 To 7) of Bit;
TYPE word_16 Is Array ( 31 DownTo 0) of Bit;
TYPE col Is Range 0 To 255;
TYPE row Is Range 0 To 1023;
TYPE Mem_Array Is Array (row, col) of Bit;
TYPE Memory Is Array (row) of word;
TYPES DE DONNÉES: LE TYPE STRUCTURE:VECTEURS
VECTEUR DE 1D
Type vecteur is array ( 3 downto 0) of std_logic;
Signal A1: vecteur:= ‟‟1101‟‟;
A1(0) <= „1‟;
VECTEUR DE 1D X 1D
type renglon is array (3 downto 0) of std_logic;
type matrice is array (0 to 4) of renglon;
signal A1: matrice:= ( "1101","1001","0110","0101","1001");
A1(0) <= “?”;
A1(1) (2) <=“?” ;
TYPES DE DONNÉES: LE TYPE STRUCTURE:VECTEURS
REPRESENTATION DES BUS
Les vecteurs peuvent être définis tantôt par des rangs
ascendants comme par des rangs descendants:
SIGNAL x: STD_LOGIC_VECTOR(0 TO 3); --ascen.
SIGNAL y: STD_LOGIC_VECTOR(3 DOWNTO 0); --descen.
x <= “1010";
y <= “1010";
Produit comme résultat:
X(3) <= „0'; X(2) <= „1'; X(1) <= „0'; X(0) <= „1';
Y(3) <= „1'; Y(2) <= „0'; Y(1) <= „1‟; Y(0) <= „0';
TYPES DE DONNÉES: LE TYPE STRUCTURE:VECTEURS
EXEMPLES D‟UN BUS ou ARRAY
Signal DataBus : bit_vector ( 7 downto 0 );
UNIQUE ÉLÉMENT (UN GUILLEMET
SIMPLE OU APOSTROPHE ):
DataBus( 7 ) = „0‟;
DataBus( 3 ) = „1‟;
DEUX OU PLUS ÉLÉMENTS (GUILLEMET DOUBLE):
DataBus = “01001101”;
DataBus( 5 downto 3) = “001”;
Exercice
Ecrire la déclaration d‟un type représentant un demi-octet ou « nibble ».
type nibble is array (3 downto 0) of bit;
Écrire un type énuméré avec les valeurs : est, sud, nord, ouest.
Type direct is ( est, sud, nord, ouest) ;
Ecrire un type booléen constitué d‟un vecteur unidimensionnel non
restreint.
Type t_bool is array (natural range <>) of Boolean;
Créer un signal du type précédent ayant 10 éléments.
Signal s : t_bool ( 9 downto 0) ;
TYPES DE DONNÉES: LE TYPE STRUCTURE:VECTEURS
Quand un tableau (array) est assigné à un autre „array‟, les deux
„arrays‟ doivent avoir la même taille.
L‟assignation est par position, et non pas par index.
Signal Down: std_logic_vector (3 downto 0);
Signal Up : std_logic_vector (0 to 3);
S_Up <= S_Down; LAQUELLE DES DEUX INTERPRÉTATIONS EST CORRECTE?
TYPES DE DONNÉES: LE TYPE STRUCTURE:VECTEURS
L‟ ASSIGNATION À UNE PARTIE D‟UN «ARRAY » EST POSSIBLE.
PAR LA DIRECTION (TO OU DOWNTO).
EXEMPLE:
Signal Bus: std_logic_vector (7 downto 0);
Signal A : std_logic_vector (0 to 3);
Lesquelles des interprétations suivantes sont correctes?
FAUX. DIRECTIONS DES BUS
Bus (0 to 3) <=A; DIFFÉRENT DE LA DÉCLARATION
Bus <=A; FAUX. TAILLE DES ARRAY NE
CORRESPONDENT PAS
Bus(3 downto 0) <= A; VRAI. BUS(3) EST CONDUIT PAR A(0)
Bus(5 downto 4) <=A(0 to 1); VRAI. BUS(5) EST CONDUIT PAR A(0)
Bus(5 downto 4) <=A(0 to 1); VRAI. BUS(4) EST
Bus(4 downto 3) <=A(2 to 3); CONDUIT PAR A(1) ET PAR A(2):
TYPES DE DONNÉES: LE TYPE STRUCTURE:VECTEURS
TABLEAUX INDÉFINIS OU UNCONSTRAINED ARRAY
Un tableau sans contraintes est celui qui n‟est pas délimité par un
rang entier spécifique.
Un objet de données déclaré avec ce tableau indéfini devra être
délimité sinon il ne pourra pas être synthétisé.
EXEMPLE
TYPE bit_vector IS ARRAY (integer RANGE <>) OF bit;
-- UNCONSTRAINED ARRAY
VARIABLE v: bit_vector(5 DOWNTO -5);
-- OBJET DE DONNÉES
RÉSUME : TABLEAUX OU ARRAY
ÉLÉMENTS HOMOGÈNES, DE MÊME TYPE
TABLEAUX CONTRAINTS :
SPÉCIFIER LE SENS DE VARIATION DES INDICES
1 to 15 / 15 downto 1
type mot is array (15 downto 0) of bit;
type memoire is array (0 to 255) of mot;
Dimensions Multiples
LES TABLEAUX NON CONTRAINTS :
PERMETTRE DE REPOUSSER LA DÉFINITION
DE LA TAILLE À PLUS TARD.
Les indices sont de type La manipulation de ces tableaux demande l‟utilisation
discret (énuméré ou d‟attributs range <>
entier)
type string is array (positive range <>) of
character;
type bus is array (positive range <>) of bit;
TYPES DE DONNÉES: LE TYPE STRUCTURE:VECTEURS
CONCATÉNATION
Associer des fils (bus) de petites tailles ensemble pour les
assigner à un plus grand « array ».
Signal Byte_bus: std_logic_vector (7 downto 0);
Signal Nibble_busA, Nibble_busB: std_logic_vector (3 downto 0);
Byte_bus <= Nibble_busA & Nibble_busB;
Exercice:
signal s1: std_logic_vector(7 downto 0):="10101010";
constant c1: std_logic_vector(7 downto 0):="10101010";
Quel sera la valeur du signal S1 ?
s1(7 downto 4)<= c1(3 downto 2) & "01";
TYPES DE DONNÉES: LE TYPE STRUCTURE:VECTEURS
AGGRÉGAT
C‟est une méthode alternative pour assigner de multiples petits
« arrays » à un plus grand « array ».
S i g n a l X , Y, Z , T: s t d _ l o g i c _ v e c t o r ( 3 d o w n t o 0 ) ;
Signal A, B, C : std_logic;
X <= (A,B,C,C); -- CORRESPONDANCE PAR POSITION
Y <= (3 =>A, 1 downto 0 => C, 2 => B);
Z <= (3 => A, 2 => B, others => C);
T <= ( others => „0‟ ); -- INITIALISATION SANS PRÉCISER LA TAILLE DE T
Exercice:
signal s1: std_logic_vector(7 downto 0):="10101010";
s1(5 downto 2)<=(others=>'1');
Quelle valeur aura le vecteur A après les assignations suivantes?
ARCHITECTURE rtl OF example IS
SIGNAL A, B: std_logic_vector( 4 downto 0);
SIGNAL C: std_logic_vector( 0 to 1);
BEGIN
A <= (1=>'0', 3=>'1', others=>B(2));
B <= (1=>'1', 3=>'0', others=>C(1));
C <= "10";
END;
TYPES NON SUPPORTÉS POUR LA SYNTHÈSE
Certains types ne sont pas utilisés dans le langage comme le
character et le string.
Les types non supportés sont ignorés donc ne peuvent pas être
synthétisés.
Dans l‟outil ISE de xilinx les types et les objets qui ne sont pas
supportés sont:
• Types physiques
• Types réels.
• Objets de données access ou pointeurs.
Un access équivaut à un pointeur, il n‟est pas supporté car il n‟a
aucun sens du point de vue hardware.
ATTRIBUTS
Un attribut est une caractéristique associée à un élément (type de donnée,signal, …) qui
fournit une information additionnelle.
Ces éléments peuvent être types de données, objets, entités, procédures.
Permet d‟écrire un code plus général.
Ils permettent de connaître les caractéristiques :
POSSIBILITÉS:
des signaux
DÉFINIS PAR L’UTILISATEUR
Des tableaux
PRÉDÉFINIS
Des types
ATTRIBUT ≠VALEUR
UN OBJET A UNE SEULE VALEUR MAIS PEUT AVOIR PLUSIEURS ATTRIBUTS.
ATTRIBUTS – PRÉDÉFINIS - UTILISATION
ATTRIBUTS DE TABLEAUX
A'left ===> 1 A‟right ===> 37
A‟high ===> 37 A'low ===> 1
A‟length ===> 37 A'range ===> 1 to 37
A'reverse_range ===> 37 downto 1 A'ascending ===> true
B‟left(1) ===> 6 B'left(2) ===> 1
B'right(1) ===> 2 B‟right(2) ===> 7
B‟low(1) ===> 2 B'high(1) ===> 6
B‟low(2) ===> 1 B'high(2) ===> 7
B‟length(1) ===> 5 B'length(2) ===> 7
B'range(1) ===> 16 downto 2 B'reverse_range(1) ==> 2 to 6
B'range(2) ===> 1 to 7 B'reverse_range(2) ==> 7 downto 1
B'ascending(1) ===> false B'ascending(2) ===> true
ATTRIBUTS – PRÉDÉFINIS - UTILISATION
UTILISATION DES ATTRIBUTS DE TABLEAUX
Attribut 1 pour la
variable A
Attribut 2 pour la
variable A
ATTRIBUTS – PRÉDÉFINIS ( QUELQUES UNS)
ATTRIBUTS DE SIGNAUX
BOOLEAN.
TRUE SI UN ÉVÉNEMENT VIENT D‟ARRIVER SUR S PENDANT LE CYCLE DE
SIMULATION EN COURS.
BOOLEAN
TRUE LORSQU‟IL SE PRODUIT UNE TRANSACTION (AFFECTATION) SUR LE SIGNAL
DURANT UN TEMPS T.
BOOLEAN
TRUE LORSQU‟IL N‟Y A PAS D'ÉVÉNEMENTS SUR LE SIGNAL S PENDANT LE TEMPS T.
SIGNAL
C‟EST UN SIGNAL IDENTIQUE À S MAIS RETARDÉ DE T
ATTRIBUTS – PRÉDÉFINIS - UTILISATION
„Event retourne une valeur booléene « true » s‟il y a un événement ( changement de valeur) dans
le signal clk.
UTILISATION DES ATTRIBUTS DE SIGNAUX
DÉTECTION D'UN FRONT MONTANT
IF (CLOCK'EVENT AND CLOCK = '1') THEN
Renvoie «vrai» après le changement qui a conduit l'horloge à la valeur «1» ( d'une valeur de '0„)
DÉTECTION D'UN FRONT DESCENDANT
IF (CLOCK'EVENT AND CLOCK = „0') THEN
Exercice
OPÉRATEURS
Afin d‟utiliser la majorité d‟opérateurs avec les types signed, unsigned et
std_logic_vector, il suffit d‟utiliser le package ou sont déclarés ces types. On y retrouve
aussi les fonctions arithmétiques et logiques.
Les packages sont: std_logic_1164, numeric_std , numeric_bit ainsi que
std_logic_arith.
PRIORITÉ DES OPÉRATEURS (DE LA PLUS BASSE À LA PLUS HAUTE)
LOGIQUES: AND OR NAND NOR XOR XNOR
RELATIONNELS: = /= < <= > >=
DÉCALAGE ET ROTATIONS: SLL SRL SLA SRA ROL ROR
Addition: + - &
Signe (unaires): + -
Multiplication: * / mod (Modulo) rem ( Reste de la division entière)
Divers: ** abs not
LES OPÉRATEURS LOGIQUES
LISTE DES OPÉRATEURS LOGIQUES: NOT, AND, OR, XOR, NAND, NOR
LES OPÉRATEURS LOGIQUES SONT PRÉDÉFINIS POUR CES TYPES DE DONNÉES:
BIT, BIT_VECTOR, BOOLEAN, STD_LOGIC, STD_LOGIC_VECTOR,
STD_ULOGIC, STD_ULOGIC_VECTOR.
LES OPÉRATEURS LOGIQUES SONT ÉGALEMENT UTILISÉS AVEC LES « ARRAYS »:
LES « ARRAYS » DOIVENT AVOIR LA MÊME TAILLE,
LES ÉLÉMENTS DOIVENT CORRESPONDRE PAR POSITION.
LES OPÉRATEURS RELATIONNELS
LISTE DES OPÉRATEURS RELATIONNELS: <, <=, =>, >, =, /=
LES OPÉRATEURS RELATIONNELS RETOURNENT UNE VALEUR BOOLÉENNE « V »
OU « F »
LES DEUX OPÉRANDES À COMPARER DOIVENT ÊTRE DE MÊME TYPE
LES OPÉRATEURS RELATIONNELS SONT ÉGALEMENT UTILISÉS AVEC LES «
ARRAYS »:
LES « ARRAYS » PEUVENT AVOIR DIFFÉRENTES TAILLES.
ILS SONT ALIGNÉS À GAUCHE ET LE NOMBRE DE BITS ÉGALE AU PLUS
PETIT « ARRAY » SONT COMPARÉS;
LA COMPARAISON EST EFFECTUÉE BIT PAR BIT, DE GAUCHE À DROITE
OPÉRATEURS DE DÉCALAGE ET DE ROTATION
ILS RÉALISENT LES OPÉRATIONS DE DÉCALAGE ET DE ROTATION.
LES ÉLÉMENTS SONT D‟UN VECTEUR DE TYPE SIGNED OU UNSIGNED.
CES OPÉRATEURS SONT INCLUS DANS LES PACKAGES NUMERIC_STD ET
NUMERIC_BIT.
ILS SONT INTRODUITS DANS VHDL 93.
OPÉRATEUR
SLL DÉCALAGE LOGIQUE À GAUCHE
SRL DÉCALAGE LOGIQUE À DROITE
SLA DÉCALAGE ARITHMÉTIQUE À GAUCHE
SRA DÉCALAGE ARITHMÉTIQUE À DROITE
ROL ROTATION À GAUCHE
ROR ROTATION À DROITE
OPÉRATEURS DE DÉCALAGE ET DE ROTATION
DÉCALAGES LOGIQUES SLL ET SRL
Décalent les bits d‟un vecteur n fois à la gauche sll ou à la droite srl,
introduisant des zéros sur les lieux restant libres.
EXEMPLE
X SRL 3 – DÉCALE 3 LIEUX À LA DROITE LES BITS DU VECTEUR X
RÉSULT <= “110111” SRL 3 CELA DONNE “000110”
DÉCALAGES ARITHMÉTIQUES SLA ET SRA
Décalent les bits d‟un vecteur n fois à la gauche sla ou à la droite sra,
introduisant des zéros aux lieux restants libres, mais en conservant le
signe.
EXEMPLE
“ 110011“ SLA 2 CELA DONNE “ 101100 “
OPÉRATEURS DE DÉCALAGE ET DE ROTATION
ROTATIONS ROL ET ROR
Rotation des bits d‟un vecteur n fois à la gauche ou à la droite,
introduisant les bits déplacés dans les lieux qui vont être libres.
EXEMPLES „‟101000‟‟ ROL 2 CELA DONNE „‟100010‟‟
„‟101001‟‟ ROR 2 CELA DONNE „‟011010‟‟
LES OPÉRATEURS ARITHMÉTIQUES
OPÉRATEUR DESCRIPTION
+ SIGNE PLUS
- SIGNE MOINS
+ ADDITION
- SOUSTRACTION
* MULTIPLICATION
/ DIVISION
MOD MODULO DE DEUX NOMBRES
REM RESTE DE LA DIVISION ENTIÈRE
** EXPONENTIELLE
ABS VALEUR ABSOLUE
Les deux opérandes doivent être de même type; par contre différentes tailles (ranges)
sont permises.
Restreints aux opérations avec des données numériques.
Pour réaliser des opérations avec les types non numériques ( (std_logic et
std_logic_vector), on utilise les packages IEEE:
Opérations sans signe ---> package STD_LOGIC_UNSIGNED
Opérations avec signe ---> package STD_LOGIC_SIGNED
DESCRIPTION DE FLOT DE DONNÉES
DÉFINITION
INSTRUCTIONES CONCURRENTES
STRUCTURES D’ÉXÉCUTION CONCURRENTE
Une description de FLOT DE DONNÉES consiste en la spécification du transfert des
données de l‟entrée à la sortie.
Dans ce style de description, on utilise uniquement des assignations en fonction
d‟expressions dont on indique le changement des ports de sortie en fonction des
ports d‟entrée.
CARACTÉRISTIQUES
L‟ordre d‟écriture est indifférent, ne suit par un ordre d‟exécution défini.
SERVENT POUR SPÉCIFIER
Les interconnexions entre les composants, Structures hiérarchiques et régulières.
Transfert entre registres.
INSTRUCTIONS CONCURRENTES
ASSIGNATION OU AFFECTATION SIMPLE
L‟affectation traduit une simple interconnexion entre deux équipotentielles.
L‟opérateur d‟affectation est le symbole : < =
NOM_DU_SIGNAL <= EXPRESSION
ASSIGNATION CONDITIONNELLE WHEN... ELSE
L‟affectation se fera en fonction du résultat de tests logiques.
NOM_DU_SIGNAL <= SOURCE_1 when CONDITION_1 else
SYNTAXE SOURCE_2 when CONDITION_2 else
….
SOURCE_n ;
ASIGNATION SÉLECTIVE WITH... SELECT... WHEN
Le choix de la valeur à affecter à un signal se fait à partir des valeurs possibles d‟une
expression. WITH EXPRESSION SELECT
NOM_DU_SIGNAL <= SOURCE_1 when VALEUR_1,
SYNTAXE
SOURCE_2 when VALEUR_2,
….
SOURCE_n when OTHERS;
DESCRIPTIONS COMPORTEMENTALES
DÉFINITION
INSTRUCTIONS SÉQUENTIELLES
PROCESS
STRUCTURES D’EXÉCUTION SÉQUENTIELLE
DIFFÉRENCE ENTRE SIGNAUX ET VARIABLES
Dans ces descriptions, on se limite à décrire le comportement du circuit.
Cela se traduit par une série d‟instructions éxécutées séquentiellement
modélisant le comportement du circuit.
En VHDL, une description comportementale nécessite l‟utilisation du bloc appelé
PROCESS.
INSTRUCTIONS SÉQUENTIELLES
Décrites de manière algorithmique
Sont définie dans un bloc PROCESS.
Pour qu‟un process s‟éxécute, il doit avoir une:
Liste de sensibilité : c‟est une liste de signaux qui lorsqu‟il se produit un
changement , le process s‟éxécute;
Ou une instruction WAIT incluse dans le PROCESS.
PROCESS
Contient:
Zone de Déclarations ( Les objets déclarés sont locaux dans ce
PROCESS)
Instructions séquentielles (assignation simple du signal ou de la
variable, IF, CASE, LOOP , etc. )
SYNTAXE [ETIQUETTE :] PROCESS ( LISTE DE « SENSIBILITÉ »)
« DÉCLARATION DES OBJETS UTILISÉS DANS LE PROCESS »
BEGIN
« SUITE D’INSTRUCTIONS SÉQUENTIELLES »
END PROCESS [ETIQUETTE ] ;
Architecture P1 of exemple is
Liste de
Begin Sensibilité
PROCESS (i1)
Partie
Déclarative du
variable a: std_logic;
Process
BEGIN Instructions
Séquentielles
a:= not i1;
o1 <= a;
END PROCESS; Le PROCESS est déclenché lorsque la valeur i1 change.
End; Dans ce cas, on dit que le PROCESS est actif.
PROCESS sans liste de sensibilité
ARCHITECTURE P2 OF exemple IS
WAIT remplace la LISTE DE
BEGIN
SENSIBILITÉ
PROCESS
VARIABLE a: BIT;
BEGIN
a := NOT i1; -- Instruction séquentielle
o1 <= a; -- Instruction séquentielle
WAIT ON i1; -- Instruction séquentielle
END PROCESS;
END ;
L’exécution du PROCESS s’arrête à l’instruction WAIT. Ici WAIT ON “liste de
sensiblité”.
L’exécution reprend quand la valeur i1 change .
PROCESS = INSTRUCTION CONCURRENTE
Lorsque:
1. se produit un événement dans un des signaux de la liste
de sensibilité
2. ou bien s‟accomplissent les conditions de
déclenchement de l‟instruction WAIT.
Une architecture peut avoir plusieurs ( Multiples ) PROCESS et
chacun d‟eux est équivalent à une instruction concurrente.
STRUCTURES D‟EXÉCUTION SÉQUENTIELLE
Sélectionne l‟exécution d‟une ou de plusieurs instructions séquentielles
dépendant du résultat d‟évaluation de la condition.
Est recommendée pour la codification des priorités.
IF CONDITION_1 THEN INSTRUCTIONS SÉQUENTIELLES END IF;
IF CONDITION_1 THEN
GROUPE 1 D‟INSTRUCTIONS SÉQUENTIELLES
ELSE
GROUPE 2 D‟INSTRUCTIONS SÉQUENTIELLES
END IF;
IF CONDITION_1 THEN
GROUPE 1 D‟INSTRUCTIONS SÉQUENTIELLES
ELSIF CONDITION_2 THEN
GROUPE 2 D‟INSTRUCTIONS SÉQUENTIELLES
ELSIF CONDITION_N THEN
GROUPE N D‟INSTRUCTIONS SÉQUENTIELLES
END IF;
STRUCTURES D‟EXÉCUTION SÉQUENTIELLE
CASE
Sélectionne une des possibles branches en accord avec la valeur de
l‟expression.
Toutes les valeurs possibles de l‟expression devront avoir une option
dans la branche de case. On utilise le mot reservé others pour englober les
autres cas.
Il est préférable d‟utiliser case au lieu de if.
Utile pour spécifier les tables de vérité et les machines d‟états finis.
CASE EXPRESSION IS
WHEN CAS1=> SÉQUENCE D‟INSTRUCTIONS 1;
SYNTAXE
WHEN CAS2 => SÉQUENCE D‟INSTRUCTIONS 2;
WHEN CASN=> SÉQUENCE D‟INSTRUCTIONS N;
WHEN OTHERS => RESTE DES CAS;
END CASE;
STRUCTURES D‟EXÉCUTION SÉQUENTIELLE
BOUCLES
ELLE EST UTILISÉE POUR RÉPETER L’EXÉCUTION UNE OU PLUSIEURS
INSTRUCTIONS SÉQUENTIELLES
IL EXISTE TROIS MANIÈRES POUR RÉALISER DES BOUCLES:
FOR-LOOP. TOUJOURS EST UNE BOUCLE FINIE.
WHILE-LOOP. PEUT ÊTRE FINIE OU PAS, DÉPEND DE LA CONDITION
LOOP. TOUJOURS EST INFINIE.
FOR-LOOP RÉALISE UNE BOUCLE UN NOMBRE DÉTERMINÉ DE FOIS.
[ÉTIQUETTE:] FOR INDICE IN RANG‟INF TO RANG‟SUP LOOP
SÉQUENCE D‟INSTRUCTIONS
END LOOP [ÉTIQUETTE];
BOUCLE: FOR I IN 0 TO 5 LOOP
EXEMPLE X(I) <= ENABLE AND W(I+2);
Y(0, I) <= W(I);
END LOOP BOUCLE;
Exercice
a, b et s sont des signaux de type std_logic_vector ( 7 downto 0).
On veut faire répéter 8 fois le schéma suivant:
STRUCTURES D‟EXÉCUTION SÉQUENTIELLE
WHILE-LOOP LA BOUCLE SE RÉPÈTE PENDANT QUE LA CONDITION
QUI SE TROUVES APRÈS LE WHILE SOIT VRAIE.
[ÉTIQUETTE:] WHILE CONDITION LOOP SÉQUENCE
SYNTAXE
D‟INSTRUCTIONS
END LOOP [ÉTIQUETTE];
EXEMPLE COMPTEUR := 0;
RESULTAT_TMP := 0;
WHILE COMPTEUR > 0 LOOP
COMPTEUR := COMPTEUR - 1;
RESULTAT_TMP:= RESULTAT_TMP+DATA_IN;
END LOOP;
RESULTAT <= RESULTAT_TMP;
STRUCTURES D‟EXÉCUTION SÉQUENTIELLE
LOOP LA BOUCLE SE RÉPETE INDÉFINIMENT.
[ÉTIQUETTE:] LOOP
SYNTAXE SÉQUENCE D‟INSTRUCTIONS
END LOOP [ÉTIQUETTE];
LIEN1: LOOP
EXEMPLE a <= c and b;
END LOOP LIEN1;
REMARQUE L‟UNIQUE INSTRUCTION QUI PERMET DE CASSER LA
BOUCLE EST EXIT.
STRUCTURES D‟EXÉCUTION SÉQUENTIELLE
EXIT ARRÊTE L‟EXÉCUTION AU MOMENT DE LA RENCONTRE DE
CETTE INSTRUCTION ET SORT DE LA BOUCLE.
ELLE APPARAÎT SEULEMENT DANS UNE INSTRUCTION LOOP.
SYNTAXE EXIT [ÉTIQUETTE] [WHEN CONDITION];
EXEMPLE INTERROMPRE LE FOR ET CONTINUE PAR LE WHILE
TERMINE: WHILE A< 100 LOOP
-- INSTRUCTIONS
CONTINUE: FOR N IN 0 TO 100 LOOP
-- INSTRUCTIONS
EXIT TERMINE WHEN N=A;
END LOOP CONTINUE;
END LOOP TERMINE;
REMARQUE LORSQU‟IL EXISTE PLUSIEURS BOUCLES, ON SORT DE LA
BOUCLE LA PLUS INTERNE.
STRUCTURES D‟EXÉCUTION SÉQUENTIELLE
NEXT EN VHDL, ON PEUT CRÉER DES BOUCLES INFINIES,
LES BOUCLES PEUVENT AVOIR UNE CONDITION DE SORTIE.
UTILISEE POUR SORTIR D‟UNE ITERATION.
SYNTAXE NEXT [ÉTIQUETTE] [WHEN CONDITION];
EXEMPLE INTERROMPRE FOR ET CONTINUER PAR WHILE
BOUCLE1: WHILE A< 100 LOOP
--- INSTRUCTIONS_1 SEQUENTIELLES
BOUCLE2: FOR N IN 0 TO 100 LOOP
--- INSTRUCTIONS_2 SEQUENTIELLES
NEXT BOUCLE1 WHEN N=A;
END LOOP BOUCLE2;
END LOOP BOUCLE1;
APPARAÎT SEULEMENT DANS LES SOUS PROGRAMMES ( PROCÉDURES
OU FONCTIONS).
RETURN EST UTILISÉ POUR COMPLETER L‟EXÉCUTION DU CORPS DU SOUS
PROGRAMME.
RETURN EST OPTIONNELLE DANS UNE PROCÉDURE ET PEUT NE PAS
CONTENIR UNE EXPRESSION.
UNE FONCTION DOIT OBLIGATOIREMENT CONTENIR UN RETURN ET UNE
EXPRESSION.
SYNTAXE [ETIQUETTE:] RETURN [EXPRESSION];
EXEMPLE PROCÉDURES FONCTIONS
RETURN RETURN A
RETURN A+B/C
NE RÉALISE AUCUNE FONCTION.
NULL FAIT PASSER L‟EXÉCUTION À LA SUIVANTE INSTRUCTION
SÉQUENTIELLE
UTILE DANS LA STRUCTURE SÉQUENTIELLE CASE LORSQUE ON
NE RÉALISE AUCUNE ACTION DANS LES ELÉCTIONS.
SYNTAXE [ETIQUETTE:] NULL;
STRUCTURES D‟EXÉCUTION SÉQUENTIELLE
EXEMPLE
ARCHITECTURE comportemental OF multiplexeur IS
BEGIN
PROCESS (selec, a, b, c, d)
VARIABLE selec_int: integer;
BEGIN
selec_int := to_integer(selec);
CASE selec_int IS
WHEN 0 => sortie <= a ;
WHEN 1 => sortie <= b ;
WHEN 2 => sortie <= c ;
WHEN 3 => sortie <= d ;
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END comportemental;
SIGNAL VS VARIABLE:
CODE BASÉ SUR L’UTILISATION DES SIGNAUX
Entity signaux is
port (
Clk, d: in std_logic;
Q: inout std_logic_vector ( 3 downto 0));
End signaux;
Architecture bev of signaux is
Begin
Process(clk)
Begin
If clk‟event and clk=„1‟ then
Q(0) <= d;
Q‟1) <= q(0);
Q(2) <= q(1);
Q(3) <= q(2);
End if;
End process;
End;
SIGNAL VS VARIABLE:
CODE BASÉ SUR L’UTILISATION DES VARIABLES
Entity variables is
port (
Clk, d: in std_logic;
Q: inout std_logic_vector ( 3 downto 0));
End variables;
Architecture bev of variables is
Begin
Process(clk)
Variable s: std_logic_vector(3 downto 0));
Begin
If clk‟event and clk=„1‟ then
s(0) := d;
s‟1) := s(0);
s(2) := s(1);
s(3) := s(2);
Q<=s;
End if;
End process;
End;
SIGNAUX & VARIABLES
Signal Variable
Le signal est global dans une La variable est locale à un PROCESS.
architecture.
Un signal est sauvegardé dans la La variable est mise à jour de façon
chaîne des signaux mis à jour jusqu‟à instantanée, au moment de
ce que le PROCESS soit suspend ou l'affectation, sans aucun retard.
(s‟arrête).
Les signaux peuvent être assignées à Les variables peuvent être assignées
des variables. aux signaux.
Quand une valeur d‟une variable a besoin d‟être accédée à l‟extérieur d‟un
PROCESS, on doit l‟assigner à un signal.
DESCRIPTIONS STRUCTURELLES
COMPOSANTS
INSTANTIATION DE COMPOSANTS
AFFECTATION DE GÉNÉRATION
Un système numérique peut être défini par un assemblage de sous systèmes.
Une description structurale correspond à une description par schéma, où les
instanciations de composants et leurs interconnexions sont énumérées avec
du texte.
Niveau Haut
Full_adder
Structure Hiérarchisée
Half_adder
Or2 And2 Xor2
Niveau Bas
Conception Hiérarchique
Une plus grande entité peut appeller une
Larger entity
petite entité en elle.( la plus grande biensur)
component
Ceci forme une STRUCTURE
HIÉRARCHIQUE.
Cela est permis par une caractéristique de
VHDL appelée instanciation du composant.