LANGAGE VHDL Spécificités du langage vhdl partie 3
LANGAGE VHDLSpécificités du langage vhdl partie 3
LA TROISIEME
PARTIE :
XI.Attributs :
Se sont des
instructions qui permettent d'extraire des informations additionnelles d'un
signal; d'une
variable ou d'un type et qui ne sont pas liées à leurs valeurs.
Il existe deux
grandes classes:
·
La classe prédéfinie dans le standard 1076.
·
La classe développée par le concepteur.
1. Attribut prédéfinies :
Il existe cinq
catégories fondamentales organisées selon le résultat retourné.
Les attributs ont la syntaxe suivante:
Préfixe' attribut :
Préfixe représente une variable, un signal, un type,
une architecture ou une entité.
**Attributs de type Valeur**
Ø
Left : Retourne la borne gauche.
Ø
Right : Retourne la borne droite.
Ø
Hight : Retourne la borne supérieure.
Ø
Low : Retourne la borne inférieure.
Ø
Length : Retourne la taille d'un tableau.
Ø
Ascending : Retourne la valeur true si croissant.
Ø
Structure : Retourne true si le préfixe, qui doit
être une architecture, contient
un component.
Ø
Behavior Retourne
true si le préfixe, qui doit être une architecture, ne contient pas un
component.
Ø
Simple_name : Retourne
une chaine de caractère correspondant au préfixe qui doit être une entité.
Ø
Instance_name :
Retourne une chaine de caractère correspondant au chemin complet du préfixe qui
doit être une entité, cette chaine contient toutes les entités de la conception.
Ø
Path_name : Retourne
une chaine de caractère correspondant au chemin complet du préfixe qui doit
être une entité.
Exemple :
ARCHITECTURE ARCHITECTURE_NAME OF ENTITY_NAME IS
TYPE VECT1 IS ARRAY (15 DOWNTO 0) OF BIT;
TYPE VECT2 IS ARRAY ( 0 TO 31) OF BIT;
TYPE VECT3 IS ARRAY ( 31 DOWNTO 0) OF BIT;
BEGIN
PROCESS
VARIABLE ZO: INTEGER :=VECT1'LEFT;
--ZO=15
VARIABLE HE: INTEGER :=VECT1'RIGHT;
--HE=0
VARIABLE IR: INTEGER :=VECT2'HIGTH;
--IR=31
VARIABLE SE: INTEGER :=VECT2'LOW;
--SE=0
VARIABLE TT: INTEGER :=VECT1'LENGTH;
--TT=16
VARIABLE AF: BOOLEAN :=VECT2'ASCENDING;
--AF=TRUE
VARIABLE K: BOOLEAN :=VECT3'ASCENDING;
--K=FALSE
-- AUTRE DECLARATIONS
BEGIN
-- CORPS DU PROCESS
END PROCESS;
-- CORPS DE L'ARCHITECTURE
END ARCHITECTURE_NAME;
--"ZO","HE","IR","SE","TT","AF"
JUSTE DES NOMS
**Attributs de type fonction**
Ø
Pos(valeur) : Retourne la position de
"valeur".
Ø Val(valeur) : Retourne une valeur qui correspond à la position de "valeur".
Ø Succ(valeur) : Retourne une valeur qui correspond à la position qui succède
"valeur".
Ø
Pred(valeur) : Retourne une valeur qui correspond à
la position qui précède "valeur".
Ø
Leftof(valeur) : Retourne une valeur qui correspond à
la position gauche de "valeur".
Ø
Rightof : Retourne une valeur qui correspond à
la position droite de "valeur".
Ø
Left(valeur) : Appliqué à un tableau, retourne
l'index qui correspond à la borne gauche de "valeur".
Ø
Right(valeur) : Appliqué à un tableau, retourne
l'index qui correspond à la borne droite de "valeur".
Ø
High (valeur) : Appliqué à un tableau, retourne
l'index qui correspond à la borne supérieur de "valeur".
Ø
Low(valeur) : Appliqué à un tableau, retourne
l'index qui correspond à la borne inférieure de "valeur".
Ø
Event : Appliqué à un signal, retourne true
si le signal change de valeur.
Ø
Active : Appliqué à un signal, retourne true
pour toute transaction (évènement programmé) sur le signal.
Ø
Last_event : Appliqué à un signal, retourne le
temps écoulé depuis le dernier évènement.
Ø
Last_active : Appliqué à un signal, retourne le
temps écoulé depuis la dernière transaction sur un signal.
Ø
Last_value : Appliqué à un signal, retourne valeur
du signal avant le dernier évènement.
Ø
Image(expression) : Retourne une représentation sous
formes chaine de caractère de "expression" qui doit avoir un type
correspondant au préfixe.
Ø
Value(string) : Retourne la valeur, pour le type
spécifié par le préfixe, correspondantau "string".
Exemple 1 :
ARCHITECTURE ARCHITECTURE_NAME OF ENTITY_NAME IS
TYPE UNIV (SCEINCE, TECH, ELECTRO, WILL) ;
Type Etat (init, hold, strobe, read) ;
TYPE VECT IS ARRAY (15 DOWNTO 0) OF BIT;
BEGIN
PROCESS
VARIABLE A: UNIV
:=UNIV'POS(WILL); --A=3 EN
COMMENÇANT PAR 0
VARIABLE LL: UNIV :=UNIV'VAL(2); --LL=ELECTRO
VARIABLE AH: UNIV :=UNIV'SUCC(SCEINCE); --AH=TECH
VARIABLE O: UNIV :=UNIV'PRED(ELECTRO); --O=TECH
VARIABLE AK: UNIV :=UNIV'LEFTOF(ELECTRO); --AK=TECH
VARIABLE BA: UNIV :=UNIV'RIGHTOF(ELECTRO); --BA=WILL
VARIABLE R: INTEGER :=VECT'LEFT(VECT'RANGE); --R=15
VARIABLE KI: INTEGER :=VECT'RIGHT(VECT'RANGE); --KI=0
VARIABLE ZA: INTEGER :=VECT'HIGH(VECT'RANGE); --ZA=15
VARIABLE RO: INTEGER :=VECT'LOW(VECT'RANGE); --RO=0
-- AUTRE DECLARATIONS
BEGIN
-- CORPS DU PROCESS
END PROCESS;
-- CORPS DE L'ARCHITECTURE
END ARCHITECTURE_NAME;
Exemple 2 :
ARCHITECTURE ARCHITECTURE_NAME OF
ENTITY_NAME IS
BEGIN
PROCESS
VARIABLE A, E:BOOLEAN;
BEGIN
Q <='D' AFTER 10NS;
A:=Q'ACTIVE; -- A=TRUE
E:=Q'EVENT; -- E=FALSE
END PROCESS;
Exemple 3 :
ARCHITECTURE ARCHITECTURE_NAME OF
ENTITY_NAME IS
BEGIN
PROCESS (RST,CLK)
BEGIN
IF RST ='1' THEN Q <='0';
ELSIF CLK='1' AND CLK'EVENT THEN
Q <='D'; -- TESTER LE FRONT
MONTANT
END IF;
END PROCESS;
-- CORPS DE L'ARCHITECTURE
END ARCHITECTURE_NAME;
Exemple 4 :
ARCHITECTURE ARCHITECTURE_NAME OF
ENTITY_NAME IS
BEGIN
PROCESS
VARIABLE T:TIME;
BEGIN
Q <='D' AFTER 5NS;
WAIT 10NS;
T:=Q'LASTEVENT; -- T=5NS
END PROCESS;
-- CORPS DE L'ARCHITECTURE
END ARCHITECTURE_NAME;
Exemple 5 :
ARCHITECTURE ARCHITECTURE_NAME OF ENTITY_NAME IS
BEGIN
PROCESS
VARIABLE T:TIME;
BEGIN
Q <='D' AFTER 30NS;
WAIT 10NS;
T:=Q'LAST_ACTIVE; -- T=10NS
END PROCESS;
-- CORPS DE L'ARCHITECTURE
END ARCHITECTURE_NAME;
Exemple 6 :
ARCHITECTURE ARCHITECTURE_NAME OF ENTITY_NAME IS
BEGIN
PROCESS
VARIABLE Z:BIT;
BEGIN
Q <='1';
WAIT 10NS;
Q <='0';
WAIT 10NS;
V:=Q'LAST_VALUE ; -- Z=1
END PROCESS;
-- CORPS DE L'ARCHITECTURE
END ARCHITECTURE_NAME;
**Attributs De Type Signal**
Ø
Delayed(temps) : Création d'un signal retardé ayant
la même forme que le préfixe.
Ø
Stable(temps) : Création d'un signal booléen qui
devient true lorsque le signal préfixe est stable pour une période donnée
(temps).
Ø
Quiet(temps) : Création d'un signal booléen qui devient
true lorsqu le signal préfixe ne connait aucune transaction pendant une période
donnée (temps).
Ø
Transaction : Création d'un signal bit qui change
de valeur quand une transaction ou évènement se produit sur le signal préfixe.
Exemple 1 :
ARCHITECTURE ARCHITECTURE_NAME OF ENTITY_NAME IS
BEGIN
PROCESS
VARIABLE Z:BOOLEAN;
BEGIN
WAIT FOR 30NS;
Q <='D' AFTER 30NS;
WAIT 10NS;
A:=Q'QUIET(20); -- Z=FALSE
WAIT 40NS;
A:=Q'QUIET(20); -- Z=TREE
END PROCESS;
-- CORPS DE L'ARCHITECTURE
END ARCHITECTURE_NAME;
Exemple 2 :
ARCHITECTURE ARCHITECTURE_NAME OF ENTITY_NAME IS
BEGIN
PROCESS
VARIABLE A:BOOLEAN;
BEGIN
WAIT FOR 30NS;
Q <='D' AFTER 30NS;
WAIT 10NS;
A:=Q'STABLE(20); -- Z=TRUE
WAIT 30NS;
A:=Q'STABLE(20); -- Z=FALSE
END PROCESS;
-- CORPS DE L'ARCHITECTURE
END ARCHITECTURE_NAME;
**Attributs de type range**
Ø
Range : Retourne la valeur de la plage de
variation d'un tableau.
Ø
Reverse- range : Retourne la valeur inversée de la
plage de variation d'un Tableau.
**Attribut de type Type**
Base : Retourne le type base pour un type ou sous-type donné.
Exemple :
ARCHITECTURE ARCHITECTURE_NAME OF ENTITY_NAME IS
TYPE ETAT ('0', '1',
'X', 'Z', 'H', 'L', 'W') ;
SUBTYPE S_ETAT IS ETAT
RANGE 'O' TO 'Z' ;
V0: S_ETAT
:=S_ETAT'RIGHT; --V0=Z
(RIGHT)TYPE DE FONCION
V1:ETAT
:=S_ETAT'BASE'RIGHT; --V1=W
-- AUTRE DECLARATIONS
BEGIN
-- CORPS DE L'ARCHITECTURE
END ARCHITECTURE_NAME;
2.Attributs personnalisées :
Se sont des attributs définis par le programmeur pour une
utilisation propre.
Pour
définir un attribut, on doit suivre les étapes suivantes:
Déclaration par le MOT CLE attribute.
Spécification
en associant l'attribut à un préfixe:
Ø Entite
Ø Architecture
Ø Signal

Aucun commentaire