Академический Документы
Профессиональный Документы
Культура Документы
1/46
Denis Giacona
ENSISA
cole Nationale Suprieure d'Ingnieur Sud Alsace
12, rue des frres Lumire
68 093 MULHOUSE CEDEX
FRANCE
Tl.
33 (0)3 89 33 69 00
D.Giacona
2/46
1. Prambule ......................................................................................................................................................................................................................4
1.1. Les objectifs de la programmation VHDL pour un circuit FPGA ...............................................................................................................4
1.2. Quelques caractristiques du langage .............................................................................................................................................................5
1.3. La porte des instructions .................................................................................................................................................................................6
1.4. Quelques rgles adopter .................................................................................................................................................................................7
1.4.1. Indenter les instructions .............................................................................................................................................................................7
1.4.2.
Appliquer une rgle de dnomination des identificateurs ................................................................................................................8
2. Aperu de la programmation VHDL .....................................................................................................................................................................9
3. lments fondamentaux du langage VHDL ...................................................................................................................................................... 15
3.1. Les commentaires ............................................................................................................................................................................................... 15
3.2. Les identificateurs ......................................................................................................................................................................................... 15
3.3. Les objets donnes : signal, constante, variable .................................................................................................................................... 16
3.4. Les types des objets donnes ...................................................................................................................................................................... 17
3.4.1.
Les types prdfinis par tous les compilateurs ................................................................................................................................ 17
3.4.2. Les types complmentaires .................................................................................................................................................................... 18
3.4.3. Conversions de type ................................................................................................................................................................................. 19
3.4.4. Usage courant du type integer ............................................................................................................................................................. 20
3.4.5. Les littraux .............................................................................................................................................................................................. 21
3.5. Les oprateurs ................................................................................................................................................................................................ 22
3.5.1.
Oprateurs de construction dexpressions ....................................................................................................................................... 22
3.5.2. Oprateurs dassignation et dassociation ......................................................................................................................................... 23
3.6. Les dclarations et les assignations des signaux vecteurs .................................................................................................................. 24
3.7. Surcharge doprateurs ................................................................................................................................................................................ 25
3.8. Les attributs ................................................................................................................................................................................................... 26
4. Rle de l'entit ...................................................................................................................................................................................................... 28
4.1. Description dune entit non gnrique ........................................................................................................................................................ 28
D.Giacona
3/46
D.Giacona
4/46
1. Prambule
1.1. Les objectifs de la programmation VHDL pour un circuit FPGA
Des instructions pour dcrire
les signaux de test
Logiciel de simulation
Des instructions pour dcrire le
comportement du systme
- fonctions combinatoires
- fonctions squentielles
Logiciel de synthse
(configuration de
circuits logiques
programmables)
D.Giacona
5/46
Syntaxe complexe
o pour aider le concepteur, les outils de dveloppement proposent des modles
(templates) et des convertisseurs de schmas en code VHDL
Langage strict par rapport aux types et aux dimensions des donnes
o avantage : limination dun grand nombre derreurs de conception ds la compilation
Trs bonne portabilit
o condition d'crire un code indpendant de la technologie
Plusieurs styles de description
o tous les styles ne conviennent pas toutes les applications
o toutes les instructions ne sont pas synthtisables
D.Giacona
6/46
D.Giacona
7/46
D.Giacona
1.4.2.
8/46
Horloge
Reset synchrone (mise 0)
Set synchrone (mise 1)
Read/write actif l'tat haut
Dcodeur 1 parmi 8
Multiplexeur 2 vers
Registre de mmorisation 4 bits
Registre dcalage 4 bits
Compteur 8 bits (binaire naturel)
Entre incrmentation dun compteur 8 bits
Sortie retenue dun compteur 8 bits
Compteur BCD
Compteur (signal interne)
tiquette de processus de comptage
: clk
: rst, sr
: set, sp
: rw
: dec1of8
: mux2to1
: reg4
: shift_reg4
: count8, cnt8
: up_count8, up_cnt8
: co_count8, co_cnt8
: cntbcd, bcdcnt
: count_int
: count_proc
D.Giacona
9/46
Dcomposition hirarchique du
systme en un bloc principal et
des sous-blocs (qui peuvent
leur tour tre dcomposs).
D.Giacona
10/46
Exemple de dcomposition
tempo1ms
control
Signal externe
cnt10
up_cnt10
a
rst_cnt10
clk
en
cnt(9:0)
rst
clk
clk
compare
cnt10(9:0)
max_cnt10
(d = max)
d(9:0)
Signal interne
D.Giacona
11/46
D.Giacona
12/46
13/46
Autres styles
entity
-- entres sorties du bloc Systme
end ;
architecture
-- description des fonctions des blocs A, B et C
end ;
D.Giacona
14/46
3 instructions concurrentes
end arch_tempo1ms;
D.Giacona
15/46
16/46
D.Giacona
17/46
integer
natural
positive
: entier positif
bit
bit_vector
boolean
real
D.Giacona
3.4.2.
std_logic
U
X
0
1
Z
W
L
H
-
18/46
std_logic_vector
-- vecteur de std_logic
Pour autoriser lusage de ces types, il faut inclure les directives suivantes avant la dclaration dentit.
library ieee;
use ieee.std_logic_1164.all;
2
3
3.4.3.
19/46
Conversions de type
3.4.4.
20/46
D.Giacona
3.4.5.
21/46
Les littraux
Les bits
0, 1
0, 1 ,U, X, H, L, W, Z, -
-- type bit
-- type std_logic
-- reprsentation binaire
-- reprsentation octale
-- reprsentation hexadcimale
Les caractres
a
D.Giacona
22/46
Les oprateurs relationnels permettent de comparer des oprandes de mme type et dindiquer
lgalit, lingalit ou leur relation dordre. Ils sont utiliss dans des instructions de test. Ils rendent
une valeur boolenne (false ou true).
=
<
<=
>
>=
/=
Les oprateurs logiques sont dfinis pour les types boolean, bit, std_logic et les vecteurs
correspondants
and
or
not
nand
nor
xor
and nest pas prioritaire par rapport or (utiliser des parenthses)
Les oprateurs arithmtiques sont dfinis pour les types entiers et rels
+
*
/
**
mod
rem
abs
D.Giacona
3.5.2.
23/46
Assignation de variable
o lintrieur dun processus
nom_variable := expression ;
Association de signaux
nom_signal_formel => nom_signal_effectif ;
o connecteur de signaux dans une instanciation de composant
D.Giacona
24/46
droite
LSB ( droite)
a(0)
a(1)
a(2)
a(3)
a(4)
a(5)
a(6)
a(7)
LSB ( droite)
b(7)
b(6)
b(5)
b(4)
b(3)
b(2)
b(1)
b(0)
D.Giacona
25/46
D.Giacona
26/46
D.Giacona
27/46
library ieee;
use ieee.std_logic_1164.all;
entity attributs is port(
vector_dwn
: in std_logic_vector(15 downto 0);
vector_up : in std_logic_vector(0 to 7);
x
: out std_logic_vector(7 downto 0);
y
: out std_logic_vector(0 to 11);
z
: out std_logic_vector(7 downto 0));
end attributs;
architecture arch_attributs of attributs is
begin
x(0) <= vector_dwn(vector_dwn'left);
x(1) <= vector_dwn(vector_dwn'right);
x(2) <= vector_up(vector_up'left);
x(3) <= vector_up(vector_up'right);
x(4) <= vector_dwn(vector_dwn'high);
x(5) <= vector_dwn(vector_dwn'low);
x(6) <= vector_up(vector_up'high);
x(7) <= vector_up(vector_up'low);
y(vector_up'range)
<= "00001111";
z(vector_up'reverse_range)
<= "00110011";
x(0)
x(1)
x(2)
x(3)
x(4)
x(5)
x(6)
x(7)
=
=
=
=
=
=
=
=
vector_dwn(15)
vector_dwn(0)
vector_up(0)
vector_up(7)
vector_dwn(15)
vector_dwn(0)
vector_up(7)
vector_up(0)
y(0)
y(1)
y(2)
y(3)
y(4)
y(5)
y(6)
y(7)
=
=
=
=
=
=
=
=
GND
GND
GND
GND
VCC
VCC
VCC
VCC
z(0)
z(1)
z(2)
z(3)
z(4)
z(5)
z(6)
z(7)
=
=
=
=
=
=
=
=
VCC
VCC
GND
GND
VCC
VCC
GND
GND
end arch_attributs;
D.Giacona
28/46
4. Rle de l'entit
La dclaration dentit dcrit une interface externe unique.
La dclaration comprend :
o ventuellement, une liste de paramtres gnriques,
o la dfinition des ports, c.--d. une liste de signaux dentre et de signaux de
sortie, chaque signal possdant un nom, un mode et un type.
D.Giacona
29/46
tempo1ms
control
cnt10
up_cnt10
rst_cnt10
clk
en
cnt(9:0)
rst
clk
clk
compare
cnt10(9:0)
max_cnt10
(d = max)
d(9:0)
D.Giacona
30/46
Nom de lentit
Mode du signal
entity tempo1ms is
Type de signal
Nom du signal
port (
clk
a
t
: in
: in
: out
std_logic;
std_logic;
std_logic);
end tempo1ms;
D.Giacona
31/46
entity nom_entit is
generic (
nom_paramtre {,nom_paramtre} : type_paramtre [:= expression_statique]
{; nom_paramtre {,nom_paramtre} : type_paramtre [:= expression_statique]} );
port (
[signal] nom_signal {,nom_signal} : [mode] type_signal
{; [signal] nom_signal {,nom_signal} : [mode] type_signal} );
end [entity] nom_entit;
D.Giacona
32/46
opposite_3
inverse
b
a(0)
HA
s
co
y(0)
c(0)
x(0)
b
a(1)
HA
s
co
y(1)
c(1)
x(1)
b
a(2)
HA
s
co
y(2)
c(2)
x(2)
D.Giacona
33/46
Paramtre gnrique
entity opposite_n is
Valeur par dfaut
D.Giacona
34/46
out
buffer
inout
D.Giacona
35/46
In
Out
Buffer
In
Inout
In
Out
D.Giacona
36/46
5.1. Syntaxe
architecture nom_architecture of nom_entit is
{ dclaration_de_composant
| dclaration_de_constante
| dclaration_de_signal_interne
| dclaration_de_type
| dclaration_d'alias}
begin
{ instruction_concurrente_d'assignation_de_signal
| instruction_concurrente_d'instanciation_de_composant
| instruction_concurrente_de_processus
| instruction_de_gnration}
end [architecture] [nom_architecture];
D.Giacona
37/46
opposite_3
inverse
b
a(0)
HA
s
co
lsb
y(0)
c(0)
x(0)
b
a(1)
HA
s
co
y(1)
c(1)
x(1)
b
a(2)
HA
s
co
msb
y(2)
c(2)
x(2)
D.Giacona
38/46
begin
...
end behavioral ;
D.Giacona
39/46
Proprits
D.Giacona
5.3.2.
40/46
D.Giacona
41/46
D.Giacona
42/46
5.3.3.
43/46
D.Giacona
44/46
-- B3 (Description structurelle)
-- Instanciation de composant
B3 : composant_B3 port map (x, y,...);
end arch_systeme;
D.Giacona
5.3.4.
45/46
is
else
else
else
and
and
and
and
a)
b)
c)
d);
-- Style comportemental
architecture arch_mux of mux4_1 is
begin
process (s, a, b, c, d)
begin
case s is
when "00"
=> x <= a;
when "01"
=> x <= b;
when "10"
=> x <= c;
when others => x <= d;
end case;
end process;
end arch_mux;
D.Giacona
5.3.5.
46/46
b
a(0)
HA
s
co
y(0)
c(0)
x(0)
b
a(1)
HA
s
co
y(1)
c(1)
x(1)
b
a(2)
HA
s
co
y(2)
c(2)
x(2)
begin
a(0) <= x(0) xor inverse;
ha0 : ha port map (a(0),inverse,c(0),y(0));
haloop : for i in 1 to n-1 generate
a(i) <= x(i) xor inverse;
han : ha port map (a(i),c(i-1),c(i),y(i));
end generate;
end Behavioral;
D.Giacona