0% ont trouvé ce document utile (0 vote)
24 vues31 pages

Structure VHDL

Transféré par

Mounira Iratni
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
24 vues31 pages

Structure VHDL

Transféré par

Mounira Iratni
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 31

Chapitre 2

Structure du langage VHDL


Les mots réservés
abs disconnect label package units
access downto library port until
after else linkage procedure use
alias elsif loop process variable
all end map range wait
and entity mod record when
architecture exit nand register while
array file new rem with
assert for next report Xor
attribute function nor return
begin generate not select
block generic null severity
body guarded of signal
buffer if on subtype
Bus in open then
case inout or to
component is others transport
configuration out type
constant
Les objets
VHDL manipule quatre classes principales d’objets
Les constantes (CONSTANT)
Les variables (VARIABLE)
Les signaux (SIGNAL)
Les flux (FILE)

Déclaration d’un objet


OBJET NomObjet : type [:= valeur] (pour constant, la valeur est obligatoire)

Exemple
constant Pi : real := 3.14159;
signal a : bit := '0';
Variable count : integer;
Il y a trois sortes de types
Les types
1. Scalaires
Données numériques, énumérée ou physiques
Integer (entier de -2147483648 à 2147483647)
Real (réel -1.0E38 à 1.0E38)
Time (temps -2147483647 à 2147483647))
Character (caractère)
String (chaine de caractères)
Bit (0 ou 1)
Boolean (true, false)
Std_logic (Bit à 9 états adapté à la synthèse)
…etc
2. structurés
Données groupées
 Bit_vector (tableau de bits)
Std_logic_vector
Array (tableau d’objets quelconques)
Record (enregistrement)
…etc.
Les types
Définir ses propres types
Exemples
Définir un type pour manipuler les jours de semaine
TYPE jour IS integer range 1 TO 7
Constant week_end : jour := 7;
Variable jourOuvrable : jour;
Signal fete : jour;
Définir un type pour manipuler les entiers positifs
TYPE positif is integer range 1 to integer’high
Définir un type pour manipuler les couleurs
TYPE couleur IS (vert, bleu, rouge); -- type énuméré
Définir une structure de données pour manipuler les couleurs RVB sur 8 bits
TYPE couleur8bits IS integer range 0 to 255; -- type entier
TYPE pointRVB IS record
rouge : couleur8bits;
vert : couleur8bits;
bleu: : couleur8bits;
End record;
Le type tableau
Déclaration d’un tableau
On déclare un tableau de la manière suivante :
TYPE NomDuTableau IS ARRAY (etendue) of AutreType;
Exemples
Définir un type pour un bus de données à 8 bits
TYPE Bus is array(0 to 7) of bit;
Ou bien TYPE Bus is array(7 downto 0) of bit;
Ou bien TYPE Bus is array(7 downto 0) of std_logic;
Signal BusDeDonnees : bus;
Remarque
Pour ce qui est des bits, on utilise souvent les prédéfinis std_logic_vector au lieu
de créer de nouveaux types comme suit:

Signal BusDeDonnees : std_logic_vector(7 downto 0);


Le type tableau
Déclaration des tableaux

TYPE vecteur IS array (6 downto 0) of std_logic;

TYPE matrice IS array (3 downto 0) of vecteur;


Ou bien
TYPE matrice IS array (0 to 3) of std_logic_vector(6 downto 0);

TYPE AutreMatrice IS array (0 to 3, 6 downto 0) of std_logic;

Utilisation des tableaux


Signal x: std_logic;
Signal v : vecteur;
Signal m1 : matrice,
Signal m2: AutreMatrice

v <= "1010110"; -- ou bien x <=(‘1’, ‘0’, ‘1’, ‘0’, ‘1’, ‘1’, ‘0’)
x <= v(0);
x <= m1(0)(1);
x <= m2(0,1);
Le type tableau
Attributs d’un tableau
LOW: retourne l’index minimal
HIGH: retourne l’index maximal
LEFT: retourne l’index de gauche
RIGHT: retourne l’index de droite
LENGTH : retourne la taille du tableau
RANGE : retourne l’étendue du tableau
REVERSE_RANGE: retourne l’étendus du tableau dans le sens inverse
Exemple
signal d : std_logic_vector(7 downto 0)
d’LOW = ?0

