Академический Документы
Профессиональный Документы
Культура Документы
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