Académique Documents
Professionnel Documents
Culture Documents
VHDL et fpga
2. VHDL:
4
VHDL
Architecture d’une description VHDL
Entité (entity)
Architecture
Configuration
Déclaration package
L’entité et l’architecture sont les blocs les plus utilisés dans les
descriptions.
5
VHDL
Architecture d’une description VHDL
6
VHDL
Architecture d’une description VHDL
7
Exemple 2: Décodeur 1 parmi 4
8
VHDL
Architecture d’une description VHDL
Les noms attribués par l'utilisateur doivent être constitués uniquement à partir des
10
VHDL
Architecture d’une description VHDL
3. Les modes :
4 types de modes:
• Mode IN
• Mode OUT
• Mode INOUT
• Mode BUFFER 11
VHDL
Architecture d’une description VHDL
3. Les modes :
IN
12
VHDL
Architecture d’une description VHDL
3. Les modes :
OUT
13
VHDL
Architecture d’une description VHDL
3. Les modes :
INOUT
14
VHDL
Architecture d’une description VHDL
Les types utilisés sont nombreux (entiers, réels, tableaux, enregistrement, etc..),
mais l'électronicien se servira surtout des types :
15
VHDL
Architecture d’une description VHDL
Pour la synthèse des circuits logiques, on utilise des types dérivés et plus
complets qui sont définis dans la bibliothèque IEEE : (Le paquetage
STD_LOGIC_1164)
• std_logic pour un signal.
• std_logic_vector pour un bus composé de plusieurs signaux.
• port représente les canaux de communication par lesquels des signaux
transitent entre le composant et le monde extérieur.
16
VHDL
Architecture d’une description VHDL
BIT
17
VHDL
Architecture d’une description VHDL
4. Les types des données:
STD_LOGIC
OPERATEUR VHDL
EGAL =
NON EGAL /=
INFERIEUR <
INFERIEUR OU EGAL <=
SUPERIEUR >
SUPERIEUR OU EGAL >=
20
VHDL
Architecture d’une description VHDL
7. Les signaux :
• Pour relier les entités de conception (Design) entre elles et communiquer les
changements de valeurs au sein d'une conception.
23
VHDL
La logique combinatoire
Description structurelle:
24
VHDL
La logique combinatoire
26
VHDL
La logique combinatoire
Pour une description VHDL toutes les instructions sont évaluées et affectent les
signaux de sortie en même temps. L’ordre dans lequel elles sont écrites n’a
aucune importance : c’est le mode « concurrent ». C’est la grande différence entre
une description VHDL et un langage informatique classique ou un système à
microprocesseur qui exécute les instructions séquentiellement.
27
VHDL
La logique combinatoire
stocké dans X.
Dans VHDL qui est un langage « Hardware », l’instruction devient ‘X<= X+Y;’.
• On utilise la notion des instructions simultanées «Concurrent statements »
C’est l’opérateur le plus utilisé. Il permet de modifier l’état d’un signal en fonction d’autres signaux
et/ou d’autres opérateurs :
S1 <= E2 and E1 ;
Remarque :
Pour les signaux composés de plusieurs bits on utilise les guillemets " … " ;
Les bases numériques utilisées pour les bus peuvent être :
• BINAIRE : BUS <= "1001" ; -- BUS = 9 en décimal
• HEXA : BUS <= X"9" ; -- BUS = 9 en décimal
29
• OCTAL : BUS <= O"11" ; -- BUS = 9 en décimal
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :
Une sortie ne peut pas avoir deux valeurs à la fois (deux drivers). Donc une affectation conditionnelle est
nécessaire dans ce cas.
30
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :
L’instruction when…else modifie l’état d’un signal suivant le résultat d’une condition logique entre
un ou des signaux, valeurs, constantes :
Signal <= expression when condition else
expression when condition else
expression;
Remarque :
L’instruction [else expression] n’est pas obligatoire mais elle fortement conseillée. Elle permet de
définir la valeur du Signal dans le cas où la condition n’est pas remplie.
31
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :
2.1. Affectation conditionnelle :
Exemple 1: Multiplexeur 4 vers 1
library ieee;
use ieee.std_logic_1164.all;
entity mux1 is
PORT (a, b, c, d : in std_logic;
s : in std_logic_vector(1 downto 0);
x : out std_logic);
end mux1;
architecture archmux of mux1 is
begin
x <= a when ( s="00" ) else
b when ( s="01" ) else
c when ( s="10" ) else
d;
end archmux;
32
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :
Exemple 2:
33
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :
34
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :
L’instruction with … select permet d’affecter différentes valeurs à un signal, selon les valeurs prises
par un signal dit de sélection :
with signal_de_selection select
signal <= expression1 when choix1,
expression2 when choix2,
expression3 when others;
L'instruction with...select évalue signal_de_selection et compare cette valeur à chaque valeur de
choix.
Dans l'instruction when, la valeur de choix correspondante voit son expression assignée à la cible.
Chaque valeur de l'intervalle du type signal_de_selection doit être assignée à un seul choix.
Remarque : L’instruction expression when others n’est pas obligatoire mais elle fortement conseillée. Elle
permet de définir la valeur du signal dans le cas où aucune condition n’est remplie. 35
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :
2.2. Affectation sélective :
Exemple 1: Multiplexeur 4 vers 1
library ieee;
use ieee.std_logic_1164.all;
ENTITY mux2 IS
PORT ( a,b,c,d : IN STD_LOGIC;
s : IN STD_LOGIC_VECTOR(1 downto 0);
x : OUT STD_LOGIC);
END mux2;
ARCHITECTURE archmux OF mux2 IS
BEGIN
WITH s SELECT
x <= a WHEN "00" ,
b WHEN "01" ,
c WHEN "10" ,
d WHEN OTHERS;
END archmux;
36
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :
Exemple 2:
37
VHDL
La logique séquentielle
Un process est une partie de la description d’un circuit dans laquelle les instructions sont exécutées
séquentiellement c’est à dire les unes à la suite des autres. Il permet d’effectuer des opérations sur
les signaux en utilisant les instructions standard de la programmation structurée.
L’exécution d’un process est déclenchée par un ou des changements d’états de signaux logiques. Le
nom de ces signaux est défini dans la liste de sensibilité lors de la déclaration du process :
Nom_du_process : process (Liste_de_sensibilité_nom_des_signaux)
begin
-- instructions du process
end process Nom_du_process;
38
VHDL
La logique séquentielle
• Le nom du process est facultatif, mais il peut être très utile pour repérer un process parmi
• L’exécution d’un process a lieu à chaque changement d’état d’un signal de la liste de sensibilité.
• Les changements d’état des signaux par les instructions du process sont pris en compte à la fin du
process.
39
VHDL
La logique séquentielle
Exemple: Bascule D
library ieee; Commentaires :
use ieee.std_logic_1164.all; - Seul le signal CLK fait partie de la liste de
use ieee.numeric_std.all; sensibilité. Donc, seul un changement d’état du signal
use ieee.std_logic_unsigned.all; CLK va déclencher le process et par conséquent
ENTITY basculeD IS évaluer les instructions de celui-ci.
Port (D,CLK : in std_logic ; S : out std_logic); - L’instruction if (CLK'event and CLK='1') then
END basculeD; permet de détecter un front montant du signal CLK.
ARCHITECTURE description OF basculeD IS - La détection de front est réalisée par l’attribut event
BEGIN appliqué à l’horloge CLK. Si on veut un
BD : PROCESS (CLK) déclenchement sur un front descendant, il faut écrire
Begin l’instruction suivante : if (CLK'event and CLK='0').
IF (CLK'event and CLK ='1') THEN - Les bibliothèques IEEE possèdent deux instructions
S <= D; permettant de détecter les fronts montants
END IF; rising_edge(CLK) ou descendants falling_edge(CLK).
END PROCESS BD; - Si la condition est remplie alors le signal de sortie S
END description; sera affecté avec la valeur du signal d’entrée D.
40
VHDL
La logique séquentielle
2. Instructions séquentielles utilisées dans un ‘process’ :
Exemple :
IF (RESET=’1’) THEN SORTIE <= ”0000”;
END IF ;
41
VHDL
La logique séquentielle
2. Instructions séquentielles utilisées dans un ‘process’ :
CASE signal_de_selection IS
WHEN valeur_de_selection => instructions;
WHEN others => instructions;
END CASE;
Exemple :
CASE sel IS
WHEN “000” => S1 <= E1;
WHEN “001” => S1 <= ‘0’;
WHEN “010” | “011” => S1 <=’1’;
WHEN OTHERS => S1 <= ‘0’;
END CASE;
42
VHDL
La logique séquentielle
2. Instructions séquentielles utilisées dans un ‘process’ :