Vous êtes sur la page 1sur 9

28/06/2019

Ecole Nationale Polytechnique –Constantine.


Département EEA
Quatrième Année Ingénieurs –Semestre 2.
Automatique/Electrotechnique
Cours. Circuits Programmables

Chapitre V. (Partie 2)
Langages de programmation HDL
(Hardware description langage, langage de description du matériel)
Durée du Cours: 1h30
Présenté par: Dr. S. BENSEGUENI
(benskandix@gmail.com)

Année Universitaire. 2018-2019

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
1. Types énumérés
Un type énuméré est un type où toutes les valeurs
possibles sont explicitement énumérées.
Exemple :
1 type bit is (‘0’, ‘1’);
2 type boolean is (false, true);
3 type sm_states1 is (reset,running,
waiting, sleeping);
4 type sm_states2 is (reset, go,
pause, rest);
Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
1. Types énumérés
Le type bit qu’on a utilisé est en fait un type énuméré
composé de deux littéraux de caractère (les littéraux de
caractère doivent être entre guillemets simples). Le type
booléen est également un type énuméré qui utilise des
littéraux d'énumération. Si un littéral d'énumération
apparaît dans plusieurs types (reset dans sm_states1 et
sm_states2), on dit qu’il est surchargé. Pour éviter
d'éventuels problèmes, on doit qualifier les littéraux
d'énumération surchargés comme indiqué ci-dessous.
1 current_state <= sm_states1 (reset);
Circuits Programmables Dr. S. Bensegueni

1
28/06/2019

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
2. Tableaux (array)
Un tableau est une collection d'éléments du même type
de base. Le langage VHDL lui-même permet aux tableaux
d'utiliser n'importe quel type de base et de dimension
arbitraire, cependant, la conception des outils peuvent
limiter le nombre de dimensions qu'un tableau peut avoir.
Le VHDL permet également de déclarer des types de
tableau contraints (dont la taille est fixée dans la
déclaration) et des types de tableaux non contraints (dont
la taille est déterminée dans la déclaration d'un signal de
ce type). Pour utiliser un tableau, on doit d’abord déclarer
son type, puis créer un signal de ce type.
Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
2. Tableaux (array)
Exemple:
1 type UP_BYTE is array (0 to 7) of bit;
2 type DOWN_BYTE is array (7 downto 0) of bit;
3 type arb_vector is array (integer range <>) of
bit;
4 signal UP_DATA : UP_BYTE;
5 signal DOWN_DATA : DOWN_BYTE;
6 signal VECTOR1 : arb_vector(-3 to 3);
7 signal VECTOR2 : arb_vector(6 downto 0);

Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
3. Entiers (Integer)
Comme mentionné précédemment, les nombres entiers
sont en complément à deux dont la plage dépend des
outils de conception utilisés, bien que les entiers signés
sur 32 bits soient courants. VHDL fournit également le
type positif (un sous-type d’entier contenant tous les
entiers positifs mais pas zéro), et le type naturel (un
sous-type d’entier contenant des entiers positifs et
zéro). Les bits individuels d'un type entier ne peuvent
pas être directement accessibles. Pour accéder à des
bits individuels, le nombre entier doit être converti à un
type vecteur.
Circuits Programmables Dr. S. Bensegueni

2
28/06/2019

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
3. Entiers (Integer)
Pour attribuer une valeur particulière à un signal entier,
on utilise les littéraux numériques.
Tout nombre qu'on fait rentrer sera considéré comme
étant en base 10, sauf si on spécifie une base différente
en utilisant le symbole # comme suit :
100 -- decimal 100 (base 10 -- decimal)
2E6 -- decimal 2000000 (base 10 -- decimal)
2 #100# -- decimal 4 (base 2 -- binary)
16 #f# -- decimal 15 (base 16 -- hex)
.
Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
3. Entiers (Integer)
Lorsque on déclare un signal de type entier (ou l’un de ses sous-
types), on a la possibilité de spécifier une plage.
Exemple :
1 signal counter_8bit: INTEGER range −100 to 100;
2 signal current_value: INTEGER;
3
4 current_value <= counter_8bit;
5 counter_8bit <= current_value;
6 counter_8bit <= current_value + 1;
7 counter_8bit <= 10;

Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
4. Autres bibliothèques standard
Les types et opérations qu'on a vu jusqu’à présent
sont tous intégrés au VHDL, cependant, des
fonctionnalités étendues sont disponibles via
l'utilisation de bibliothèques. Ce sont des outils de
conception que les fournisseurs incluront pour
étendre les fonctionnalités de VHDL, mais, il est
préférable d'utiliser les bibliothèques standards
incluses dans VHDL plutôt que les bibliothèques de
fournisseurs. Bien entendu, les utilisateurs peuvent
également écrire leurs propres bibliothèques.
Circuits Programmables Dr. S. Bensegueni