d'HIGH = ?7
d'LEFT = ?7
d'RIGHT= ?0
d'LENGTH = 8?
d'RANGE = (7
? downto 0)
? to 7)
d'REVERSE_RANGE = (0
Les operateurs
** exponentiation, numeric ** numeric, result numeric
abs absolute value, abs numeric, result numeric
not complement, not logic or boolean, result same

* multiplication, numeric * numeric, result numeric


/ division, numeric / numeric, result numeric
mod modulo, integer mod integer, result integer
rem remainder, integer rem integer, result integer

+ unary plus, + numeric, result numeric


- unary minus, - numeric, result numeric

+ addition, numeric + numeric, result numeric


- subtraction, numeric - numeric, result numeric
& concatenation, array or element & array or element, result array
Les operateurs
sll shift left logical, logical array sll integer, result same
srl shift right logical, logical array srl integer, result same
sla shift left arithmetic, logical array sla integer, result same
sra shift right arithmetic, logical array sra integer, result same
rol rotate left, logical array rol integer, result same
ror rotate right, logical array ror integer, result same

= test for equality, result is boolean


/= test for inequality, result is boolean
< test for less than, result is boolean
<= test for less than or equal, result is boolean
> test for greater than, result is boolean
>= test for greater than or equal, result is boolean

and logical and, logical array or boolean, result is same


or logical or, logical array or boolean, result is same
nand logical complement of and, logical array or boolean, result is same
nor logical complement of or, logical array or boolean, result is same
xor logical exclusive or, logical array or boolean, result is same
xnor logical complement of exclusive or, logical array or boolean, result is same
Les signaux
Les composants électroniques communiquent entre eux à l’aide de signaux
En VHDL, un signal est un objet modélisant une interconnexion
Si le signal modélise une interconnexion entre l’entité dans laquelle ce signal est définit
et un objet externe, le signal est dit port. Il doit avoir un type et une direction
Si le signal modélise une interconnexion entre deux composants internes de la même
entité, ce dernier est dit interne. Il n’a pas de direction mais doit avoir un type.
Un signal externe (port) est déclaré dans l’entité. Un signal interne est déclaré dans
l’architecture.
Un signal peut être de n’importe quel type
Les signaux
Attributs d’un signal
EVENT : retourne True si un changement arrive sur le signal
STABLE: retourne True si aucun changement n’est arrivé sur le signal
QUIET<time>: retourne True si aucun changement n’est arrivé sur le signal durant le
temps spécifié
ACTIVE: retourne True si le signal est à 1

LAST_EVENT: retourne le temps passé depuis le dernier changement du signal

LAST_ACTIVE: retourne le temps passé depuis la dernière mise à 1 du signal

LAST_VALUE: retourne la valeur du signal avant le dernier changement d’événement


Les signaux
Manipulation de signaux
10 ns
Signal a, b : std_logic;
Signal c: std_logic_vector(7 downto 0);
b
a <= ‘1’ after 10ns when b=‘1’ else ‘0’;
a

a <= ‘0’, 1 after 10ns, ‘0’ after 30ns,


‘1’ after 60ns; a

c <= (7=>’1’, others =>’0’); C ="10000000"

b
a <= b after 10ns;
a

0 ns
Exercices
Exercice 1

Un dispositif est commandable par 4 signaux (q1, q2, q3, q4) définissant une
séquence comme indiqué dans le chronogramme suivant

q1

q2

q3

q4

10 ns

Ecrire un programme VHDL modélisant un circuit générant cette séquence


La concurrence en VHDL
 VHDL est un langage concurrent
 L’essentiel des instructions VHDL s’exécutent en concurrence (en parallèle)
Chaque assignement d’une valeur à un signal est effectué par une instruction
concurrente
 Exemple
ARCHITECTURE example OF concurrent IS
SIGNAL a, b, c, d : std_logic;
BEGIN
out1 <= a NAND b;
out2 <= c XOR d;
END example;
Une instruction concurrente est évaluée chaque fois qu’un événement se présente
sur l’une des entrées
L’ordre des instructions n’est pas important
Si l’un des signaux c ou d (ou les deux) change de valeur, c’est out2 qui sera
évaluée même si out1 est en premier
La concurrence en VHDL
 La concurrence est implémentée en utilisant les processus
 Chaque instruction concurrente est prise en charge par un processus indépendant qui
