100% ont trouvé ce document utile (1 vote)
246 vues57 pages

Introduction au VHDL pour FPGA

Ce document décrit un cours sur la synthèse VHDL. Il présente les concepts de base du langage VHDL tels que les entités, les architectures, les signaux et les processus nécessaires pour décrire une architecture numérique. Le document contient également des exemples de description VHDL de composants simples.

Transféré par

Naim Ch
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
246 vues57 pages

Introduction au VHDL pour FPGA

Ce document décrit un cours sur la synthèse VHDL. Il présente les concepts de base du langage VHDL tels que les entités, les architectures, les signaux et les processus nécessaires pour décrire une architecture numérique. Le document contient également des exemples de description VHDL de composants simples.

Transféré par

Naim Ch
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

EN201: Le VHDL pour la synthèse

Bertrand LE GAL

[[email protected]]

Filière Electronique - 2ème année


ENSEIRB-MATMECA - Bordeaux INP
Talence, France

2017 - 2018
Déroulement de l’enseignement de VHDL

๏ En 1ère année à l’école (Semestre 5)


➡ EN102 - Logique combinatoire et logique séquentielle
➡ EN103 - Projet Numérique

๏ En 2ème année à l’école (Semestre 7)


➡ EN201 - Synthèse VHDL
➡ EN202 - Projet VHDL

2 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Rappels sur le langage VHDL

๏ Le langage VHDL est un langage


informatique permettant de
décrire une architecture
numérique,
๏ On ne programme pas une
architecture en VHDL, on la décrit !
๏ On décrit des modules en VHDL:
➡ pour les simulation,
➡ pour les implanter (ASIC/FPGA).

๏ En fonction de la finalité, toute la


syntaxe du langage n’est pas
accessible.

http://www.xess.com/blog/how-to-learn-vhdl/
3 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Rappels

4 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL

๏ Le langage VHDL est un langage verbeux.


๏ Il a pour objectif de vous forcer a structurer vos descriptions
afin de lever toutes les ambiguïtés

(debugger du hardware n’est pas sympa !!!).
๏ Dans le langage VHDL il y a 5 concepts de base à maitriser
absolument:
- Les entités
- Les architectures
- Les processus
- Les signaux
- Les variables

5 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « entités »

๏ Les entités vous permettent de


définir:
- Le nom du module, 1 · untitled · 2016-09-02 14:32 · legal
- La liste des E/S du module, ENTITY nom_entite IS
- Le type des E/S du module. PORT (
-- LISTE DES ENTREES
๏ Pour chaque E/S du module, il faut entree_1 : IN TYPE_ENTREE;
-- ... ... ... ...
définir: entree_n : IN TYPE_ENTREE;
- Le sens du port (entrée ou sortie), -- LISTE DES SORTIES
- Le type des données échangées, sortie_1 : OUT TYPE_SORTIE;
-- ... ... ... ...
๏ L’ordre de définition des E/S n’a sortie_n : OUT TYPE_SORTIE
);
que peu d’impact pour la suite, END nom_entite;

๏ Définir une entité revient à déclarer


un composant dans votre
« bibliothèque ».

6 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « entités »

L’ordre de définition des ports n’est pas


A (1b) imposé mais peut avoir un impact sur le
O (1b) PORT MAP des E/S.
XOR
B (1b)
Le sens des ports est spécifié à l’aide des
types IN & OUT

1 · untitled · 2016-09-02 11:50 · legal

ENTITY xor_v1 IS Le type STD_LOGIC est utilisé pour les


