CHPITR3

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 84

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.

Vous aimerez peut-être aussi