Académique Documents
Professionnel Documents
Culture Documents
Chapitre 3
Synthèse VHDL
1. Introduction
Présentation générale du VHDL
VHDL ≡ VHSIC Hardware Description Language
VHSIC : Very High Speed Integrated Circuit ( programme de la défense des
USA datant des années 80 visant à développer des circuits intégrés)
1
06/11/2023
1. Introduction
Flot de conception
Banc de test
Description VHDL (testbench)
Spécification Entity sys is
(fonction du port (A,B: in std_logic;
fichier.vhd
Générer un code
circuit) S: out std_logic ); Compilation VHDL destiné à la Simulation Chronogrammes
End system; vérification par
(vérification des testbench.vhd
Architecture Arch of sys is simulation le bon
Begin erreurs de syntaxe) fonctionnement
S<= A and B; du système (lui-
……. même en vhdl)
End arch;
Synthèse et implémentation
Synthèse Placement et routage Génération du bitsream
0100001010100101
netlist 1010101010001000
0111010100101101
0111000011111001 Fichier binaire
0110101001011011
1110101000100100
1110011110000000
1111010000111100
3
Table de vérité : A S
A B S R B R
0 0 0 0
0 1 1 0 A
S
1 0 1 0 B
1 1 0 1 R
2
06/11/2023
use ieee.std_logic_arith.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;
3
06/11/2023
- integer (entier)
integer range <low> to <hight> (entier défini dans un intervalle)
4
06/11/2023
5
06/11/2023
Déclaration:
TYPE <nom type> IS (caractere_1,…, caractere_n);
Instanciation:
SIGNAL <nom signal> : <nom type>;
Exemple :
TYPE couleur IS (bleu, jaune, rouge);--déclaration du premier
--type
TYPE Etat IS (init, debut, fin); --déclaration du second type
SIGNAL C1 : couleur; --instanciation type 1
SIGNAL E : Etat; --instanciation type 2
M. FEKI – Architecture des SoCs 11
3. Les opérateurs
L’affectation simple <=
R <= A and B;
R <= A and B after 10ns; -- affectation retardée de
10ns
6
06/11/2023
3. Les opérateurs
La concaténation &
Valeur de A Valeur de B
3. Les opérateurs
Les opérateurs logiques
Opérateur VHDL
ET and
Non ET nand
OU or
Non OU nor
OU exclusif xor
non not
Décalage à gauche sll
Décalage à droite srl
Peu utilisés
Rotation à gauche rol
Rotation à droite ror
7
06/11/2023
3. Les opérateurs
Les opérateurs logiques
Décalage à droite
3. Les opérateurs
Les opérateurs logiques
Rotation à gauche
A<=“01011111” ;
S<= A(6 downto 0) & A(7); --rotation d’une position à
--gauche S=“10111110”
Rotation à droite
8
06/11/2023
3. Les opérateurs
Les opérateurs arithmétiques
Opérateur VHDL
Addition +
Soustraction -
Multiplication *
Division /
use ieee.std_logic_unsigned.all;
3. Les opérateurs
Les opérateurs relationnels
Opérateur VHDL
Egal =
Non Egal /=
Inférieur <
Inférieur ou Egal <=
Supérieur >
Supérieur ou Egal >=
9
06/11/2023
Exemple : Mux 4 1
10
06/11/2023
Exemple : Mux 4 1
WITH SEL SELECT
S <= E1 WHEN "00",
E2 WHEN "01",
E3 WHEN "10",
E4 WHEN "11",
"ZZZZ" WHEN OTHERS;
Structure répétitive
<nom structure>:FOR <var> IN <val_debut> TO <val_fin> GENERATE
<instructions concurrentes>;
END GENERATE <nom structure>;
Structure conditionnelle
<nom structure>:IF <condition> GENERATE
<instructions concurrentes>;
END GENERATE <nom structure>;
Remarques:
- <nom structure>: est obligatoire,
- La variable <var> ne se déclare pas.
M. FEKI – Architecture des SoCs 22
11
06/11/2023
Un process est une partie de la description d’un circuit dans laquelle les
instructions sont exécutées séquentiellement c-à-d les une à la suite des autres.
PROCESS(D)
BEGIN Décodeur P
D
IF D(0)=‘1’ THEN P<=‘1’; 8 de parité
ELSE P<=‘0’;
END IF;
END PROCESS; M. FEKI – Architecture des SoCs 24
12
06/11/2023
Remarques:
- [nom boucle:] est facultatif,
- Il ne faut pas déclarer la variable utilisée.
13
06/11/2023
PROCESS(liste de sensibilité)
BEGIN
[nom boucle:] WHILE <condition> LOOP
<instructions séquentielles>;
END LOOP [nom boucle];
END PROCESS;
PROCESS(a,b)
VARIABLE i : integer; --il faut déclarer la variable i
BEGIN
i:=3;
WHILE i>=0 LOOP
S(i)<=a(i) or b(i);
i:=i-1; --il faut décrémenter i
END LOOP;
END PROCESS;
14
06/11/2023
6. Types d’architectures
Vue d’ensemble
Architecture comportementale
Architecture structurelle
6. Types d’architectures
Architecture flot de données
C’est une architecture dans laquelle on utilise les équations logiques c-à-d qui
utilise toute sorte d’opérateurs (affectation simple, concaténation, opérateurs
logiques, opérateurs arithmétiques et opérateurs relationnels) ainsi que des
instructions concurrentes (WHEN…ELSE ; WITH…SELECT et GENRATE). Ainsi dans
ce type d’architecture, les instructions sont exécutées simultanément (l’ordre
de déclaration n’a pas d’influence). Cette architecture est utilisée pour les petits
circuits.
15
06/11/2023
6. Types d’architectures
Architecture flot de données
6. Types d’architectures
Architecture flot de données
= (AB+AB)Rin+Rin(AB+AB)
= S1 Rin + Rin S1
= S1 xor Rin
16
06/11/2023
6. Types d’architectures
Architecture flot de données
= S2 + S3
6. Types d’architectures
Architecture flot de données
Library ieee; Solution qui utilise les
use ieee.std_logic_1164.all; calculs logiques
ENTITY Add_complet IS
PORT(
A,B,Rin: in std_logic;
S,Rout: out std_logic);
END Add_complet;
ARCHITECTURE flot_donnees OF Add_complet IS
SIGNAL S1,S2,S3:std_logic; --S1,S2 et S3 des signaux internes
BEGIN
S <= S1 xor Rin; -- l’ordre n’a pas d’influence
Rout <= S2 or S3;
S1 <= A xor B;
S2 <= S1 and Rin;
S3 <= A and B;
END flot_donnees;
17
06/11/2023
6. Types d’architectures
Architecture flot de données
6. Types d’architectures
Architecture flot de données
18
06/11/2023
6. Types d’architectures
Architecture comportementale
C’est une architecture dans laquelle on fait appel à un process qui permet
l’exécution séquentielle des instructions (l’une après l’autre) et par conséquent on
peut faire appel aux instructions IF…THEN, CASE…IS….WHEN, FOR…LOOP et
WHILE…LOOP. Cette architecture est utilisée pour les circuits de toutes les tailles.
6. Types d’architectures
Architecture comportementale
Library ieee;
use ieee.std_logic_1164.all;
ENTITY bascule IS
PORT(
D,CLK: in std_logic;
S: out std_logic);
END bascule;
ARCHITECTURE Arch OF bascule IS
BEGIN
PROCESS(CLK) --la liste de sensibilité = clk uniquement
BEGIN
IF CLK’event and CLK=‘1’ THEN --ou rising_edge(clk)
S<=D;
END IF;
END PROCESS;
END Arch;
M. FEKI – Architecture des SoCs 38
19
06/11/2023
6. Types d’architectures
Architecture structurelle
C’est une architecture qui permet de décrire le circuit sous forme de composants
interconnectés. Cette architecture est adaptée à des circuits de taille moyenne à
grande.
--Déclaration de l’entité
ENTITY <nom de l’entité> IS
PORT(
⁞
);
END <nom de l’entité> ;
--Déclaration de l’architecture
ARCHITECTURE <nom de l’architecture> OF <nom de l’entité> IS
<déclarations des signaux internes et des constantes>;
6. Types d’architectures
Architecture structurelle
20
06/11/2023
6. Types d’architectures
Architecture structurelle
BEGIN
--Instantation des composants
<label comp_1> : <nom comp_1> PORT MAP(instanciation des E/S);
⁞
<label comp_n> : <nom comp_n> PORT MAP(instanciation des E/S);
--L’instanciation des E/S se fait dans l’ordre où elles
--étaient déclarées dans le composant
END <nom de l’architecture>;
6. Types d’architectures
Architecture structurelle
21
06/11/2023
6. Types d’architectures
Architecture structurelle
Exemple : Système de gestion de parking
CaptE CE
Comparateur
CaptS CS Compteur/ NP S_NP
NPO B CB
Décompteur
H Clk
6. Types d’architectures
Architecture structurelle
22
06/11/2023
6. Types d’architectures
Architecture structurelle
1.
Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
ENTITY ComptDecompt IS
PORT(
CE,CS, Clk : in std_logic;
NP : out integer);
END ComptDecompt;
ARCHITECTURE Arch OF ComptDecompt IS
SIGNAL S: integer :=0;
BEGIN
PROCESS(CLK)
BEGIN
IF (CLK’event and CLK=‘1’) THEN
IF CE=‘1’ THEN
S<=S+1;
M. FEKI – Architecture des SoCs 45
6. Types d’architectures
Architecture structurelle
23
06/11/2023
6. Types d’architectures
Architecture structurelle
2.
Library ieee;
use ieee.std_logic_1164.all;
ENTITY Comparateur IS
GENERIC( N: integer := 100);
PORT(
NPO: in integer;
B : out std_logic);
END Comparateur;
ARCHITECTURE Arch OF Comparateur IS
BEGIN
B<=‘1’ when NPO<N else ‘0’;
END Arch;
6. Types d’architectures
Architecture structurelle
3.
Library ieee;
use ieee.std_logic_1164.all;
ENTITY SystemeGP IS
GENERIC( N: integer := 100);
PORT(
CaptE, CaptS, H: in std_logic;
CB: out std_logic);
END SystemeGP ;
ARCHITECTURE Arch OF SystemeGP IS
Signal S_NP : integer;
COMPONENT ComptDecompt
PORT(
CE,CS, Clk : in std_logic;
NP : out integer);
END Component;
24
06/11/2023
6. Types d’architectures
Architecture structurelle
COMPONENT Comparateur
GENERIC( N: integer := 100);
PORT(
NOP: in integer;
B : out std_logic);
END COMPONENT;
BEGIN
SS1: ComptDecompt PORT MAP(CE => CaptE,
CS => CaptS,
Clk => H,
NP => S_NP);
SS2: Comparateur GENERIC MAP(100) PORT MAP(NOP => S_NP,
B => CB);
END Arch;
25
06/11/2023
26
06/11/2023
27
06/11/2023
Partie
opérative
28
06/11/2023
Etat présent
Mealy
Horloge
Etat
Entrées Sorties
Fonction futur Fonction
p combinatoire Registre n
combinatoire q
n
d’état
Calcul de présent Calcul de
l’état futur sortie
Etat présent
Mealy
29
06/11/2023
Etat 1
30
06/11/2023
E=1
Etat 1 Etat 2
Etat 1 Etat 2
S=0 S=1
31
06/11/2023
Pour les machines de Moore, la valeur des signaux de sortie est placée
à l’intérieur des cercles.
Pour les machines de Mealy, la valeur des signaux de sortie est placée
à côté des flèches de transition - on les sépare des conditions de
transition par une barre oblique /.
Valeur de la sortie
E=1 / S=0
Etat 1 Etat 2
32
06/11/2023
Clk
E 1 4 1 2 3
Etat
E0 E1 E0 E1 E2 E3 E0
présent
Sortie synchrone
P
E=3 / P=1
Clk
E 1 4 1 2 3
Etat
E0 E1 E0 E1 E2 E0
présent
Sortie
P
asynchrone
M. FEKI – Architecture des SoCs 66
33
06/11/2023
Un process combinatoire
Clk
Etat
Fonction futur Fonction
E combinatoire Registre combinatoire S
p n d’état n q
Calcul de actuel Calcul de
l’état futur sortie
Etat présent
Mealy
Un process séquentiel
Library ieee;
Use ieee.std_logic_1164.all;
Entity digicode is
Port(clk : in std_logic;
E : in integer range 0 to 9; Codage des états:
P : out std_logic ); 1. Déclaration d’un nouveau type
End digicode; contenant les noms des états.
2. Déclaration de deux signaux du
nouveau type : etat_present et
Architecture Arch of digicode is
etat_futur.
Begin
M. FEKI – Architecture des SoCs 68
34
06/11/2023
End Arch;
35
06/11/2023
Library ieee;
Use ieee.std_logic_1164.all;
Entity digicode is
Port(clk : in std_logic;
E : in integer range 0 to 9;
P : out std_logic );
End digicode;
Begin
M. FEKI – Architecture des SoCs 71
Process combinatoire
sensible à l’état présent
Combinatoire : Process(etat_present, E) et à l’entrée. Il gère les
Begin transitions et la valeur de
Case etat_present is sortie.
When E0 => if E=1 then etat_futur<=E1; P<=‘0’;
else etat_futur<=E0; P<=‘0’; end if;
When E1 => if E=2 then etat_futur<=E2; P<=‘0’;
else etat_futur<=E0; P<=‘0’; end if;
When E2 => if E=3 then etat_futur<=E0; P<=‘1’;
else etat_futur<=E0; P<=‘0’; end if;
End case;
End process combinatoire;
36
06/11/2023
Sequentiel: Process(clk)
Begin
If clk’event and clk=‘1’ then
etat_present <=etat_futur;
End if;
End process Sequentiel;
End Arch;
37