3
28/06/2019

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
4. Autres bibliothèques standard
Dans le cadre de la norme VHDL IEEE, une
bibliothèque IEEE est définie et intégrée. cette
bibliothèque est incluse dans tous les logiciels VHDL.
La bibliothèque IEEE comprend le package
std_logic_1164 qui définit un type spécial
appelé std_logic. Le package numeric_std
définit les types entiers signés et non signés ainsi
qu'une gamme de fonctions de conversion de type et
des opérations pour ces types comme (arithmétique,
comparaison, logique et de décalage).
Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
4. Autres bibliothèques standard
Le package std_logic_arith est similaire mais un peu plus
volumineux, supportant plusieurs combinaisons de types de
données. Pour accéder à ces bibliothèques dans un VHDL,
ajoutez les lignes suivantes au début du fichier :
1 library IEEE;
2 use IEEE.std_logic_1164.all;
3 use IEEE.std_logic.arith.all;
La ligne 1 indique quelle est la bibliothèque utilisée, tandis que
les lignes 2 et 3 indiquent les packages inclus de la bibliothèque.
Il faut donc, que toutes les fonctionnalités disponibles soient
incluses.
Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
5. STD_LOGIC
Le type de bit VHDL, bien que simple, ne fournit pas une
puissance suffisante pour modéliser toutes les
fonctionnalités du circuit.
Par exemple, les états à haute impédance ne peuvent pas
être modélisés rendant strictement illégal pour un signal
d'avoir plus d'un conducteur. Pour surmonter cela, de
nouveaux types appelés std_ulogic et std_logic
ont été créé, fournissant un système logique à 9 valeurs.
Ces types sont disponibles à partir de la bibliothèque
std_logic_1164 et sont définis comme suit :

Circuits Programmables Dr. S. Bensegueni

4
28/06/2019

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
5. STD_LOGIC
type std_ulogic is ( ‘U’, -- uninitialised
‘X’ -- unknown
‘0’ -- low
‘1’ -- high
‘Z’ -- high impedance
‘W’ -- weak
‘L’ -- weak low
‘H’ -- weak high
‘-’ -- don’t care);

.
Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
6. Conversion de type
Le VHDL est un langage fortement typé et en tant que tel
ne convertit pas automatiquement les types. Il existe
cependant deux mécanismes pour changer explicitement
d'un type à l'autre. Pour la conversion entre différents
types d'entiers ou conversion entre des tableaux de types
similaires (Les types de tableaux sont similaires s'ils ont la
même longueur et le même type de base (ou un type de
base convertible)), la syntaxe ci-dessous peut être
utilisée. Notez que la conversion entre les types
énumérés n'est pas possible avec cette méthode.
Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
6. Conversion de type
type INT_ARRAY1 is array (1 to 5) of integer range 0 to 10;
type INT_ARRAY2 is array (5 downto 1) of integer range 0 to 10;
signal array1 : INT_ARRAY1;
signal array2 : INT_ARRAY2;
...
-- target_type_name(expression)
array2 <= INT_ARRAY2(array1);

Circuits Programmables Dr. S. Bensegueni

5
28/06/2019

2. Développement et conception en langage VHDL


(Types et librairies VHDL)
6. Conversion de type
Pour les autres types, les fonctions doivent être
écrites pour convertir explicitement entre les types.
Par exemple, le package std_logic_arith
contient des fonctions permettant de convertir des
types entier, non signé, signé et
std_logic_vector. Le package
std_logic_1164 contient des fonctions
permettant de convertir des types std_logic,
std_ulogic et bit.
Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Déclarations simultanées et séquentielles)
Reflétant la nature du matériel numérique, le VHDL
fournit des instructions simultanées et séquentielles.
Les instructions simultanées apparaissent dans le
corps de l'architecture des entités et toutes les
instructions simultanées s'exécutent en parallèle. Les
instructions séquentielles apparaissent dans un
processus dans le corps de l'architecture et toutes les
instructions du processus s'exécutent dans l'ordre. Les
processus eux-mêmes sont des déclarations
séquentielles.
Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Déclarations simultanées et séquentielles)
1. Déclarations simultanées
Les instructions simultanées sont toutes exécutées en
parallèle, l'ordre dans lequel elles apparaissent n'a
aucune incidence sur le résultat.
Par exemple, les assignations de signaux simultanées
suivantes sont identiques.
1 X <= A + B;
2 Z <= C + X;
ou:
1 Z <= C + X;
2 X <= A + B;
Dans les deux cas, Z atteindra une valeur de A + B + C.
Circuits Programmables Dr. S. Bensegueni

6
28/06/2019