s’exécute de façon indéfinie
 Après chaque exécution, le processus est mis en attente d’un événement sur les
opérandes de l’instruction concurrente Processus P1 en
attente d’un
événement sur a, b
out1 <= a NAND b;

out2 <= c XOR d;


Processus P2 en
attente d’un
événement sur c, d

 Un programme VHDL est donc composé d’un ensemble de processus s’exécutant en


parallèle de façon indéfinie et se mettant en attente d’événements sur les signaux
déclencheurs
La concurrence en VHDL
Les instructions concurrentes
S <= a op b op c … -- avec op est un opérateur quelconque

S <= a when condition1 else a


b when condition 2 b
else c; c o
d
With a select
s <= valeur1 when condition1,
valeur2 when condition2,
valeur3 when others; 2 bits
S
Exercice 2 S O
00 a
Ecrire un programme VHDL réalisant un multiplexeur
01 b
à 4 bits.
La sortie est à haute impédance si aucune sélection 10 c
n’est effectuée 11 d
Les processus
Parfois, il est nécessaire de modéliser un comportement séquentiel en utilisant des
instructions algorithmiques séquentielles

Dans ce cas, ce comportement peut être implémenté dans un processus indépendant


qui s’exécutera en concurrence avec les autres processus du programme

A l’intérieur du processus, l’exécution est séquentielle, à l’extérieur, le processus


fonctionne comme une instruction concurrente. Il s’exécute de façon indéfinie et se met
en attente d’événements déclencheurs

Le déclencheur d’un processus peut être le changement de valeurs d’un ensemble de
signaux, la vérification d’une condition ou l’épuisement d’un délais
Les processus
 Anatomie d’un processus
Liste de sensibilité optionnelle, le processus
est activé dés qu’un événement arrive sur
l’un des signaux de la liste
[Nom :] process (A, B, …)
On peut déclarer des constantes et des
Déclarations variables . Elles ne sont valables qu’à
l’intérieur du processus
begin
--- Exécution en boucle
Instructions
séquentielles
-----
Wait on c, d Mise en attente du processus jusqu’au
changement de valeur de c ou d
end
Les processus
Mise en attente d’un processus

Un processus s’exécute de façon indéfinie jusqu’à la fin de la simulation


Le programmeur peut imposer au processus d’attendre un événement sur des
signaux particuliers ou un délais avant de poursuivre son exécution
Il existe deux façons d’arrêter un processus
Ajouter une liste de sensibilité dans l’entête du processus
nom: process (x, y, z) -- le processus se déclenche dez qu’un changement
-- arrive sur x, y, ou z
Ajouter une instruction wait à la fin du processus
wait on x, y -- attente de changement sur x ou y
wait for delai -- attente d’un délais
wait until condition -- attente de vérification d’une condition
Instructions séquentielles
Ce sont des instructions qui s’exécutent de façon séquentielles

Elle sont définie uniquement à l’intérieur d’un processus, d’une procédure ou


d’une fonction

Une instruction séquentielle s’exécute de façon séquentielle à l’intérieur d’un


processus mais elle est considérée comme concurrente vis avis des autres
processus du programme
Instructions séquentielles
 Instruction IF  Instruction case

if condition then
case identificateur is
instructions1
when valeur1 => Instruction 1;
{ elsif condition then
when valeur2 => Instruction 2;
instruction2}
when others => Instruction 3;
[ else
end case;
Instructions 3]
end if;
Instructions séquentielles
 Instruction For loop  Instruction While loop

[Etiquette: ]For identificateur IN range loop [Etiquette: ] While condition loop


instructions instructions
end loop; end loop;

On peut utiliser les instructions suivantes pour mieux manipuler les boucles

Exit [Etiquette] when condition : sortir de la boucle si une condition est vérifiée
Next[Etiquette] when condition : sortir de l’iteration si une condition est vérifiée
Exercices
Exercice 3
Ecrire un programme VHDL modélisant une bascule D active sur front montant avec
un reset Asynchrone

Exercice 4

Ecrire un programme VHDL modélisant un compteur binaire synchrone modulo 8


actif sur front descendant de l’horloge

Exercice 5