PORT ( données codées sur un bit.
A : in STD_LOGIC;
B : in STD_LOGIC;
O : out STD_LOGIC
);
END xor_v1; Attention le dernier signal ne nécessite pas
de « ; » après sa déclaration
ENTITY xor_v2 IS
PORT (
A : in STD_LOGIC_VECTOR(7 DOWNTO 0);
7 Bertrand LEBGAL EN201 - Technologie des DOWNTO
: in STD_LOGIC_VECTOR(7 circuits numériques
0); - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « entités »

A (8b)
O (8b)
1 · untitled · 2016-09-02 11:50 · legal
XOR Le type STD_LOGIC_VECTOR
B (8b) ENTITY xor_v1 IS
PORT ( est utilisé pour les données
A : in STD_LOGIC; nécessitant plusieurs bits.
B : in STD_LOGIC;
O : out STD_LOGIC
);
END xor_v1;

ENTITY xor_v2 IS
PORT (
A : in STD_LOGIC_VECTOR(7 DOWNTO 0);
B : in STD_LOGIC_VECTOR(7 DOWNTO 0);
O : out STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END xor_v2;

8 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « entités »
reset
clock

O (1b)
freq_divider_v1
Les signaux d’horloge et de remise
à zéro sont des signaux binaires

1 · untitled · 2016-09-02 14:29 · legal

ENTITY freq_divider_v1 IS
PORT (
clk : in STD_LOGIC;
reset : in STD_LOGIC;
O : out STD_LOGIC Soyez cohérent sur la définition
); du signal de reset: actif soit à l’état
END freq_divider_v1; haut soit à l’état bas.

9 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « entités »
reset
clock

i_data (32b)
o_data (32b)
L’interface de ce composant est
pow2_divider plus complexe mais les concepts
rshift (3b) sont toujours les mêmes

1 · untitled · 2016-09-02 14:26 · legal

ENTITY pow2_divider_v1 IS
PORT (
clk : in STD_LOGIC;
reset : in STD_LOGIC;
i_data : in STD_LOGIC_VECTOR(31 DOWNTO 0);
rShift : in STD_LOGIC_VECTOR( 2 DOWNTO 0);
o_data : out STD_LOGIC_VECTOR(31 DOWNTO 0)
);
END pow2_divider_v1;

10 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « architectures »
1 · untitled · 2016-09-02 14:48 · legal
๏ Les entités définissent le nom ARCHITECTURE nom_arch OF nom_entite IS
des modules ainsi que leurs E/S, --
-- DECLARATION DES SIGNAUX INTERNES
๏ Les architectures définissent le --
SIGNAL signal_1 : TYPE_SIGNAL;
comportement interne des -- ... ... ... ... ... ... ...
-- ... ... ... ... ... ... ...
modules, SIGNAL signal_n : TYPE_SIGNAL;

๏ L’architecture se décompose en --
-- DECLARATION DES "COMPONENTS"
deux parties distinctes: --

- La déclaration des signaux et des sous BEGIN


modules utilisés dans l’architecture,
--
- La description du comportement du -- DU COMPORTEMENT DE L'ARCHITECTURE
module, -- + PROCESSUS IMPLICITES,
-- + PROCESSUS EXPLICITES,
๏ Le comportement du module --
--
+ INSTANCIATION DE SOUS MODULES,

peut être décrit de différentes


END nom_arch;
manières…

11 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « architectures »
1 · untitled · 2016-09-02 11:50 · legal

ENTITY xor_v1 IS
A (1b) PORT (
O (1b) A : in STD_LOGIC;
XOR B : in STD_LOGIC;
O : out STD_LOGIC
B (1b) );
END xor_v1;

ENTITY xor_v2 IS
La sortie
PORT du
( module est calculée à

l’aide d’un
A :processus implicite.
in STD_LOGIC_VECTOR(7 DO
B : in STD_LOGIC_VECTOR(7 DO
1 · untitled · 2016-09-02 15:33 · legal
A chaque modification de A ou B,
O : out STD_LOGIC_VECTOR(7 DO
l’évaluation
); de (A xor B) est re-exécutée.
ARCHITECTURE Behavioral OF xor_v1 IS END xor_v2;
BEGIN

O <= A XOR B;
La description du comportement est
END Behavioral; concise, mais limitée aux cas simples.

12 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « architectures »
1 · untitled · 2016-09-02 15:18 · legal

ARCHITECTURE Behavioral OF xor_v2 IS


BEGIN
A (1b)
PROCESS(A, B)
O (1b)
XOR BEGIN
O <= A XOR B;
B (1b) END PROCESS;

END Behavioral;

1 · untitled · 2016-09-02 15:18 · legal

ARCHITECTURE Behavioral OF xor_v3 IS


BEGIN La sortie du module est calculée à
l’aide d’un processus explicite.
PROCESS(A, B)
BEGIN
O <= ((NOT A) AND B) OR (A AND (NOT B));
END PROCESS;
Attention à la liste de sensibilité !
END Behavioral;

13 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « processus »
1Exemples
· untitled
non· fonctionnels
2016-09-13en
09:32 · legal
simulation
๏ Les processus explicites:
ARCHITECTURE arch OF xor_v3 IS
- Permettent la modélisation de BEGIN
comportements combinatoires
simples ou complexes, PROCESS(A)
BEGIN
- Permettent la modélisation de O <= A XOR B;
END PROCESS;
comportements synchrones.
END Behavioral;
๏ Attention aux subtilités: 1 · untitled · 2016-09-13 09:25 · legal

ARCHITECTURE Behavioral OF foo IS


- Si un signal est manquant dans la SIGNAL T : STD_LOGIC;
liste de sensibilité, le comportement BEGIN
en simulation sera erroné,
PROCESS(A, B)
- Dans un processus, les valeurs des BEGIN
signaux sont réellement mis à jour T <= NOT A;
O <= T AND B;
qu’une fois l’évaluation du processus END PROCESS;
terminée,
END Behavioral;

14 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « entités »
1 · untitled · 2016-09-14 10:37 · legal

ENTITY mux41_v1 IS
PORT ( Multiplexeur 4 entrées vers 1 sortie
E0 : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
E1 : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
E2 : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
E3 : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
SEL : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
O : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
La structure ELSE … WHEN est
END mux41_v1; utilisée pour décrire implicitement
des multiplexeurs…
ARCHITECTURE Behavioral OF mux41_v1 IS
BEGIN

O <= E0 WHEN SEL = "00" ELSE


E2 WHEN SEL = "01" ELSE
E3 WHEN SEL = "10" ELSE
E4;
Les processus implicites peuvent
exprimer des structures
END Behavioral; conditionnelles « simples ».

ARCHITECTURE Behavioral OF mux41_v2 IS


BEGIN
15 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
END mux41_v1;

ARCHITECTURE Behavioral OF mux41_v1 IS


Les bases du langage VHDL - les « entités » BEGIN

O <= E0 WHEN SEL = "00" ELSE


E2 WHEN SEL = "01" ELSE
E3 WHEN SEL = "10" ELSE
E4;
La structure CASE … WHEN utilisée Multiplexeur 4 entrées vers 1 sortie
END Behavioral;
dans les processus explicites fourni le
même comportement.
ARCHITECTURE Behavioral OF mux41_v2 IS
BEGIN

PROCESS(E0, E1, E2, E3, SEL)


L’approche est plus verbeuse mais il
BEGIN
est possible de rajouter des conditions CASE SEL IS
dans les WHEN. WHEN "00" => O <= E0;
WHEN "01" => O <= E1;
WHEN "10" => O <= E2;
WHEN others => O <= E3;
END CASE;
Le WHEN others est obligatoire, on END PROCESS;
l’utilise souvent pour gérer le cas que
l’on ne décrit pas (ici « 11 »). END Behavioral;

16 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - description hiérarchique
1 · untitled · 2016-09-02 15:11 · legal

ARCHITECTURE Behavioral OF xor_v4 IS


SIGNAL T1, T2, T3, T4, T5 : STD_LOGIC; On peut décrire le module XOR comme
étant l’agrégation de modules de
-- DECLARATION DES COMPOSANTS complexités inférieures (AND, OR et NOT).
-- ... ... ... ... ... ... ... ... ...
-- ... ... ... ... ... ... ... ... ...
-- ... ... ... ... ... ... ... ... ...
Les signaux (fils) qui interconnectent
BEGIN
les modules sont déclarés entre
p1 : NON_v1 PORT MAP( A, T1 ); l’ARCHITECTURE et le BEGIN.
p2 : NON_v1 PORT MAP( B, T2 );

p3 : AND_v1 PORT MAP( A, T2, T3 );


p4 : AND_v1 PORT MAP( B, T1, T4 );
Idem pour la déclaration des modules
p5 : OR_v1 que l’on va utiliser.
PORT MAP(
A => T3,
B => T4,
O => O Les différents PORT MAP réalisent la
);
création des composants et le binding
END Behavioral; de leurs entrées et sorties.

17 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « processus » synchrones
1 · untitled · 2016-09-02 15:27 · legal

ARCHITECTURE Behavioral OF register_v1 IS


SIGNAL reg : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN

PROCESS(RESET, CLOCK)
BEGIN
IF RESET = '1' THEN
reg <= (OTHERS => '0');
ELSIF CLK='1' AND CLK'EVENT THEN
reg <= i_data;
END IF;
END PROCESS;

o_data <= reg;

END Behavioral;

Les modules synchrones utilisent


toujours des processus !

18 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « processus » synchrones
1 · untitled · 2016-09-02 15:29 · legal

ARCHITECTURE Behavioral OF register_v1 IS


SIGNAL reg : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN

PROCESS(RESET, CLOCK)
BEGIN
IF RESET = '1' THEN
reg <= (OTHERS => '0');
ELSIF rising_edge(CLK) THEN
reg <= i_data;
END IF;
END PROCESS;

o_data <= reg;

END Behavioral;

Il existe plusieurs méthodes pour Attention on n’est synchrone


déclarer un processus synchrone. QUE sur l’horloge !!!

19 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les types de données

20 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les types de données disponibles en VHDL

๏ En VHDL, il existe de nombreux types de données



(surtout en VHDL’14)…
๏ Types prédéfinis dans le langage
- BIT, BOOLEAN, BIT_VECTOR, INTEGER,

๏ Types définis dans le package IEEE.STD_LOGIC_1164


- STD_LOGIC, STD_LOGIC_VECTOR,

๏ Types définis dans le package IEEE.NUMERIC_STD


- SIGNED, UNSIGNED,

๏ En règle générale vous ne manipulerez que les types


- STD_LOGIC, STD_LOGIC_VECTOR, SIGNED, UNSIGNED, INTEGER.

21 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Le type de donnée STD_LOGIC_VECTOR
๏ Le type STD_LOGIC_VECTOR permet de modéliser des groupes de
données binaires,
➡ SIGNAL A : STD_LOGIC_VECTOR(31 DOWNTO 0) := "0101.......1101";
➡ SIGNAL B : STD_LOGIC_VECTOR(31 DOWNTO 0) := x"89ABCDEF";

๏ Il est possible d’extraire des sous ensembles de bits des variables


définies sous la forme de STD_LOGIC_VECTOR,
➡ SIGNAL C : STD_LOGIC_VECTOR(15 DOWNTO 0) := A(23 DOWNTO 8);
➡ SIGNAL D : STD_LOGIC := A( 16 );

๏ Et d’agréger des informations binaires pour créer des vecteurs,


➡ SIGNAL E : STD_LOGIC_VECTOR(31 DOWNTO 0) := C & C;
➡ SIGNAL F : STD_LOGIC_VECTOR(4 DOWNTO 0) := D & ‘0’ & D & ‘1’;

๏ Les opérations logiques de base permettent de traiter les informations à


condition qu’elles possèdent le même format,
➡ SIGNAL G : STD_LOGIC_VECTOR(15 DOWNTO 0) := A(31 DOWNTO 15) OR (NOT C);
➡ SIGNAL H : STD_LOGIC := A(7 DOWNTO 6) /= (D & D);

22 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Manipulation des STD_LOGIC & STD_LOGIC_VECTOR (1)
/Users/legal/Google Drive/E…/…/…/samples/xor_8b_8b_8b.vhd Page 1/3
Saved: 10/09/2017 22:19:16 Printed for: Bertrand LE GAL

1 LIBRARY IEEE;
2 USE IEEE.STD_LOGIC_1164.ALL;
3
4 ENTITY xor_4b_4b_4b IS
5 PORT (
6 A : IN std_logic_vector(3 downto 0);
7 B : IN std_logic_vector(3 downto 0);
8 C : OUT std_logic_vector(3 downto 0)
9 );
10 END xor_4b_4b_4b;
11
12 ARCHITECTURE arch OF xor_4b_4b_4b IS
13 BEGIN
14
15 C(0) <= A(0) XOR B(0);
16 C(1) <= A(1) XOR B(1); Les vecteurs de bits sont
17 C(2) <= A(2) XOR B(2); décomposés sous forme scalaire
18 C(3) <= A(3) XOR B(3);
pour permettre un traitement
19
20 END arch;
binaire de l’information
21
22 -----------------------------------------------------------------------------------------
23 LIBRARY IEEE;
24 USE IEEE.STD_LOGIC_1164.ALL;
23 25 EN201 - Technologie des circuits numériques - les circuits FPGA
Bertrand LE GAL 2017 - 2018
13 BEGIN
14
15 C(0) <= A(0) XOR B(0);
16 C(1) <= A(1) XOR B(1);
Manipulation des STD_LOGIC & STD_LOGIC_VECTOR (2)
17
18
C(2)
C(3)
<=
<=
A(2)
A(3)
XOR
XOR
B(2);
B(3);
19
20 END arch;
21
22 ------------------------------------------------------------------------------------------
23 LIBRARY IEEE;
24 USE IEEE.STD_LOGIC_1164.ALL;
25
26 ENTITY xor_4b_4b_4b IS
27 PORT (
28 A : IN std_logic_vector(3 downto 0);
29 B : IN std_logic_vector(3 downto 0);
30 C : OUT std_logic_vector(3 downto 0)
31 );
32 END xor_4b_4b_4b;
33
34 ARCHITECTURE arch OF xor_4b_4b_4b IS
35 BEGIN
36
37 C(1 DOWNTO 0) <= A(1 DOWNTO 0) XOR B(1 DOWNTO 0);
38 C(3 DOWNTO 2) <= A(3 DOWNTO 2) XOR B(3 DOWNTO 2); Les vecteurs de bits sont en 2
39 sous ensemble pour permettre
40 END arch; semi-groupé de l’information
41 ------------------------------------------------------------------------------------------

24 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Manipulation des STD_LOGIC & STD_LOGIC_VECTOR (3)

/Users/legal/Google Drive/E…/…/…/samples/xor_8b_8b_8b.vhd Page 2/3


Saved: 10/09/2017 22:23:16 Printed for: Bertrand LE GAL

42 LIBRARY IEEE;
43 USE IEEE.STD_LOGIC_1164.ALL;
44
45 ENTITY xor_4b_4b_4b IS
46 PORT (
47 A : IN std_logic_vector(3 downto 0);
48 B : IN std_logic_vector(3 downto 0);
49 C : OUT std_logic_vector(3 downto 0)
50 );
51 END xor_4b_4b_4b;
52
53 ARCHITECTURE arch OF xor_4b_4b_4b IS
54 BEGIN
55
56 C <= A XOR B; Un traitement groupé des bits du
57 vecteur est aussi possible.
58 END arch;
59 -----------------------------------------------------------------------------------------
60 LIBRARY IEEE;
61 USE IEEE.STD_LOGIC_1164.ALL;
62
63 ENTITY xor_4b_4b_4b IS
64 PORT (
25 65Bertrand LE GAL
EN201 - Technologie desdownto
A : IN std_logic_vector(3 circuits numériques
0); - les circuits FPGA 2017 - 2018
52
53 ARCHITECTURE arch OF xor_4b_4b_4b IS
54 BEGIN

Manipulation
55
56
des STD_LOGIC & STD_LOGIC_VECTOR (4)
C <= A XOR B;
57
58 END arch;
59 --------------------------------------------------------------------------------------
60 LIBRARY IEEE;
61 USE IEEE.STD_LOGIC_1164.ALL;
62
63 ENTITY xor_4b_4b_4b IS
64 PORT (
65 A : IN std_logic_vector(3 downto 0);
66 B : IN std_logic_vector(3 downto 0);
67 C : OUT std_logic_vector(3 downto 0)
68 );
69 END xor_4b_4b_4b;
70
71 ARCHITECTURE arch OF xor_4b_4b_4b IS
72 SIGNAL D0, D1, D2, D3 : STD_LOGIC;
73 BEGIN
74
75 D3 <= A(3) XOR B(3);
76 D2 <= A(2) XOR B(2);
77 D1 <= A(1) XOR B(1);
78 D0 <= A(0) XOR B(0); Exemple d’utilisation d’une
79 C <= (D3 & D2 & D1 & D0);
agrégation de bits post-traitement de
80
81 END arch;
l’information
82

26 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les types de données SIGNED et UNSIGNED
๏ Afin de réaliser « simplement » des calculs arithmétiques dans vos
modules, il existe différents solutions.
๏ Pour le typage des signaux et des variables:
➡ Si les données sont non signées
‣ UNSIGNED( msb DOWNTO 0 ) => modélisation entre [0, +2MSB—1]
‣ SIGNAL CPT : UNSIGNED(10 DOWNTO 0 ) := TO_UNSIGNED( 0, 10 );
➡ Si les données sont signées
‣ SIGNED( msb DOWNTO 0 ) => modélisation entre [-2MSB-1, +2MSB-1—1]
‣ SIGNAL CPT : SIGNED(10 DOWNTO 0 ) := TO_SIGNED( 0, 10 );

๏ La représentation interne des données est:


➡ du binaire « classique » pour le type UNSIGNED,
➡ du complément à 2 pour le type SIGNED,

๏ La bibliothèque IEEE.NUMERIC_STD doit être inclue dans vos


modules VHDL.

27 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
La conversion des données depuis un STD_LOGIC_VECTOR

๏ Considérons une information numérique stockée ou transmise sous la


forme d’un STD_LOGIC_VECTOR.
➡ VARIABLE STDL : STD_LOGIC_VECTOR(7 DOWNTO 0) := « 1000 0001 »;

๏ Afin de réaliser des traitements arithmétiques il est nécessaire de la


convertir en SIGNED ou UNSIGNED:
➡ VARIABLE UNS : UNSIGNED( 7 DOWNTO 0 ) := UNSIGNED( STDL );
‣ La variable non signée UNS contient la valeur numérique 128.
➡ VARIABLE SIG : SIGNED( 7 DOWNTO 0 ) := SIGNED( STDL );
‣ La variable signée (complément à 2) SIG contient la valeur numérique -63.

๏ La conversion en sens inverse est tout aussi triviale:


➡ VARIABLE DEST1 := STD_LOGIC_VECTOR( 7 DOWNTO 0 ) := STD_LOGIC_VECTOR( UNS );
‣ La variable de DEST1 contient contient les valeurs binaires « 1000 0001 ».
➡ VARIABLE DEST2 := STD_LOGIC_VECTOR( 7 DOWNTO 0 ) := STD_LOGIC_VECTOR( SIG );
‣ La variable de DEST2 contient contient les valeurs binaires « 1000 0001 ».

28 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Exemple - Addition 8 bits sans retenue
Users/legal/Google Drive/E…/…/…/samples/add_8b_8b_8b.vhd Page 1/2
aved: 11/09/2017 09:46:37 Printed for: Bertrand LE GAL

1 LIBRARY IEEE;
2 USE IEEE.STD_LOGIC_1164.ALL;
3 USE IEEE.NUMERIC_STD.ALL ;
4
5 ENTITY add_8b_8b_8b IS
6 PORT (
7 A : IN std_logic_vector(7 downto 0);
8 B : IN std_logic_vector(7 downto 0);
9 C : OUT std_logic_vector(7 downto 0)
10 );
11 END add_8b_8b_8b;
12
13 ARCHITECTURE arch OF add_8b_8b_8b IS
14 BEGIN
15
16 PROCESS (A, B)
17 BEGIN
18 C <= STD_LOGIC_VECTOR( UNSIGNED(A) + UNSIGNED(B) );
19 END PROCESS; Les entrées sont typées puis
20 additionnées avant d’être à
21 END arch; nouveau re-typées
22
23
24
25
29
26 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
/Users/legal/Google Drive/E…/…/…/samples/add_8b_8b_8b.vhd Page 2/2
Saved: 10/09/2017 21:01:12 Printed for: Bertrand LE GAL
Exemple - Addition 8 bits sans retenue
42
43 ------------------------------------------------------------
44
45 LIBRARY IEEE;
46 USE IEEE.STD_LOGIC_1164.ALL;
47 USE IEEE.NUMERIC_STD.ALL ;
48
49 ENTITY add_8b_8b_8b IS Le processus d’addition peut
50 PORT ( se décomposer afin d’être
51 A : IN std_logic_vector(7 downto 0); plus lisible
52 B : IN std_logic_vector(7 downto 0);
53 C : OUT std_logic_vector(7 downto 0)
54 );
55 END add_8b_8b_8b;
56 Déclaration des variables
57 ARCHITECTURE arch OF add_8b_8b_8b IS intermédiaires
58 BEGIN
59
60 PROCESS (A, B)
61 VARIABLE D : unsigned(7 downto 0)
Typage des entrées en
62 VARIABLE E : unsigned(7 downto 0)
63 BEGIN nombre non signés
64 D := UNSIGNED(A);
65 E := UNSIGNED(B);
66 C <= STD_LOGIC_VECTOR( D + E );
67 END PROCESS;
68 Addition des données
69 END arch;
70

30 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Exemple - Addition 8 bits avec propagation de la retenue
/Users/legal/Google Drive/E…/…/…/samples/add_9b_8b_8b.vhd Page 1/3
Saved: 11/09/2017 10:03:30 Printed for: Bertrand LE GAL

1 LIBRARY IEEE;
2 USE IEEE.STD_LOGIC_1164.ALL;
3 USE IEEE.NUMERIC_STD.ALL ;
4
Pour récupérér le bit de
5 ENTITY add_9b_8b_8b IS
6 PORT (
retenu, il est nécessaire
7 A : IN std_logic_vector(7 downto 0); d’étendre manuellement les
8 B : IN std_logic_vector(7 downto 0); opérandes
9 C : OUT std_logic_vector(8 downto 0)
10 );
11 END add_9b_8b_8b;
12
Les données intermédiaires
13 ARCHITECTURE arch OF add_9b_8b_8b IS
14 BEGIN
possèdent un bit de plus
15
16 PROCESS (A, B)
17 VARIABLE D : unsigned(8 downto 0);
18 VARIABLE E : unsigned(8 downto 0); Les données sont non
19 BEGIN signées, on ajoute un bit à 0
20 D := '0' & UNSIGNED(A);
21 E := '0' & UNSIGNED(B);
22 C <= STD_LOGIC_VECTOR( D + E );
23 END PROCESS;
24
L’opération d’addition a
25 END arch; maintenant lieu sur 9 bits
26
27
28
31 29 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
/Users/legal/Google Drive/E…/…/…/samples/add_9b_8b_8b.vhd Page 2/3
Exemple - Addition 8 bits avec propagation de la retenue
Saved: 11/09/2017 10:03:30 Printed for: Bertrand LE GAL

42 ------------------------------------------------------------------------------------------
43
44 LIBRARY IEEE;
45 USE IEEE.STD_LOGIC_1164.ALL;
46 USE IEEE.NUMERIC_STD.ALL ;
47
48 ENTITY add_9b_8b_8b IS
49 PORT (
50 A : IN std_logic_vector(7 downto 0);
51 B : IN std_logic_vector(7 downto 0);
52 C : OUT std_logic_vector(8 downto 0)
53 );
54 END add_9b_8b_8b;
55
56 ARCHITECTURE arch OF add_9b_8b_8b IS La fonction RESIZE de la bibliothèque
57 BEGIN NUMERIC_STD permet de
58
redimensionner les données
59 PROCESS (A, B)
60 VARIABLE D : unsigned(7 downto 0);
61 VARIABLE E : unsigned(7 downto 0);
62 BEGIN
63 D := UNSIGNED(A);
64 E := UNSIGNED(B);
65 C <= STD_LOGIC_VECTOR( RESIZE(D, 9) + RESIZE(E, 9) );
66 END PROCESS;
67
68 END arch;
69
70
71
32 72 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
/Users/legal/Google Drive/E…/…/…/samples/add_9b_8b_8b.vhd Page 3/3
Saved: 11/09/2017 10:03:30 Printed for: Bertrand LE GAL
Exemple - Addition 8 bits avec propagation de la retenue
83
84 ------------------------------------------------------------------------------------------
85
86 LIBRARY IEEE;
87 USE IEEE.STD_LOGIC_1164.ALL;
88 USE IEEE.NUMERIC_STD.ALL ;
89
90 ENTITY add_9b_8b_8b IS
91 PORT (
92 A : IN std_logic_vector(7 downto 0);
93 B : IN std_logic_vector(7 downto 0);
94 C : OUT std_logic_vector(8 downto 0)
95 );
96 END add_9b_8b_8b;
97
98 ARCHITECTURE arch OF add_9b_8b_8b IS Il en va de même sur les données de
99 BEGIN type SIGNED, mais que fait elle
100 concrètement ?
101 PROCESS (A, B)
102 VARIABLE D : signed(7 downto 0);
103 VARIABLE E : signed(7 downto 0);
104 BEGIN
105 D := SIGNED(A);
106 E := SIGNED(B);
107 C <= STD_LOGIC_VECTOR( RESIZE(D, 9) + RESIZE(E, 9) );
108 END PROCESS;
109
110 END arch;
111
112
113
33114 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Exemple - Multiplication 8 bits avec extension
/Users/legal/Google Dri…/…/…/…/samples/mul_16b_8b_8b.vhd Page 1/1
Saved: 10/09/2017 23:22:34 Printed for: Bertrand LE GAL

1 LIBRARY IEEE;
2 USE IEEE.STD_LOGIC_1164.ALL;
3 USE IEEE.NUMERIC_STD.ALL ;
4
5 ENTITY mul_16b_8b_8b IS
6 PORT (
7 A : IN std_logic_vector( 7 downto 0);
8 B : IN std_logic_vector( 7 downto 0);
9 C : OUT std_logic_vector(15 downto 0)
10 );
11 END mul_16b_8b_8b;
12
13 ARCHITECTURE arch OF mul_16b_8b_8b IS
14 BEGIN
15
16 PROCESS (A, B)
17 VARIABLE D : unsigned(7 downto 0);
18 VARIABLE E : unsigned(7 downto 0);
19 BEGIN
20 D := UNSIGNED(A);
21 E := UNSIGNED(B);
22 C <= STD_LOGIC_VECTOR( D * E ); Un opération de multiplication
23 END PROCESS;
24
génère un résultat sur P*Q bits si ses
25 END arch; opérandes sont codées sur P et Q bits.
26

34 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Exemple - Multiplication 8 bits sans extension
/Users/legal/Google Drive/E…/…/…/samples/mul_8b_8b_8b.vhd Page 1/2
Saved: 11/09/2017 09:41:32 Printed for: Bertrand LE GAL

1 LIBRARY IEEE;
2 USE IEEE.STD_LOGIC_1164.ALL;
3 USE IEEE.NUMERIC_STD.ALL ;
4
5 ENTITY mul_8b_8b_8b IS
6 PORT (
7 A : IN std_logic_vector(7 downto 0);
8 B : IN std_logic_vector(7 downto 0);
9 C : OUT std_logic_vector(7 downto 0)
10 );
11 END mul_8b_8b_8b;
12
13 ARCHITECTURE arch OF mul_8b_8b_8b IS
14 BEGIN
15
16 PROCESS (A, B)
17 VARIABLE D : unsigned(15 downto 0);
18 VARIABLE E : unsigned( 7 downto 0);
19 BEGIN
20 D := UNSIGNED(A) * UNSIGNED(B);
21 E := D(7 downto 0);
Pour maintenir un dynamique
22 C <= STD_LOGIC_VECTOR( E );
23 END PROCESS;
constante, il est nécessaire de
24 tronquer manuellement le résultat de
25 END arch; l’opération
26
27
28
35 29 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
/Users/legal/Google Drive/E…/…/…/samples/mul_8b_8b_8b.vhd Page 2/2
Exemple - Multiplication 8 bits sans extension
Saved: 11/09/2017 09:41:32 Printed for: Bertrand LE GAL

42 ------------------------------------------------------------------------------
43
44 LIBRARY IEEE;
45 USE IEEE.STD_LOGIC_1164.ALL;
46 USE IEEE.NUMERIC_STD.ALL ;
47
48 ENTITY mul_8b_8b_8b IS
49 PORT (
50 A : IN std_logic_vector(7 downto 0);
51 B : IN std_logic_vector(7 downto 0);
52 C : OUT std_logic_vector(7 downto 0)
53 );
54 END mul_8b_8b_8b;
55
56 ARCHITECTURE arch OF mul_8b_8b_8b IS
57 BEGIN
58
59 PROCESS (A, B)
60 VARIABLE D : unsigned(15 downto 0);
61 VARIABLE E : unsigned( 7 downto 0);
62 BEGIN
63 D := UNSIGNED(A) * UNSIGNED(B);
64 E := RESIZE(D, 8);
65 C <= STD_LOGIC_VECTOR( E ); La fonction RESIZE vous permet de
66 END PROCESS; réaliser ce traitement MAIS elle
67 conserve les MSB du résultat
68 END arch;
69

36 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--

Mise en pratique des données UNSIGNED (1)


----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

ENTITY counter_v1 IS
PORT (
CLK : in STD_LOGIC;
RST : in STD_LOGIC;
On définit le signal de type
O : out STD_LOGIC_VECTOR( 7 DOWNTO 0) UNSIGNED
);
END counter_v1;

ARCHITECTURE Behavioral OF counter_v1 IS


SIGNAL COUNTER : UNSIGNED(7 DOWNTO 0); On initialise le signal à la
BEGIN
valeur 0 codée sur 8 bits
PROCESS(RST, CLK)
BEGIN
IF RST = '1' THEN
COUNTER <= TO_UNSIGNED( 0, 8 );
ELSIF CLK = '1' AND CLK'EVENT THEN On compare la valeur avec
IF COUNTER = TO_UNSIGNED( 255, 8 ) THEN la borne maximum
COUNTER <= TO_UNSIGNED( 0, 8 );
ELSE
COUNTER <= COUNTER + TO_UNSIGNED( 1, 8 );
END IF;
END IF;
END PROCESS; On incrémente la valeur
du compteur
O <= STD_LOGIC_VECTOR( COUNTER );

END Behavioral;

37 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created

Mise en pratique des données UNSIGNED (2)


-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

ENTITY counter_v1 IS
PORT (
CLK : in STD_LOGIC;
RST : in STD_LOGIC;
O : out STD_LOGIC_VECTOR( 7 DOWNTO 0)
);
END counter_v1;

ARCHITECTURE Behavioral OF counter_v1 IS


SIGNAL COUNTER : UNSIGNED(7 DOWNTO 0);
BEGIN

PROCESS(RST, CLK)
BEGIN
IF RST = '1' THEN
COUNTER <= TO_UNSIGNED( 0, 8 );
ELSIF CLK = '1' AND CLK'EVENT THEN
COUNTER <= COUNTER + TO_UNSIGNED( 1, 8 );
END IF;
END PROCESS;
Codé sur 8 bits, la valeur interne
O <= STD_LOGIC_VECTOR( COUNTER ); du compteur rebouche
END Behavioral;
automatiquement à zéro

38 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Le type de donnée de type INTEGER (1)

๏ La manipulation des données de type SIGNED et UNSIGNED n’est


pas toujours aisée.
๏ Afin de simplifier l’écriture des traitement arithmétiques, un autre
type existe « INTEGER »,
➡ Il est plus « sympathique » pour le concepteur,
➡ Il est cependant moins « précis » quand à son implantation matérielle,
➡ Une donnée de type INTEGER (sans range) permet de représenter un

nombre dans l’interval [-231, +231-1].
➡ SIGNAL la_data : INTEGER = 73;

๏ On utilise rarement le type INTEGER sans spécification de


l’intervalle de variation des données,
➡ SIGNAL la_data : INTEGER RANGE 0 TO 124 := 24;
➡ SIGNAL la_data : INTEGER RANGE -24 TO 13 := -4;

39 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Le type de donnée de type INTEGER (2)
๏ Considérons une information numérique stockée ou transmise sous la
forme d’un STD_LOGIC_VECTOR.
➡ VARIABLE STDL : STD_LOGIC_VECTOR(7 DOWNTO 0) := « 1000 0001 »;

๏ La conversion sous la forme de donnée de type INTEGER nécessite une


transformation intermédiaire:
➡ VARIABLE INT1 : INTEGER := TO_INTEGER( UNSIGNED( STDL ) );
‣ La variable INT1 contient la valeur numérique 128.
➡ VARIABLE INT2 : INTEGER := TO_INTEGER( SIGNED( STDL ) );
‣ La variable INT2 contient la valeur numérique -63.

๏ La conversion type INTEGER nécessite une transformation


intermédiaire:
➡ VARIABLE DEST3 := STD_LOGIC_VECTOR( 7 DOWNTO 0 ) :=
STD_LOGIC_VECTOR( TO_UNSIGNED(INT1, 8) );
‣ La variable DEST3 contient les valeurs logiques « 1000 0001 ».
➡ VARIABLE DEST4 := STD_LOGIC_VECTOR( 7 DOWNTO 0 ) :=
STD_LOGIC_VECTOR( TO_SIGNED(INT2, 8) );
‣ La variable DEST4 contient les valeurs logiques « 1000 0001 ».

40 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--

Le type de donnée INTEGER


----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

ENTITY counter_v2 IS
PORT (
CLK : in STD_LOGIC;
RST : in STD_LOGIC;
O : out STD_LOGIC_VECTOR( 7 DOWNTO 0)
);
END counter_v2; La manipulation des données
ARCHITECTURE Behavioral OF counter_v2 IS
numériques est plus simple
SIGNAL COUNTER : INTEGER RANGE 0 TO 255;
BEGIN

PROCESS(RST, CLK)
BEGIN
IF RST = '1' THEN La teste avec la valeur maximum
COUNTER <= 0; est obligatoire sinon cela génère
ELSIF CLK = '1' AND CLK'EVENT THEN
IF COUNTER = 255 THEN des erreurs à la simulation.
COUNTER <= 0;
ELSE
COUNTER <= COUNTER + 1;
END IF;
END IF;
END PROCESS; On doit convertir la donnée
entière sur 8 bits pour la
O <= STD_LOGIC_VECTOR( TO_UNSIGNED(COUNTER,8) );
transmettre en sortie.
END Behavioral;

41 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Un peu de généricité…

42 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
M:integer := 5;
N:integer := 8);
port ( LLR0:in std_logic_vector (N-1 downto 0);
Définition des constantes LLR1: in std_logic_vector(N-1 downto 0);
msg0:in std_logic_vector (N-1 downto 0);
-- msg1: in std_logic_vector(N-1 downto 0);
-- msg2:in std_logic_vector (N-1 downto 0);
๏ Afin de rendre le code VHDL plus générique et donc plus
--
--
msg3: in std_logic_vector(N-1 downto 0);
msg4:in std_logic_vector (N-1 downto 0);
réutilisable, différentes solutions existent.
-- msg5: in std_logic_vector(N-1 downto 0);
we1 : in std_logic ;
๏ La spécification CONSTANT peut être employé à la place des
we2 : in std_logic ;
we3 : in std_logic ;
traditionnels SIGNAL ou VARIABLE afin de définir une variable
we4 : in std_logic ;
we5 : in std_logic ;
dont la valeur ne peut être modifiée.
we6 : in std_logic ;
clk: in std_logic ;
๏ Il est possible de définir le type des autres données à partir de
rst: in std_logic ;
S0 : OUT std_logic_vector(28 downto 0);
cette donnée constante. S1 : OUT std_logic_vector(28 downto 0));
--iter:out std_logic_vector (N-1 downto 0 ) ;
end LDPC_CC_Main_code;

ARCHITECTURE arch OF module IS


CONSTANT N : INTEGER := 8;
SIGNAL B : STD_LOGIC_VECTOR(N-1 DOWNTO 0);
BEGIN

architecture Behavioral of LDPC_CC_Main_code is


component compteur_modulo3 is

43 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Définition des constantes
1 · untitled · 2016-09-13 15:14 · legal

ENTITY counter_v1 IS
PORT ( Modifier la valeur de N modifie
CLK : in STD_LOGIC;
RST : in STD_LOGIC; l’ensemble du comportement
O : out STD_LOGIC_VECTOR( 7 DOWNTO 0) interne du compteur
);
END counter_v1;

ARCHITECTURE Behavioral OF counter_v1 IS


CONSTANT N : INTEGER := 8; Facile et rapide à adapter pour
CONSTANT ZERO : UNSIGNED(N-1 DOWNTO 0) := TO_UNISGNED(0, N);
CONSTANT ONE : UNSIGNED(N-1 DOWNTO 0) := TO_UNISGNED(0, N);
un nouveau projet
SIGNAL COUNTER : UNSIGNED(N-1 DOWNTO 0);
BEGIN

PROCESS(RST, CLK)
BEGIN Toutes les instances de ce module
IF RST = '1' THEN posséderont les même
COUNTER <= ZERO;
ELSIF CLK = '1' AND CLK'EVENT THEN caractéristiques
COUNTER <= COUNTER + ONE;
END IF;
END PROCESS;

O <= STD_LOGIC_VECTOR( COUNTER ); Description d’un compteur


END Behavioral;
semi-générique

44 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Déclaration de modules VHDL génériques

๏ Il est possible de rendre un module totalement générique en


spécifiant ses paramètres propres lors de son instanciation e.g.
un module xor N bits.
๏ En plus de la déclaration des E/S dans l’entité, il faut spécifier
les paramètres génériques du module,
๏ Attention, il ne faut pas abuser de cette possibilité qui
complexifie:
- L’écriture du VHDL dans le module,
- Le débuggage du code VHDL écrit,
- Son utilisation dans les cas simple.

๏ La spécification de valeurs par défaut est possible.

45 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
Déclaration de modules VHDL génériques
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

ENTITY counter_v3 IS
GENERIC(
N : INTEGER := 8
);
PORT (
CLK : in STD_LOGIC;
RST : in STD_LOGIC;
O : out STD_LOGIC_VECTOR(N-1 DOWNTO 0)
);
END counter_v3;

ARCHITECTURE Behavioral OF counter_v1 IS


CONSTANT ZERO : UNSIGNED(N-1 DOWNTO 0) := TO_UNISGNED(0, N);
CONSTANT ONE : UNSIGNED(N-1 DOWNTO 0) := TO_UNISGNED(0, N);
SIGNAL COUNTER : UNSIGNED(N-1 DOWNTO 0);
BEGIN

PROCESS(RST, CLK)
BEGIN
IF RST = '1' THEN
COUNTER <= ZERO;
ELSIF CLK = '1' AND CLK'EVENT THEN
COUNTER <= COUNTER + ONE;
END IF;
END PROCESS;

O <= STD_LOGIC_VECTOR( COUNTER );

END Behavioral;

46 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
--
--------------------------------------------------------------------------------
Déclaration de modules VHDL génériques
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

ENTITY counter_v4 IS
GENERIC(
N : INTEGER := 8
);
PORT (
CLK : in STD_LOGIC;
RST : in STD_LOGIC;
O : out STD_LOGIC_VECTOR(N-1 DOWNTO 0)
);
END counter_v4;

ARCHITECTURE Behavioral OF counter_v4 IS


SIGNAL COUNTER : INTEGER RANGE 0 TO (2**N)-1;
BEGIN

PROCESS(RST, CLK)
BEGIN
IF RST = '1' THEN
COUNTER <= 0;
ELSIF CLK = '1' AND CLK'EVENT THEN
IF COUNTER = (2**N)-1 THEN
COUNTER <= 0;
ELSE
COUNTER <= COUNTER + 1;
END IF;
END IF;
END PROCESS;

O <= STD_LOGIC_VECTOR( TO_UNISGNED(COUNTER, N) );

END Behavioral;

47 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Instanciation de modules VHDL génériques

๏ La configuration des modules 1 · untitled · 2016-09-13 15:57 · legal

est réalisé à la synthèse grace


-- COMPTEUR DE 0...255
aux paramètre d’instanciation, c1 : ENTITY work.counter_v4
PORT MAP(
๏ Deux possibilités s’offrent à CLK => CLK,
RST => RST,
vous: O => VALUE
);
- Utiliser les paramètres par défaut,
-- COMPTEUR DE 0...1023
donc pas de GENERIC MAP,
c2 : ENTITY work.counter_v4
- Spécifier vos propres valeurs pour les GENERIC MAP(
N => 10
paramètres. )
PORT MAP(
๏ Utiliser des génériques CLK => CLK,
RST => RST,
complexifie le développement O => VALUE
des modules mais accroit leur );

réutilisation future.

48 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Configuration des architectures à l’aide de packages

๏ La généricité des modules est interessante mais peut être


difficile à mettre en oeuvre dans un projet complexe.
๏ Dans ce cas de figure on préfère souvent faire usage de package,
cela « équivaut » au #define et au « .h » en langage C.
๏ Un package est un fichier VHDL à part. On include dans l’en-
tête des modules qui ont besoin des informations définies
dedans.

49 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
1 · untitled · 2016-09-13 16:31 · legal
Configuration des architectures à l’aide de packages
1 · untitled · 2016-09-13 16:31 · legal

library IEEE;
library IEEE; On crée un fichier VHDL contenant les
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_1164.all; informations communes
package conf_counter is
package conf_counter is « conf_counter.vhd »
CONSTANT N : INTEGER := 8;
CONSTANT N : INTEGER := 8;
end conf_counter;
end conf_counter;

library IEEE;
library IEEE; use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL;
use IEEE.NUMERIC_STD.ALL; use WORK.conf_counter.ALL;
use WORK.conf_counter.ALL;
ENTITY counter_v4 IS
ENTITY counter_v4 IS PORT (
PORT ( CLK : in STD_LOGIC;
CLK : in STD_LOGIC; RST : in STD_LOGIC;
On spécifie dans notre module que
RST : in STD_LOGIC; O : out STD_LOGIC_VECTOR(N-1 DOWNTO 0)
O : out STD_LOGIC_VECTOR(N-1
l’on souhaite utiliser le package );DOWNTO 0)
); END counter_v4;
END counter_v4;

50 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Définition de fonctions en VHDL

๏ On peut définir des fonctions


en VHDL afin de simplifier les
traitement récurants
- Cela améliore grandement la lisibilité
du code source,
- Cela simplifie les étapes de debug,

๏ Le code factorisé sera déroulé


à la synthèse du module,
- Une fonction appelée X fois implique
X implantations distinctes dans
l’architecture numérique !

51 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
1 · untitled · 2016-09-13 22:49 · legal
1 · untitled · 2016-09-13 22:49 · legal
library IEEE;
Définition de fonctions en VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.NUMERIC_STD.ALL;
ENTITY min_v1 IS
ENTITY min_v1 IS
PORT (
A : in STD_LOGIC_VECTOR(7 DOWNTO 0);
B : inLeSTD_LOGIC_VECTOR(7
composant min_v1 doit
0);réaliser le
PORT (
A : in STD_LOGIC_VECTOR(7 DOWNTO 0); DOWNTO
B : in STD_LOGIC_VECTOR(7 DOWNTO 0); calcul
C : in du minimum DOWNTO
STD_LOGIC_VECTOR(7 entre 40);
valeurs non
D : in STD_LOGIC_VECTOR(7 DOWNTO 0);
C : in STD_LOGIC_VECTOR(7 DOWNTO 0); signées
S : out STD_LOGIC_VECTOR(7 DOWNTO 0)
D : in STD_LOGIC_VECTOR(7 DOWNTO 0);
S : out STD_LOGIC_VECTOR(7 DOWNTO 0) );
); END min_v1;
END min_v1;
ARCHITECTURE Behavioral OF min_v1 IS
ARCHITECTURE Behavioral OF min_v1 IS BEGIN
BEGIN
PROCESS(A, B, C, D)
PROCESS(A, B, C, D) VARIABLE T1, T2, T3 : STD_LOGIC_VECTOR(7 DOWNTO 0);
VARIABLE T1, T2, T3 : STD_LOGIC_VECTOR(7 DOWNTOBEGIN
0);
BEGIN IF UNSIGNED(A) < UNSIGNED(B) THEN
IF UNSIGNED(A) < UNSIGNED(B) THEN T1 := A;
T1 := A; ELSE
ELSE T1 := B;
T1 := B; END IF;
END IF; IF UNSIGNED(C) < UNSIGNED(D) THEN
IF UNSIGNED(C) < UNSIGNED(D) THEN T2 := C;
T2 := C; ELSE
ELSE T2 := D;
T2 := D; END IF;
END IF; IF UNSIGNED(T1) < UNSIGNED(T2) THEN
IF UNSIGNED(T1) < UNSIGNED(T2) THEN S <= T1;
S <= T1; ELSE
ELSE S <= T2;
La descriptionS <= du
T2;comportement END IF;
END IF;
interne du module est répétitive…
END PROCESS;
END PROCESS;

END Behavioral;
END Behavioral;

52 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
1 · untitled · 2016-09-13 22:49 · legal

Définition de fonctions en VHDL


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

ENTITY min_v1 IS
PORT ( Le composant min_v1 doit réaliser le
A : in STD_LOGIC_VECTOR(7 DOWNTO 0);
B : in STD_LOGIC_VECTOR(7 DOWNTO 0); calcul du minimum entre 4 valeurs non
C : in STD_LOGIC_VECTOR(7 DOWNTO 0); signées
D : in STD_LOGIC_VECTOR(7 DOWNTO 0);
S : out STD_LOGIC_VECTOR(7 DOWNTO 0)
); 1 · untitled · 2016-09-13 22:51 · legal
END min_v1;
ARCHITECTURE Behavioral OF min_v2 IS
ARCHITECTURE Behavioral OF min_v1 IS
BEGIN FUNCTION mini(A, B: STD_LOGIC_VECTOR )
return STD_LOGIC_VECTOR IS
PROCESS(A, B, C, D)
BEGIN
VARIABLE T1, T2, T3 : STD_LOGIC_VECTOR(7 DOWNTO 0);
IF UNSIGNED(A) < UNSIGNED(B) THEN
Déclaration
BEGIN
d’une fonction
IF UNSIGNED(A) < UNSIGNED(B) THEN
RETURN A;
générique permettant
T1 := A; de calcul la ELSE
RETURN B;
valeur minimum
ELSE
entre
T1 := B;
2 données END IF;
de typeENDSTD_LOGIC_VECTOR
IF; END mini;
IF UNSIGNED(C) < UNSIGNED(D) THEN
T2 := C; BEGIN
ELSE
T2 := D; PROCESS(A, B, C, D)
END IF; VARIABLE T1, T2 : STD_LOGIC_VECTOR(7 DOWNTO 0);
IF UNSIGNED(T1) < UNSIGNED(T2) THEN BEGIN
S <= T1; T1 := mini( A, B);
ELSE T2 := mini( C, D);
Le code sourceS <=du
T2;module est plus S <= mini(T1, T2);
END IF;
clair et plus concis
END PROCESS;
END PROCESS;

END Behavioral;
END Behavioral;

53 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Utiliser les propriétés des signaux pour plus de généricité

๏ Les signaux et les variables ont des propriétés qui vous


permettent de simplifier l’écriture du code source.
๏ Vous avez déjà tous utilisé ce mécanisme l’an dernier…
➡ IF CLOCK’EVENT AND CLOCK = ‘1’ THEN

๏ Beaucoup d’autres propriétés existent, cependant leur nombre


et leur nature varient en fonction du type de la donnée.

54 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Utiliser les propriétés des signaux pour plus de généricité
๏ S'EVENT is true if signal S has had an event this simulation cycle.
๏ T'LEFT is the leftmost value of type T. (Largest if downto)
๏ T'RIGHT is the rightmost value of type T. (Smallest if downto)
๏ T'IMAGE(X) is a string representation of X that is of type T.
๏ T'VALUE(X) is a value of type T converted from the string X.
๏ A'LEFT is the leftmost subscript of array A or constrained array type.
๏ A'LEFT(N) is the leftmost subscript of dimension N of array A.
๏ A'RIGHT is the rightmost subscript of array A or constrained array type.
๏ A'RIGHT(N) is the rightmost subscript of dimension N of array A.
๏ A'RANGE is the range A'LEFT to A'RIGHT or A'LEFT downto A'RIGHT .
๏ A'REVERSE_RANGE is the range of A with to and downto reversed.
๏ A'REVERSE_RANGE(N) is the REVERSE_RANGE of dimension N of array A.
๏ A'LENGTH is the integer value of the number of elements in array A.

55 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Utiliser les propriétés des signaux pour plus de généricité

๏ Exemples au tableau…

56 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Et le VHDL synthétisable dans tout cela…

๏ En VHDL on peut décrire « tout


et n’importe quoi »,
๏ Les outils de synthèse logique Exemple de code source qui ne
sera jamais synthétisable !!!
ne supportent pas tout le VHDL
lorsque vous générer votre 1 · untitled · 2016-09-13 22:56 · legal
circuit, -- Clock process definitions
CLK_process :process
๏ L’outil réalise un mapping entre constant CLK_period : time := 10 ns;
le comportement et les begin
CLK <= '0';
ressources matérielles wait for CLK_period/2;
CLK <= '1';
disponibles, wait for CLK_period/2;
end process;
๏ Par exemple,
- Les boucles « for » sont déroulées,
- Les boucles « while » sont interdites.

57 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018

Vous aimerez peut-être aussi