Objectifs du cours
Savoir utiliser les outils de synthèse
logique afin de concevoir un système
matériel numérique sur FPGA
Maitriser les bases du langage VHDL
1
circuits logiques programmables
Pré-requis :
Cours d’électronique et de logique
logique booléenne, portes logiques
fonctions combinatoires et séquentielles
machine à états, représentation des
nombres en binaire,…
2
circuits logiques programmables
Objectif
3
Vocabulaire
6
2.Structure d'un module VHDL (Unité de conception )
la déclaration d’entité,
le corps d’architecture,
la déclaration de configuration
la déclaration de paquetage
le corps de paquetage.
7
2.Structure d’une description VHDL simple
8
2.Structure d’une description VHDL simple
Syntaxe:
entity NOM_DE_L_ENTITE is
port ( Description des signaux d’entrées /sorties
…);
end NOM_DE_L_ENTITE;
Exemple :
entity SEQUENCEMENT is
port (
CLOCK : in std_logic;
RESET : in std_logic;
Q : out std_logic_vector(1 downto 0) );
end SEQUENCEMENT; 9
2.Structure d’une description VHDL simple
L’instruction port .
Syntaxe: NOM_DU_SIGNAL : sens type;
Exemple: CLOCK: in std_logic;
BUS : out std_logic_vector (7 downto 0);
On doit définir pour chaque signal : le NOM_DU_SIGNAL,
le sens et le type.
10
2.Structure d’une description VHDL simple
Le SENS du signal
in : pour un signal en entrée.
out : pour un signal en sortie.
inout : pour un signal en entrée sortie
buffer : pour un signal en sortie mais utilisé comme
entrée dans la description.
12
2.Structure d’une description VHDL simple
15
2.Structure d’une description VHDL simple
Exemples :
-- Opérateurs logiques de base
entity PORTES is
port (A,B :in std_logic;
Y1,Y2,Y3:out std_logic);
end PORTES;
architecture DESCRIPTION of PORTES is
begin
Y1 <= A and B;
Y2 <= A or B;
Y3 <= A xor B;
end DESCRIPTION; 16
4.Les instructions de base (mode « concurrent »)
logique combinatoire
18
4.1 Présentation des instructions concurrentes
d’assignation de signal
19
4.1.1 Instruction concurrente d’assignation
inconditionnelle de signal <=
Les valeurs numériques que l’on peut affecter à un signal sont les
suivantes :
‘1’ ou ‘H’ pour un niveau haut avec un signal de 1 bit.
‘0’ ou ‘L’ pour un niveau bas avec un signal de 1 bit.
‘Z’ pour un état haute impédance avec un signal de 1 bit.
‘-’ pour un état quelconque, c’est à dire ‘0’ ou ‘1’. Cette valeur est très
utilisée avec les instructions : when … else et with …. Select ….
20
Instruction concurrente d’assignation inconditionnelle
de signal <=
21
Instruction concurrente d’assignation inconditionnelle
de signal <=
23
Instruction concurrente d’assignation conditionnelle de
signal … <= … when … else …
24
Instruction concurrente d’assignation conditionnelle de
signal … <= … when … else …
Exemple d’application: encodeur
---- Solution 1: with WHEN/ELSE -------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY encoder IS
PORT ( x: IN STD_LOGIC_VECTOR (3 DOWNTO 0);
y: OUT STD_LOGIC_VECTOR (1 DOWNTO 0));
END encoder;
ARCHITECTURE encoder1 OF encoder IS
BEGIN
y <= "00" WHEN x="0001" ELSE
"01" WHEN x="0010" ELSE
"10" WHEN x="0100" ELSE
"11" WHEN x="1000" ELSE
"ZZ";
END encoder1;
25
4.1.3 Instruction concurrente d’assignation sélective de
signal with …select … <= … when …
26
Instruction concurrente d’assignation sélective de signal
with …select … <= … when …
27
Instruction concurrente d’assignation sélective de signal
with …select … <= … when …
Autre possibilté:
std_logic_vector(1 downto 0)
28
4.2 Instanciation (placement) de composants déjà crées
Déclaration
Les déclarations des composants non génériques ne comportent que des
données dont les dimensions sont fixées à l’avance
Syntaxe
component nom_composant
port (Description des signaux d’entrées /sorties );
end component;
Remarque:
La déclaration est faite dans la zone de déclaration d'une architecture
Le mot clé component sert à déclarer le prototype d'interconnexion. La
syntaxe est presque identique à celle de l'entité
30
Déclaration et instanciation de composants non
génériques
Exemple
component AND_2
port ( a : in STD_LOGIC;
b : in STD_LOGIC;
s : out STD_LOGIC);
end component;
31
Déclaration et instanciation de composants non
génériques
32
Déclaration et instanciation de composants non
génériques
entity AND_3 is
port(
e1 : in STD_LOGIC; e2 : in STD_LOGIC; e3 : in STD_LOGIC;
s : out STD_LOGIC );
end AND_3 ;
architecture arc of AND_3 is
signal z : STD_LOGIC;
component and2
port ( a : in STD_LOGIC; b : in STD_LOGIC; s : out STD_LOGIC);
end component;
begin
inst1 : and2 port map (a=>e1, b=>e2 , s=>z);
inst2 : and2 port map (z, e3, s);
end arc
34
Déclaration et instanciation de composants non
génériques
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY fa IS
PORT (
Ci, X, Y: IN STD_LOGIC;
S, Cout: OUT STD_LOGIC);
END fa;
ARCHITECTURE Dataflow OF fa IS
BEGIN
Full Adder
Cout <= (X AND Y) OR (Ci AND (X XOR
Y));
S <= X XOR Y XOR Ci;
END Dataflow;
35
Déclaration et instanciation de composants non
génériques
37
4.Les instructions de base (mode « concurrent »)
d’appel de processus (logique séquentielle)
38
4.Les instructions de base (mode « concurrent »)
d’appel de processus (logique séquentielle)
39
4.Les instructions de base (mode « concurrent »)
d’appel de processus (logique séquentielle)
Exemple 1
40
4.Les instructions de base (mode « concurrent »)
d’appel de processus (logique séquentielle)
EXEMPLE 2
41
4.Les instructions de base (mode « concurrent »)
d’appel de processus (logique séquentielle)
42
- L’instruction if (CLK'event and CLK='1') then permet de détecter un front montant
du signal CLK. La détection de front est réalisée par l’attribut event appliqué à
l’horloge CLK. Si on veut un déclenchement sur un front descendant, il faut écrire
l’instruction suivante : if(CLK'event and CLK='0').
- Les bibliothèques IEEE possèdent deux instructions permettant de détecter les fronts
montants ) rising_edge(CLK)ou descendants falling_edge(CLK).
43
44
45
46
47
48
49
50
51
52
CMP<= "0000";
une autre façon d’écrire cette instruction est :
CMP<= (others => ’0’) ;
53
54
55
56
57