Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Bertrand LE GAL
[bertrand.legal@ims-bordeaux.fr]
2017 - 2018
Déroulement de l’enseignement de VHDL
2 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Rappels sur le langage VHDL
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
5 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Les bases du langage VHDL - les « entités »
6 Bertrand LE GAL EN201 - Technologie des circuits numériques - 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
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
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: --
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
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
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
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
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
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;
END Behavioral;
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
PROCESS(RESET, CLOCK)
BEGIN
IF RESET = '1' THEN
reg <= (OTHERS => '0');
ELSIF rising_edge(CLK) THEN
reg <= i_data;
END IF;
END PROCESS;
END Behavioral;
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
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";
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)
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 );
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
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:
--
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;
END Behavioral;
37 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
ENTITY counter_v1 IS
PORT (
CLK : in STD_LOGIC;
RST : in STD_LOGIC;
O : out STD_LOGIC_VECTOR( 7 DOWNTO 0)
);
END counter_v1;
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)
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 »;
40 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
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;
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;
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;
44 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Déclaration de modules VHDL génériques
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;
PROCESS(RST, CLK)
BEGIN
IF RST = '1' THEN
COUNTER <= ZERO;
ELSIF CLK = '1' AND CLK'EVENT THEN
COUNTER <= COUNTER + ONE;
END IF;
END PROCESS;
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;
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;
END Behavioral;
47 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018
Instanciation de modules VHDL génériques
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
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
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
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é
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…
57 Bertrand LE GAL EN201 - Technologie des circuits numériques - les circuits FPGA 2017 - 2018