Ecrire un programme VHDL modélisant une horloge avec une fréquence de 10MHZ
Les variables
Une variable représente une information locale manipulable dans un traitement
séquentiel
Elle est définie uniquement à l’intérieur d’un processus, une procédure ou une
fonction

Une variable ne peut être partagée par plusieurs processus. Sa visibilité est limitée au
processus dans lequel elle est déclarée
Une variable peut être de n’importe quel type et peut être initialisée à sa déclaration

Exemple de déclaration
Variable control : bit := ‘0’;
Variable compteur : integer;
Variable buffer: std_logic_vector(7downto 0);
Exercice
Exercice 6
Le contrôle de parité est un mécanisme simple permettant de détecter
d’éventuelles erreurs de transmission d’une information. Ce mécanisme se base sur un
accord entre l’émetteur et le récepteur sur le mode de parité à adopter (pair ou
impair).
Pour la parité pair par exemple, l’émetteur génère un bit, dit de parité, et
l’ajoute à l’information. Ce bit est généré de façon à ce que le nombre total de bits
(information + bit de parité) soit pair. Le récepteur compte le nombre de bits à 1. s’il
est impair, il conclue que l’information est erronée.
Ecrire un programme VHDL permettant la génération d’un bit de parité pair
pour une information à 8 bits.

i0
i1
i2
i3
i4 P
i5
i
i7
Portée
Différence variables-signaux
Une variable a une portée locale, elle sert de moyen de retenir des informations à
l’intérieur d’un processus
Un signal a une portée globale, il sert de moyen de communication (interconnexion)
entre les éléments internes et externes d’une description
Mise à jour
Une variable est mise à jour immédiatement après son affectation
Un signal n’est mis à jour qu’après l’arrêt du processus le manipulant
Sens de l’affectation
Affecter une variable à une autre revient à remplacer le contenu de la variable par le
contenu de l’autre
Affecter un signal à un autre (par des process différents) revient à les interconnecter
Synthèse
Une variable est synthétisée (le plus souvent) en un élément mémoire (bascule,
registre, …etc)
Un signal est synthétisé (le plus souvent) en une interconnexion (un fil conducteur)
Symbole d’affectation
Variable « := »
Signal « <= »
Différence variables-signaux
architecture var of test is architecture sig of test is
signal trigger, sum : integer := 0; signal trigger, sum : integer := 0;
begin signal sig1 : integer := 1;
process signal sig2 : integer := 2;
variable var1 : integer := 1; signal sig3 : integer := 3;
variable var2 : integer := 2; begin
variable var3 : integer := 3; process
begin begin
wait on trigger; wait on trigger;
var1 := var2 + var3; sig1 <= sig2 + sig3;
var2 := var1; sig2 <= sig1;
var3 := var2; sig3 <= sig2;
Sum <= var1 + var2 + var3; sum <= sig1 + sig2 + sig3;
end process; end process;
end var; end sig;

Var1 = ?5 sig1 = ?5
Var2 = ?5 Sig2 = ?1
Var3 = ?5 sig3 = ?2
Sum = ?15 Sum = ?6
Différence variables-signaux
Si un signal et une variable sont de même type, il est possible d’affecter l’un à l’autre

 Affecter un signal à une variable

Variable := signal; -- variable et signal sont de même type

 Affecter une variable à un signal

Signal <= variable; -- variable et signal sont de même type


Exercice
Exercice 7
Soit la description suivante:
Entity ent is
Port( d: in integer);
End entity;
Architecture arch of ent is
signal a: integer := 1 ;
signal b : integer := 2;
signal c : integer := 3
Begin
a <= b;
b <= c;
c <= d;
End arch;
Si la valeur de d est 4, quelle serait la valeur de a, b et c. vérifier la valeur par
simulation
Exercices
Exercice 8
Ecrire un programme VHDL modélisant une mémoire RAM ayant 16 mots de 8 bits.
La RAM dispose d’un bus de données bidirectionnel à trois états de 8 bits, d’un bus
d’adresses de 4 bits, d’une ligne d’écriture et d’une ligne de lecture.

4 8
ADR DATA
RAM
RD
WR

Exercice 9
Ecrire un programme VHDL modélisant le détecteur de séquence vu dans le chapitre
1. (Section I-3-1 )

Vous aimerez peut-être aussi