Master 1 Electronique Energie électrique Automatique
Conception des systèmes Numériques CSN
Samuel CRAND Bât 6 – ISTIC Tél : 02 23 23 65 04 [email protected]
Partie 2
2
VHDL
De la Spécification Haut Niveau au Circuit
Samuel CRAND Bât 6 – ISTIC Tél : 02 23 23 65 04 [email protected]
0
www.istic.univ-rennes1.fr
Objectifs de ce module
3
. Présentation du langage VHDL
. Principes généraux
. Syntaxe
. Exemples
. VHDL pour la Synthèse
. Utilisation du VHDL pour la conception de systèmes numériques
?
Code VHDL
Source : www. altera.com
0
www.istic.univ-rennes1.fr
4
VHDL
Langage de modélisation de circuits numériques
. VHDL : VHSIC Hardware Description Language
. VHSIC : Very High Speed Integrated Circuit
0
www.istic.univ-rennes1.fr
Plan 5
1. Introduction
2. Eléments de base
3. Types
4. Objets
5. Attributs
6. Exécution parallèle et séquentielle
7. Instructions
8. Opérateurs standards
9. Description hiérarchique
10. VHDL et simulation
11. VHDL et synthèse 12. Conclusion
13. Références bibliographiques
0
www.istic.univ-rennes1.fr
1. Introduction 6
- Pourquoi le VHDL ?
. Langage non propriétaire
. Standardisation précoce
. Langage adopté par de nombreux outils
. Autre langage : VERILOG
- Initialement : Le VHDL a été développé pour la modélisation et la simulation
- Synthèse VHDL (synthèse logique) liée à l’essor des CLP
(Circuits Logiques Programmables)
- Modélisation et synthèse : 2 concepts différents
. Modélisation . Synthèse
-> Le résultat de la simulation
-> Le résultat ET la difficulté pour y aboutir
0
www.istic.univ-rennes1.fr
1. Introduction 7
- Les circuits/systèmes à concevoir : Taille et complexité
- Conséquence
. La description au niveau porte devient rapidement difficile à gérer
- Nécessité d'une description plus abstraite
. Niveau d'abstraction plus élevé Démarche descendante
- Les HDL assimilables aux langages logiciels de haut niveau
. Langage C Assembleur . HDL
Equations logiques
- Objectifs des HDL
. Description de l'application au niveau approprié . Simulation et vérification . Conception et validation
0
www.istic.univ-rennes1.fr
1. Introduction 8
- Fin des années 70 : lancement du programme VHSIC par
le ministère de la défense américaine
- 1981 : Premières réflexions sur le VHDL
- 1987 : IEEE 1076 : Définition d ’un langage unique pour
. La description . La modélisation . La simulation . La synthèse . La documentation
- 1993 : IEEE 1164 : Normalisation des signaux logiques multivaleurs
- 1996 : IEEE 1076.3 : Normalisation pour la synthèse
. Implantation d ’un nombre signé
0
www.istic.univ-rennes1.fr
2. Elements de base
9
- Entity/Architecture : Brique de base de complexité très variable
Fonctionnement et/ou structure interne
Interface externe
- Configuration : Possibilité d’associer plusieurs architectures à une seule entité
- Ex : Une architecture dédiée à la simulation et une pour la synthèse
- Package :
- Faciliter une conception modulaire et hiérarchique
- Faciliter la réutilisation
- Ex : les entités/architectures à réutiliser : dans des packages
- Library :
- Possibilité d’utiliser le concept de bibliothèques - Bibliothèque work : bibliothèque de travail - Certaines bibliothèques sont « implicites », par ex : work et std
0
www.istic.univ-rennes1.fr
2. Elements de base : Entité et Architecture
10
Vue externe : Définition de l'entité
In 1
In 2 In 3
Bloc A
Out 1
Out 2
Vue interne : Définition de l'architecture
Bloc A
In 1
In 2
Bloc B
Bloc C
Out 1
In 3
Bloc D
Bloc E
Out 2
0
www.istic.univ-rennes1.fr
2.1 Entité (Entity)
11
. Port :
. Signal d ’interface entre l’entité et l’extérieur . Chaque port est associé à un nom, un mode et un type . Ordre de la déclaration des différents signaux : aucune importance . Ordre conservé lors d’une utilisation à un plus haut niveau de cette entité
- Instanciation d'un composant (component)
. Mode :
. Définition du sens du signal . 4 modes sont définis
- in : Signal d’entrée monodirectionnel - out : Signal de sortie monodirectionnel - inout : Signal d’entrée/sortie bidirectionnel - buffer : Signal de sortie/entrée monodirectionnel
. Utile pour le « rebouclage" (sortie considérée comme une entrée) . Peu utilisé (remplacé par une sortie associée à un signal interne)
0
www.istic.univ-rennes1.fr
. Mode : 4 modes de ports
CS
R/W
Adresse
Données
Mémoire
2.1 Entité (Entity)
12
. In . Out . Inout . Buffer
Busy
Erreur
0
www.istic.univ-rennes1.fr
2.1 Entité (Entity)
13
Déclaration :
ENTITY nom_entite IS
GENERIC (parametres_generiques : type := valeur_par_defaut);
PORT ( entrees : IN type_entrees;
sorties : OUT type_sorties;
entreessorties : INOUT type_entreessorties;
entreessorties_buffer : BUFFER type_entreessorties_buffer);
END nom_entite;
0
www.istic.univ-rennes1.fr
2.1 Entité (Entity)
14
. Exemple : Un additionneur 8 bits synchrone à une horloge
ENTITY adder_pip IS
PORT( clk : IN bit;
a,b : IN bit_vector(7 DOWNTO 0);
cin : IN bit;
s : OUT bit_vector(7 DOWNTO 0);
cout : OUT bit);
END adder_pip;
0
www.istic.univ-rennes1.fr
2.2 Architecture
15
. Spécification de la fonctionnalité
. Plusieurs architectures peuvent être définies pour le même modèle
Déclaration :
ARCHITECTURE nomdelarchitecture OF nomdelentité IS
déclarations de procédures, de types, de constantes, de composants, de signaux
BEGIN
définiton de processus et/ou
d'instances de composants, ...
END nomdelarchitecture;
0
www.istic.univ-rennes1.fr
2.2 Architecture
16
. Exemple
ARCHITECTURE comportementale OF adder_pip IS
BEGIN
PROCESS(clk)
VARIABLE carry : bit;
VARIABLE sum : bit_vector (7 DOWNTO 0);
BEGIN
IF (CLK = '1') THEN
carry := cin;
FOR i IN 0 TO a'length-1 LOOP
sum(i) := a(i) XOR b(i) XOR carry;
carry := (a(i) AND b(i)) OR (a(i) AND carry) OR (b(i) AND carry);
END LOOP;
cout <= carry;
s <= sum;
END IF;
END PROCESS;
END comportementale;
0
www.istic.univ-rennes1.fr
2.2. Architecture
17
. 3 Types de description :
. Description comportementale (behavioural)
- Description purement fonctionnelle du circuit
- Description algorithmique
. Description flot de données (data flow)
- Association d’opérateurs logiques (Register Transfert Level)
- Description des signaux (entrées et sorties de ces modules)
- Traduction d’une table de vérité
. Description structurelle
- Traduction d’une représentation schématique
- Utilisation de composants disponibles
- Description des signaux permettant d’assurer les connexions
Remarque : Au sein d’une même architecture, il est possible d ’utiliser des modules décrits de manière comportementale, flot de données ou structurelle
0
www.istic.univ-rennes1.fr
2.2.1 Architecture : Description comportementale
18
. Description haut niveau
ARCHITECTURE haut_niveau OF adder IS BEGIN
S <= A + B;
END haut_niveau;
. Description haut niveau : une bascule D active sur front montant
ENTITY basculed IS PORT(d,clk : IN bit; q: OUT bit);
END basculed;
ARCHITECTURE comportementale OF basculed IS BEGIN
PROCESS(clk) BEGIN IF (clk='1') THEN q<=d;END IF; END PROCESS;
END comportementale;
0
www.istic.univ-rennes1.fr
2.2.2 Architecture : Description flot de données
19
. Description flot de données (niveau équations logiques)
ARCHITECTURE niveau_equations_logiques OF adder IS BEGIN
S(0) <= A(0) XOR B(0); S(1) <= A(0) AND B(0) XOR A(1) XOR B(1);
END niveau_equations_logiques;
. Description flot de données (bas niveau)
ARCHITECTURE bas_niveau OF adder IS BEGIN
S(0) <= '1' WHEN A(0) /= B(0) ELSE '0'; S(1) <= '1' WHEN (
(A(0)/=B(0) AND A(1)/=B(1)) OR (A(1) =B(1) AND (A(0)='1') AND (B(0)='1') ) OR (A(1)/=B(1) AND (A(0)='0') AND (B(0)='0') )
) ELSE '0';
END bas_niveau;
0
www.istic.univ-rennes1.fr
2.2.3 Architecture : Description structurelle
20
. Traduction d'une représentation schématique
A(0) B(0)
A(1) B(1)
A(0) B(0)
S(0)
VHDL
S(1)
ARCHITECTURE structurelle OF adder IS COMPONENT xor2
port(e1,e2 : in bit; s : out bit); end COMPONENT
COMPONENT and2
port(e1,e2 : in bit; s : out bit); end COMPONENT
SIGNAL inter1,inter2 :bit; BEGIN
Publicité
u1 : xor2 PORT MAP (e1=>A(0),e2=>B(0),s=>S(0)); u2 : xor2 PORT MAP (e1=>A(1),e2=>B(1),s=>inter1); u3 : and2 PORT MAP (e1=>A(0),e2=>B(0),s=>inter2); u4 : xor2 PORT MAP (e1=>inter1,e2=>inter2,s=>S(1));
0
end structurelle;
www.istic.univ-rennes1.fr
2.2.3 Architecture : Description mixte
. Au sein d'une même architecture, il est possible d'utiliser du comportemental et du structurel
21
reset
D
S_inter
clk
b a
Adder
s
ENTITY integration IS PORT( a : IN bit_vector(0 to 1); reset, clk : IN bit; s : OUT bit_vector(0 to 1));
END integration; ARCHITECTURE mixte OF integration IS SIGNAL b,s_inter :bit_vector(0 to 1); COMPONENT adder
PORT(a,b : IN bit_vector(0 to 1); s : OUT bit_vector(0 to 1)); END COMPONENT;
VHDL
BEGIN
PROCESS(clk) BEGIN
IF clk = '1' THEN
IF reset = '1' THEN b <= ''00''; ELSE b <= s_inter; END IF;
END IF;
END PROCESS; u1 : adder PORT MAP (a=>a,b=>b,s=>s_inter); s <= s_inter;
0
END mixte;
www.istic.univ-rennes1.fr
3. Types
22
. Types :
. VHDL interdit l’association de 2 signaux de type différent . Types disponibles
- Scalaires (Scalar)
. Entiers (integer) . Flottants (Real) . Enumérés (Enumerated) . Physiques (Physical)
- Composés (Composite)
. Tableaux (Array)
- Collection d’objets de même type
. Enregistrements (Record)
- Collection d’objets de type différent
- Access et File
. Types pour la manipulation de fichiers ou sur les pointeurs
0
www.istic.univ-rennes1.fr
3. Types
23
. Sous-types :
. Restrictions :
SUBTYPE chiffre IS integer RANGE 0 TO 9; SUBTYPE octet IS bit_vector(0 TO 7);
. 2 sous-types prédéfinis
SUBTYPE natural IS integer RANGE 0 TO higher_integer; SUBTYPE positive IS integer RANGE 1 TO higher_integer;
. Association d’un sous-type au type à partir duquel il a été défini : autorisé
. Association entre 2 sous-types différents issus du même type : autorisé
0
www.istic.univ-rennes1.fr
3.1 Types : Scalaires
24
. Types entiers (INTEGER)
-231 + 1 entier 231 - 1
TYPE chiffre_ascendant IS RANGE 0 TO 9; TYPE chiffre_descendant IS RANGE 9 DOWNTO 0;
Notations de valeurs -154 147
2#01010111# (binaire)
16#3FFF# hexadécimal
. Types flottants (REAL)
Approximation discrète de l'ensemble des réels dans un intervalle donné
TYPE real IS RANGE -1.0E38 TO 1.0E+38;
0
www.istic.univ-rennes1.fr
3.1 Types : Scalaires
25
. Types énumérés :
Ensemble de valeurs désignées par des identificateurs ou des caractères
TYPE boolean IS (false, true);
TYPE bit IS ('0','1');
TYPE std_logic IS ('U', ’X', ’O', ’1' ’Z', ’W', ’L', ’H' , ’-');
TYPE jour IS (lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche);
Remarques :
. Chaque caractère ou chaîne de caractères au sein d'un même type
doit être distinct
. Possibilité d'utiliser le même caractère dans 2 types distincts
0
www.istic.univ-rennes1.fr
3.1 Types : Scalaires
26
. Types physiques :
Valeurs numériques de quantités physiques
TYPE time IS RANGE -2 147 483 647 TO 2 147 483 647
UNITS
ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 us; sec = 1000 ms; min = 60 s; hr = 60 min;
END UNITS;
0
www.istic.univ-rennes1.fr
3.2 Types : Composés
27
. Types tableaux
. Bornes fixées à la définition du type
TYPE octet IS ARRAY (7 DOWNTO 0) OF bit;
TYPE memoire IS ARRAY (0 TO 255) OF octet;
. Bornes fixées à chaque déclaration d'un objet de type tableau
TYPE vecteur IS ARRAY (integer RANGE <>) OF std_logic;
SIGNAL mon_vecteur : vecteur(1 TO 20)
. L'indice peut-être un type entier défini par déclaration
TYPE adresse IS RANGE 0 TO 255;
TYPE memoire IS ARRAY (adresse) OF octet;
. Tableaux prédéfinis
TYPE std_logic_vector IS ARRAY (natural RANGE <>) OF std_logic;
TYPE string IS ARRAY (positive RANGE <>) OF character; 0
www.istic.univ-rennes1.fr
3.2 Types : Composés
28
. Types enregistrements
. Ensemble d'éléments nommés avec des types pouvant être différents
TYPE instruction IS
RECORD
code_operatoire : operation;
addresse : octet;
operande1, operande2 : integer RANGE 0 TO 15;
END RECORD;
. Accès à un champ particulier
instruction.code_operatoire <= soustraction;
0
www.istic.univ-rennes1.fr
3.3 Types : Classes
29
. Types et sous-types : . 3 classes
- Types prédéfinis
. Standard VHDL initial IEEE.1076
- Types complémentaires
. Standard VHDL initial IEEE.1164
- Types définis par l’utilisateur
0
www.istic.univ-rennes1.fr
3.3 Types : Classe - les Prédéfinis
30
Prédéfinis
Integer
bit
Boolean
Real
Time
Natural
Positive
Bit_vector
Remarque : Synthèse logique - time : non - real : non - integer : Favoriser les entiers « bornés »
0
www.istic.univ-rennes1.fr
3.3 Types : Classe - les complémentaires
31
. Standard IEEE 1164 - les signaux multivaleurs (package std_logic_1164)
- std_ulogic et std_ulogic_vector
. Std_ulogic se caractérise par 9 valeurs
- ‘ U ’ : non initialisé - ‘ X ’ : niveau inconnu (conflit fort) - ‘ 0 ’ : niveau bas - ‘ 1 ’ : niveau haut - ‘ Z’ : haute impédance - ‘W ’ : niveau inconnu (conflit faible) - ‘ L ’ : niveau bas - ‘ H ’ : niveau haut - ‘ - ’ : niveau quelconque
. Std_logic : SUBTYPE std_logic IS RESOLVED std_ulogic; - VHDL interdit la connexion de 2 sorties entre elles - Introduction des signaux "résolus" (Resolved Signal) - Possibilité d'interconnecter plusieurs sorties ensemble 0
. IEEE 1076.3 - la synthèse logique et les traitements arithmétiques
www.istic.univ-rennes1.fr
- signed et unsigned
32
X 0
1 Z W L
TYPE stdlogic_table IS ARRAY(std_ulogic, std_ulogic) OF std_ulogic; ------------------------------------------------------------------- -- resolution function ------------------------------------------------------------------- CONSTANT resolution_table : stdlogic_table := ( --------------------------------------------------------- -- | U -- --------------------------------------------------------- -- 'U', ( 'U', 'X', ( 'U‘ , 'X', ( 'U', 'X', ( 'U', 'X', ( 'U', 'X', ( 'U', 'X', ( 'U', ( 'U', 'X', ( 'U',‘ X',
'U' ), 'U', 'X' ), 'X', 'X' ), '0', 'X' ), '1', 'X' ), 'H', 'X' ), 'W', 'W', 'X' ), 'H',‘ X' ), 'X' )); 'X',
'U', 'X', 'X', '1', '1', '1', '1', '1', 'X',
'U', 'X', '0', '1', 'L', ‘W', 'L', 'W', 'X',
'U', 'X', '0', '1', 'W', 'W', 'W‘, 'W‘, 'X',
'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X',
'U', 'X', '0', 'X', '0', '0', '0', '0', 'X',
- |
H
-- | U | -- | X | -- | 0 | -- | 1 | -- | Z | -- | W | -- | L | -- | H | -- | - |
FUNCTION resolved(s : std_ulogic_vector ) RETURN std_ulogic IS
VARIABLE result : std_ulogic := 'Z'; -- weakest state default
BEGIN
IF (s'LENGTH = 1) THEN RETURN s(s'LOW); ELSE
FOR i IN s'RANGE LOOP
result := resolution_table(result, s(i));
END LOOP;
END IF; RETURN result;
END resolved;
0
www.istic.univ-rennes1.fr
3.3 Types : Classe - les définis par l'utilisateur
33
. Types définis à une application d’un type ou d’un sous-type
TYPE memoire IS ARRAY (integer RANGE<> ) OF octet;
VARIABLE ma_memoire : memoire (15 DOWNTO 0);
. Types définis à une application d’un sous-type
SUBTYPE octet IS std_logic_vector (7 DOWNTO 0 );
SIGNAL adresse : octet;
0
www.istic.univ-rennes1.fr
4. Objets : Constantes, Variables, Signaux
34
. Utilisation des constantes et des variables : proche des langages traditionnels . Utilisation des signaux : spécification au langage de description du matériel
. Constantes (Constant)
. Objets internes à valeurs fixes et définitives . Synthèse : Mise à VCC ou au GND Surface nulle . Déclaration : constant nom : type := valeur; . Exemple :
CONSTANT modulo : integer := 17 ;
. Variables (Variable)
. Objets permettant de conserver une valeur pendant un certain temps . Utilisable qu'au sein d'un processus (définition dans le process) . Exemple:
VARIABLE octet1 : std_logic_vector(0 TO 7) := "00000001";
0
www.istic.univ-rennes1.fr
4. Objets : Constantes, Variables, Signaux
35
. Variable
library IEEE; use IEEE.STD_LOGIC_1164.ALL;
entity synthese_var is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC; c : in STD_LOGIC; clk : in STD_LOGIC; y : out STD_LOGIC);
end synthese_var;
architecture Behavioral of synthese_var is
BEGIN
PROCESS(clk) VARIABLE tmp : STD_LOGIC; BEGIN
if rising_edge(clk) then
tmp := a and b; y <= tmp or c;
end if;
END PROCESS;
end Behavioral;
a b c
clk
Synthèse
y
0
www.istic.univ-rennes1.fr
4. Objets : Constantes, Variables, Signaux
36
. Signaux (signal)
. Utilisation en mode concurrent et séquentiel . Déclaration dans une "zone" concurrente . Signaux internes, temporaires . Synthèse (représentation matérielle : un fil ou une mémoire) . Absence de mode
. Synthèse d'une VARIABLE Synthèse d'un SIGNAL . Une valeur courante . Une valeur future
0
www.istic.univ-rennes1.fr
4. Objets : Constantes, Variables, Signaux
37
. Signaux (signal)
. Synthèse d'une VARIABLE Synthèse d'un SIGNAL
library IEEE; use IEEE.STD_LOGIC_1164.ALL;
entity synthese_signal is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC; c : in STD_LOGIC; clk : in STD_LOGIC; y : out STD_LOGIC);
end synthese_signal;
architecture Behavioral of synthese_signal is SIGNAL tmp : STD_LOGIC; BEGIN
PROCESS(clk) BEGIN
if rising_edge(clk) then
tmp <= a and b; y <= tmp or c;
end if;
END PROCESS;
end Behavioral;
a
b
clk
c
Synthèse
tmp
y
Synthèse
www.istic.univ-rennes1.fr
0
5. Attributs
38
. Informations supplémentaires sur les types et objets . Utilisation : T'att avec T un objet ou un type et att un attribut
. Attributs d'un scalaire
T'left T'right T'low T'high
-> Limite gauche de T -> Limite droite de T -> Limite basse de T -> Limite haute de T
. Attributs d'un ensemble discret
-> Numéro de la position de X dans T
Publicité
T'pos(X) T'val(N)-> Valeur à la position N dans T T'leftof(X) T'rightof(X) T'pred(X)
-> Valeur à une position à gauche de X dans T -> Valeur à une position à droite de X dans T -> Valeur à une position au dessous de X dans T
T'succ(X)
-> Valeur à une position au dessus de X dans T
0
www.istic.univ-rennes1.fr
5. Attributs
39
. Exemples - Attributs d'un type scalaire
Type adr is integer range 7 downto 0;
adr'left = 7 adr'right = 0 adr'low = 0 adr'high = 7
. Exemples - Attributs d'un type « ensemble discret »
Type MVL4 is ('U', '0', '1', 'Z');
MVL4'pos('1') = 2 MVL4'val(0) = 'U' MVL4'rightof('1') = 'Z'
MVL4'leftof('1') = '0' MVL4'succ(2) = 'Z' MVL4'prec(2) = '0'
0
www.istic.univ-rennes1.fr
5. Attributs
40
. Attributs d'un tableau
Limite gauche de l'intervalle des indices de la dim. N de A Limite droite de l'intervalle des indices de la dim. N de A Limite basse de l'intervalle des indices de la dim. N de A Limite haute de l'intervalle des indices de la dim. N de A Intervalle des indices de la dim. N de A
A'left(N) A'right(N) A'low(N) A'highof(N) A'range(N) A'reverse_range(N) Intervalle inverse des indices de la dim. N de A Longueur de l'intervalle des indices de la dim. N de A A'length(N)
. Attributs d'un signal
S'stable(t) Renvoie une valeur booléenne à true si S est constant
depuis au moins t
S'event Renvoie une valeur booléenne à true si S a changé depuis
le dernier cycle de simulation
0
www.istic.univ-rennes1.fr
5. Attributs
41
. Exemples : Attributs d'un tableau
type word is bit_vector(31 downto 0); type memory is array(7 downto 0) of word; variable mem : memory;
mem'left = 7 mem'left(3) = 31 mem'right = 0 mem'low = 0 mem'high = 7 mem'high(5) = 31
mem'range = 7 downto 0 mem'range(3) = 31 downto 0 mem'reverse_range = 0 to 7 mem'length = 8 mem'length(3) = 32
0
www.istic.univ-rennes1.fr
6. Exécution parallèle et séquentielle
42
. Particularisme du VHDL : Exécution parallèle ou séquentielle
. Exécution parallèle
. Exécution par défaut . Les instructions au sein d'une architecture sont exécutées en parallèle ou de manière concurrente . Exécution concurrente = Exécution combinatoire . Chaque opération dans une architecture est exécutée à chaque instant
. Exécution séquentielle
. Nécessité d'utiliser un PROCESS . Le process est activé à chaque fois qu'un signal déclaré dans sa liste de sensibilité change de valeur. . Les instructions sont exécutées séquentiellement . Les modifications des signaux (signal) sont effectives à la fin du process
0
www.istic.univ-rennes1.fr
6. Exécution parallèle et séquentielle
43
. Exécution mixte
. Possibilité d'associer dans une même architecture des modules à exécution parallèle et séquentielle . Exemple : Comparateur synchrone à une horloge clk
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY comp_synch IS PORT ( a, b, clk, reset : IN bit; qs : OUT bit); END comp_synch; ARCHITECTURE archi_mixte OF comp_synch IS SIGNAL q : bit; BEGIN
q<='1‘ WHEN a=b ELSE '0'; PROCESS(clk, reset) BEGIN
Synthèse
a
b
Comparateur
qs
q
clk
Reset
IF reset='0' THEN qs<='0'; ELSIF (clk'event AND clk='1') THEN qs <= q; END IF;
END PROCESS;
END archi_mixte;
www.istic.univ-rennes1.fr
0
7. Instructions
44
. Deux types d'exécution : Deux familles d'instructions
. Instructions réservées au mode d'exécution parallèle ou concurrente
- Toutes les opérations sont exécutées simultanément - L'ordre d'écriture n'a aucune importance
I1
I2
I3
. Instructions réservées au mode d'exécution séquentielle - Chaque opération est effectuée l'une après l'autre - L'ordre d'écriture a une grande importance
0
www.istic.univ-rennes1.fr
I1
I2
I3
7.1 Instructions de type parallèle
45
. Assignation inconditionnelle . Assignation conditionnelle
signal <= {expression WHEN condition} ELSE expression
ARCHITECTURE flot_de_donnees OF xor IS BEGIN
c <= '0' WHEN a = '0' AND b = '0' ELSE '1' WHEN a = '0' AND b = '1' ELSE '1' WHEN a = '1' AND b = '0' ELSE '0' WHEN a = '1' AND b = '1' ELSE '0';
END flot_de_donnees;
0
www.istic.univ-rennes1.fr
7.1 Instructions de type parallèle
46
. Assignation sélective
WITH sélecteur SELECT signal <= {expression WHEN valeur_sélecteur,
expression WHEN OTHERS};
ARCHITECTURE flot_de_donnees OF mux IS SIGNAL selection : std_logic_vector(0 TO 1); SIGNAL a,b,c,d,s : std_logic_vector(0 TO 7); BEGIN
WITH selection SELECT s <= a WHEN "00"; b WHEN "01"; c WHEN "10"; d WHEN OTHERS;
END flot_de_donnees;
0
www.istic.univ-rennes1.fr
7.1 Instructions de type parallèle
47
. Assignation d'un composant
label : nom_du_composant PORT MAP (association des ports)
ARCHITECTURE arch_full OF full_adder IS SIGNAL inter : bit; COMPONENT half_adder PORT (a,b,cin : IN bit;
cout,s : OUT bit);
END COMPONENT; BEGIN
u1 : half_adder PORT MAP (a=>a(0),b=>b(0),cin=>cin,cout=>inter,s=>s(0)); u2 : half_adder PORT MAP (a=>a(1),b=>b(1),cin=>inter,cout=>cout,s=>s(1));
END arch_full;
. Instruction GENERATE
label : FOR variable_boucle IN val_iniale TO val_finale GENERATE {instructions parallèles} END GENERATE label
0
www.istic.univ-rennes1.fr
48
7.1 Instructions de type parallèle
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mod_gen IS
GENERIC(N : integer := 4); PORT(
a,b : IN std_logic_vector(N DOWNTO 1); cin : IN std_logic; s : OUT std_logic_vector(N DOWNTO 1); cout : OUT std_logic);
END mod_gen ARCHITECTURE structurel OF mod_gen IS COMPONENT ADDER PORT(a,b,cin : IN std_logic;s,cout : OUT std_logic); END COMPONENT SIGNAL carry : std_logic_vector(N-1 DOWNTO 1); BEGIN
gene : FOR I IN 1 TO N GENERATE ls_bit : IF i=1 GENERATE
ls_cell : adder PORT MAP(a(1),b(1),cin,s(1), carry(1));
END GENERATE ls_bit; middle_bit : IF i>1 and i<N GENERATE
middle_cell : adder PORT MAP(a(i),b(i),carry(i-1),s(i), carry(i));
END GENERATE middle_bit; ms_bit : IF i=N GENERATE
ms_cell : adder PORT MAP(a(N),b(N),carry(N-1),s(N), cout);
END GENERATE ms_bit;
END GENERATE gene;
END structurel;
0
www.istic.univ-rennes1.fr
7.1 Instructions de type parallèle
49
. Instruction PROCESS
- Toutes les instructions comprises dans le PROCESS sont exécutées séquentiellement
- Instruction concurrente : possibilité d'en utiliser plusieurs
- Tous les PROCESS sont exécutés en parallèle
- Activation d'un PROCESS : 2 possibilités
[label] : PROCESS(liste_signaux)
[label] : PROCESS
-- Partie déclarative du process
-- Partie déclarative du process
BEGIN
-- Corps du process
END PROCESS [label]
BEGIN
WAIT UNTIL (liste_signaux) -- Corps du process
END PROCESS [label]
0
www.istic.univ-rennes1.fr
7.1 Instructions de type parallèle
50
. Instruction PROCESS : Attribut event
. But : Savoir si le signal auquel il est associé a été modifié . Très utile dans un PROCESS déclenchable par plusieurs signaux distincts . Exemples :
IF CLK'event THEN exécution; END IF;
- Exécution si CLK passe à 0 ou à 1
IF CLK'event AND CLK='1' THEN exécution; END IF;
- Déclenchement sur front montant
. Standard IEEE 1164 : Définition de deux fonctions rising_edge(CLK) et falling_edge(CLK)
0
www.istic.univ-rennes1.fr
7.2. Instructions de type séquentiel
51
. Ces instructions sont uniquement utilisées dans un Process
. Assignation inconditionnelle de variables et de signaux Même traitement que pour le mode parallèle
SIGNAL sig : integer; PROCESS(clk)
VARIABLE var : integer := 0;
BEGIN
sig <= sig + 1; var := var + 1;
END PROCESS;
. Instruction IF
IF expresssion_booleenne THEN
instructions_sequentielles
END IF;
IF up_down = '1' THEN s <= s + 1;
ELSE
END IF;
s <= s - 1;
0
www.istic.univ-rennes1.fr
7.2. Instructions de type séquentiel
52
. Instruction CASE
CASE expresssion is
{WHEN valeur_expression => instructions_sequentielles}; {WHEN OTHERS => instructions_sequentielles};
END CASE;
CASE selection IS
WHEN '0' => s <= a; WHEN '1' => s <= b; WHEN OTHERS => NULL;
END CASE;
. Instruction LOOP
instruction_pour_iteration LOOP
instructions_sequentielles
END LOOP;
VARIABLE indice,resultat : INTEGER := 0; Boucle1 : WHILE indice < 10 LOOP
indice := indice + 1; resultat := resultat + adresse(indice);
END LOOP boucle1;
VARIABLE indice,resultat : INTEGER; Boucle2 : FOR indice IN 0 TO 9 LOOP
resultat := resultat + adresse(indice);
0
END LOOP boucle2;
www.istic.univ-rennes1.fr
7.2. Instructions de type séquentiel
53
. Instruction NEXT
NEXT label_boucle WHEN condition
VARIABLE indice,resultat : integer := 0; Boucle1 : WHILE indice < 10 LOOP
indice := indice + 1; NEXT boucle1 WHEN indice = 5; resultat := resultat + adresse(indice);
END LOOP boucle1;
VARIABLE indice,resultat : integer; Boucle2 : FOR indice IN 0 TO 9 LOOP NEXT boucle2 WHEN indice = 5; resultat := resultat + adresse(indice);
END LOOP boucle2;
. Instruction EXIT
EXIT label_boucle WHEN condition
VARIABLE indice,resultat : integer := 0; Boucle1 : WHILE indice < 10 loop
indice := indice1 + 1; EXIT boucle1 WHEN indice = 5; resultat := resultat + adresse(indice);
END LOOP boucle1;
VARIABLE indice,resultat : integer; Boucle2 : FOR indice IN 0 to 9 LOOP EXIT boucle2 WHEN indice = 5; resultat := resultat + adresse(indice);
END LOOP boucle2;
0
www.istic.univ-rennes1.fr
7.2. Instructions de type séquentiel
54
. Instruction NULL
Instruction sans aucun effet
CASE commande_moteur IS
WHEN avant => marche_avant; WHEN arriere => marche_arriere; WHEN statuquo => NULL;
END CASE;
. Instruction ASSERT
Vérification d'une condition spécifique Information d'une éventuelle violation de cette condition ASSERT condition REPORT message SEVERITY {note/warning/error/Failure}
PROCESS(clk) BEGIN IF clk='1' THEN
ASSERT d'STABLE(15 ns); REPORT "setup non respecté" SEVERITY warning; … END IF; END PROCESS;
www.istic.univ-rennes1.fr
0
7.3. Instructions : Exemple
55
. Multiplexeur 8 bits : 4 vers 1
1ère phase : définition des entrée/sorties (ENTITY)
Entrées
Multiplexeur 8 bits 4 vers 1
Sorties
Entree1
Entree2
Entree3
Entree4
8
8
8
8
Multiplexeur 8 bits 4 vers 1
8
Sortie
Sel
0
www.istic.univ-rennes1.fr
7.3. Instructions : Exemple
56
. Multiplexeur 8 bits : 4 vers 1
2ème phase : définition du fonctionnement ou de la structure
(ARCHITECTURE)
- Solution 1 : Instruction IF
- Solution 2 : Instruction CASE
0
www.istic.univ-rennes1.fr
7.3. Instructions : Exemple
57
. Multiplexeur 8 bits : 4 vers 1 - Solution 1 : Instruction IF
Publicité
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mux41 IS
PORT(entree1,entree2,entree3,entree4: IN std_logic_vector(0 TO 7);
sel: IN std_logic_vector(0 to 1); sortie : OUT std_logic_vector(7 DOWNTO 0));
END mux41; ARCHITECTURE comportementale OF mux41 IS BEGIN
PROCESS(sel) BEGIN
IF (sel="00") THEN sortie<=entree1; ELSIF (sel="01") THEN sortie<=entree2; ELSIF (sel="10") THEN sortie<=entree3; ELSE sortie<=entree4;END IF;
END PROCESS; END comportementale;
www.istic.univ-rennes1.fr
0
7.3. Instructions : Exemple
58
. Multiplexeur 8 bits : 4 vers 1
- Solution 2 : Instruction CASE
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mux41 IS
PORT(entree1,entree2,entree3,entree4: IN std_logic_vector(0 TO 7);
sel: IN std_logic_vector(0 to 1); sortie : OUT std_logic_vector(7 DOWNTO 0));
END mux41; ARCHITECTURE comportementale OF mux41 IS BEGIN
PROCESS(sel) BEGIN CASE sel IS
WHEN "00" => sortie<=entree1; WHEN "01" => sortie<=entree2; WHEN "10" => sortie<=entree3; WHEN OTHERS => sortie<=entree4;
END CASE; END PROCESS; END comportementale;
0
www.istic.univ-rennes1.fr
8. Opérateurs standards
59
. Remarque : Le VHDL est un langage développé initialement pour la modélisation et la simulation, par conséquent certains opérateurs sont à déconseiller en synthèse
. Opérateurs logiques
Nom
Type opérandes
Signification
And
Nand
Or
Nor
Xor
Xnor
Not
Boolean Bit ou Bit_vector
Et
Non et
Ou
Non ou
Ou exculsif
Egal
Non
0
www.istic.univ-rennes1.fr
8. Opérateurs standards
60
. Opérateurs logiques
. Exemple 1
SIGNAL a,b,c : bit_vector(0 TO 1);
c <= a AND b;
Synthèse
. Exemple 2
SIGNAL d, e, f, g : bit;
g <= (d AND e) AND f;
Synthèse
a(0)
b(0)
a(1)
b(1)
d e f
c(0)
c(1)
g
0
www.istic.univ-rennes1.fr
8. Opérateurs standards
61
. Opérateurs relationnels
Nom
Type opérandes
Signification
=
/=
< <=
>
>=
. Exemple
Entrées : Tout scalaire Sortie : Boolean
Egal
Non égal
Inférieur
Inférieur ou égal
Supérieur
Supérieur ou égal
SIGNAL a,b : bit_vector(1 DOWNTO 0); SIGNAL s : bit;
process(a,b) BEGIN IF a > b THEN s <= ‘1’; ELSE s <= ‘0’; END IF;
END process;
Synthèse
a0 a1 !b0
a0 !b1 !b0
a1
!b1 www.istic.univ-rennes1.fr
s
0
8. Opérateurs standards
62
. Opérateurs de décalages
Nom
Type opérandes
Signification
Bit_vector
A gauche
A droite
Circulaire gauche
Circulaire droit
Sll
Srl
Rol Ror . Exemple ENTITY sll_example IS PORT(sel: IN bit;
a : IN bit_vector(3 DOWNTO 0); b : OUT bit_vector(3 DOWNTO 0));
Synthèse
END sll_example; ARCHITECTURE comportementale OF sll_example IS BEGIN
PROCESS(sel) BEGIN if sel='1' then b <= a sll 1;end if; END PROCESS; END comportementale;
www.istic.univ-rennes1.fr
a0
a1
a2
a3
'0'
0
sel
b0
b1
b2
b3
8. Opérateurs standards
63
. Opérateurs arithmétiques
Nom
Type opérandes
Signification
+
-
* /
abs
**
mod
rem
Integer, Real
Integer
Incrémentation de 1 ou addition
Décrémentaion de 1 ou soustraction
Multiplication
Division
Valeur absolue
Puissance
Modulo
Reste
. Autres opérateurs
Nom
Type opérandes
&
Bit, Bit_vector
Signification
Concaténation
0
www.istic.univ-rennes1.fr
. Exemple : addition
S = (A + B) + (C - 1) T = ((A + B) + C - 1)
Synthèse
. Exemple : multiplication
8. Opérateurs standards
64
A
B C
A
B C
- 1
CC : 3
S
- 1
T
. Opération de multiplication "*" permet d'utiliser le type INTEGER . Différents résultats de synthèse
- Contraintes - Nature des entrées (puissance de 2) - Bibliothèques de composants disponibles (Package standard de synthèse)
0
www.istic.univ-rennes1.fr
8. Opérateurs standards
65
. Opérateur de concaténation
Nom
Type opérandes
&
Bit, Bit_vector
Signification
Concaténation
ENTITY concatenation_example IS
PORT(a : IN bit_vector(3 DOWNTO 0);
b : IN bit; c : OUT bit_vector(5 DOWNTO 0));
END concatenation_example; ARCHITECTURE comportementale OF
concatenation_example IS
BEGIN
C <= not B & "101" & not A(2 DOWNTO 1);
END comportementale;
Synthèse
A(1)
A(2)
VDD GND VDD
B
0
C(0)
C(1)
C(2) C(3) C(4)
C(5)
www.istic.univ-rennes1.fr
9. Description hiérarchique
66
. Descriptions plus simples
. Rapidité de simulation et donc rapidité de mise au point
. Fiabilité accrue
. Réutilisation de sous-ensembles
. Concepts :
COMPONENT, GENERIC, PACKAGE,
PROCEDURE ET FONCTION LIBRARY, CONFIGURATION
. Amélioration de la modularité
. Utilisation d'un élément décrit à l'extérieur de la description utilisatrice
. Compilation distincte et stockage dans la bibliothèque WORK :
. le composant
. l'entité/architecture utilisatrice de ce composant
0
www.istic.univ-rennes1.fr
9.1 Description hiérarchique : Component
67
. Description structurelle . Utilisation de composants
2 phases : - Déclaration
- Instanciation
Adder1.vhd
ENTITY half_adder IS PORT( a,b,cin : IN bit;
cout,s : OUT bit);
END half_adder;
ARCHITECTURE arch_half OF half_adder IS BEGIN
s <= a xor b XOR cin; cout <= (a AND b) OR (a AND cin) OR (b AND cin);
END arch_half;
Adder2.vhd
ENTITY full_adder IS PORT(
a,b : IN bit_vector(1 DOWNTO 0); cin : IN bit; cout : OUT bit; s : out bit_vector(1 DOWNTO 0));
END full_adder;
ARCHITECTURE arch_full OF full_adder IS SIGNAL inter : bit; COMPONENT half_adder PORT (a,b,cin : IN bit; cout,s : OUT bit);
END COMPONENT; BEGIN u1:half_adder PORT MAP (a(0),b(0),cin,inter,s(0)); u2:half_adder PORT MAP (a(1),b(1),inter,cout,s(1)); END arch_full;
0
www.istic.univ-rennes1.fr
9.2 Description hiérarchique : Generic
68
. Possibilité d'utiliser un même objet plusieurs fois avec des tailles différentes . Paramètres à définir lors de l'instanciation . Possibilité d'instancier des entités/architectures fonctionnellement identiques mais de taille différente
ENTITY adder is
. Déclaration d'un additionneur
GENERIC (largeur : integer :=8); -- valeur par défaut
PORT(
a,b: IN signed_vector(largeur-1 DOWNTO 0);
s : OUT signed_vector(largeur DOWNTO 0);
END adder;
. Instanciation avec une largeur de 16 bits
ARCHITECTURE arch_adder OF adder IS BEGIN
s <= a + b;
END arch_adder;
U0 : adder GENERIC MAP (largeur => 16) 0
PORT MAP (a=>a,b=>b,s=>s);
www.istic.univ-rennes1.fr
9.3 Description hiérarchique : Package
69
.