2. Développement et conception en langage VHDL


(Déclarations simultanées et séquentielles)
1. Déclarations simultanées
1.1. Affectation de signaux simultanés
Les affectations de signaux simultanées se produisent en dehors
des instructions de processus et ont la syntaxe suivante:
SIGNAL_NAME <= EXPRESSION;
Chaque instruction simultanée qui attribue une valeur à un
signal est considérée comme un pilote pour ce signal. Comme
indiqué précédemment, dans une telle situation, le type
std_logic doit être utilisé.
L'utilisation appropriée de l'état de haute impédance fera en
sorte que le processus de synthèse déduit le besoin de
mémoires tampons à trois états et la possibilité que deux pilotes
essayant de générer le même signal simultanément soient
supprimés.
Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Déclarations simultanées et séquentielles)
1. Déclarations simultanées
1.2. Affectation conditionnelle du signal
L'affectation de signaux conditionnels simultanés est similaire à
l'instruction if séquentielle. Dans cette structure, l'expression de la
première condition jugée vraie est affectée au signal cible.
L'affectation conditionnelle du signal est synthétisée en un ensemble
de multiplexeurs en cascade, ce qui crée des délais importants s'il
existe de nombreuses autres conditions. Pour éviter ces retards,
l'affectation de signal sélectionné doit être utilisée de préférence à
l'attribution de signal conditionnelle dans la mesure du possible. La
syntaxe pour une affectation conditionnelle est la suivante:
OUTPUT <= EXPRESSION1 when COND1 else
EXPRESSION2 when COND2 else
EXPRESSION3;

Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Déclarations simultanées et séquentielles)
1. Déclarations simultanées
1.2. Affectation conditionnelle du signal

.
Circuits Programmables Dr. S. Bensegueni

7
28/06/2019

2. Développement et conception en langage VHDL


(Déclarations simultanées et séquentielles)
1. Déclarations simultanées
1.3. Affectation du signal sélectionné
L'affectation du signal simultané sélectionné est similaire à la
déclaration séquentielle de case. Il attribue une valeur à un
signal de sortie en fonction de la valeur d'un signal CHOICE de
largeur de bit arbitraire. Les CHOICE_LIST dans l’affectation
de signal sélectionnée doivent respecter les règles suivantes:
• il doit s'agir d'expressions statiques ou de plages statiques;
• ils doivent s’exclure mutuellement;
• tous les choix possibles doivent être énumérés;
• La clause when others peut être utilisée pour énumérer
implicitement tous les choix non explicitement listés.
Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Déclarations simultanées et séquentielles)
1. Déclarations simultanées
La syntaxe de l'affectation de signal sélectionnée est indiquée ci-
dessous.
with CHOICE select
OUTPUT <= EXPRESSION_1 when CHOICE_LIST_1,
EXPRESSION_2 when CHOICE_LIST_2,

EXPRESSION_N when others;

Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Déclarations simultanées et séquentielles)
1. Déclarations simultanées
1.3. Affectation du signal sélectionné
L'affectation du signal sélectionné est synthétisée selon une structure
parallèle, comme illustré à la figure:

Circuits Programmables Dr. S. Bensegueni

8
28/06/2019

2. Développement et conception en langage VHDL


(Déclarations simultanées et séquentielles)
- Un exemple de code
Un exemple d’entité utilisant deux instructions simultanées (affectations de signaux
conditionnelles et sélectionnées).
1 -- An example of conditional and selected signal assignment
2 library IEEE;
3 use IEEE.std_logic_1164.all;
4
5 entity concurrent is
6 port (
7 A: in STD_LOGIC_VECTOR (7 downto 0);
8 B: in STD_LOGIC_VECTOR (7 downto 0);
9 C: in STD_LOGIC_VECTOR (7 downto 0);
10 Y: out STD_LOGIC_VECTOR (7 downto 0);
11 Z: out STD_LOGIC_VECTOR (7 downto 0);
12 VAL: in INTEGER range 0 to 15
13 );
14 end concurrent;

Circuits Programmables Dr. S. Bensegueni

2. Développement et conception en langage VHDL


(Déclarations simultanées et séquentielles)
15
16 architecture concurrent_arch of concurrent is
17 begin
18
19 -- Conditional signal assignment
20 Y <= A when VAL=0 else
21 B when VAL=1 else
22 ‘‘10101010’’ when VAL=3 else
23 C;
24
25 -- Selected signal assignment
26 with VAL+1 select
27 Z <= A when 5,
28 C when 2,
29 ‘‘00001111’’ when 13,
30 B when 6 to 12,
31 ‘‘00110011’’ when others;
32
33 end concurrent_arch;
Circuits Programmables Dr. S. Bensegueni

Vous aimerez peut-être aussi