Académique Documents
Professionnel Documents
Culture Documents
VHDL
VHDL
N 1996
VHDL
Support de cours
N.Nolhier
LAAS/CNRS
7, avenue du Colonel Roche
31077 TOULOUSE Cedex
• INTRODUCTION
VHDL
1
N.N 1996
VHDL
VHSIC
Hardware
Description
Language
• Composant élémentaire
(porte logique)
• Circuits intégrés
(microprocesseur)
Niveau • Cartes
d'abstraction (unité centrale)
• Systèmes
(calculateur)
• Processus
(système de navigation)
2
N.N 1996
Pourquoi le VHDL ?
➠ pérennité du modèle
3
N.N 1996
Caractéristiques du VHDL
Avantages
• Complexe
Inconvénients
• Description complexe
• Tout n'est pas synthétisable
tests fonctionnels
Simulation tests temporels
Bibliothèque fondeur
structurelle
source VHDL
équations booléennes
Synthèse optimise place / temps
génère une net_list
rétro annotation
5
N.N 1996
architecture du modèle
• définitions des signaux internes
• blocs de descriptions
➥ comportemental
➥ flot de données
➥ structurel
6
N.N 1996
Les descriptions
Description comportementale
➠ algorithmes séquentiels
VHDL autorise :
➥ structures de boucle ( loop endloop, while)
➥ branchements (if then else, case end case)
➥ appel aux procédures et fonctions
7
N.N 1996
Description structurelle
• LA SEMANTIQUE DU LANGAGE
9
N.N 1996
10
N.N 1996
Les identifieurs
11
N.N 1996
Les commentaires
12
N.N 1996
Littéraux
• Valeurs décimales
12 0 1E6 Entiers
12.0 0.0 0.456 Réels
1.23E-12 1.0e+6 Réels avec exposant
• Notation basée
format : base#valeur#
base comprise entre 2 et 16
• Valeurs physiques
100 ps 3 ns 5v
Il faut toujours un espace entre la valeur et l'unité
13
N.N 1996
Littéraux (suite)
• Caractères
Notés entre apostrophes
• Chaines de caractères
Notés entre guillemets, minuscules et majuscules y sont significatives
• Chaines de bits
Utilisés pour affecter des signaux de type bit_vector
X"FFF" -- base hexadécimale, longeur 12 bits
B"1111_1111_1111" -- base binaire , longeur 12 bits
O"17" -- base octale, longeur 6 bits
14
N.N 1996
15
N.N 1996
• Types entiers
type integer is range -2_147_483_648 to 2_147_483_647; -- machine 32 bits
type Index is range ( 0 to 15);
• Types flottants
type real is range -lim_inf to +lim_sup; -- prédéfini
type mon_real is range ( 0.0 to 13.8);
• Types énumérés
type bit is ('0','1'); -- prédéfini
type boolean is (false,true); -- prédéfini
type feu_tricolore is (vert,orange,rouge,panne);
type LOGIC4 is ('X','0','1','Z');
16
N.N 1996
• Types physiques
Type volume is range integer'low to integer'high
Units
ml;
cl = 10 ml;
dl = 10 cl;
l = 10 dl;
gallon = 4546 ml;
End units;
Quand les objets ne sont pas initialisés, ils prennent la valeur la plus basse du type 17
N.N 1996
Les sous-types
20
N.N 1996
Types prédéfinis
21
N.N 1996
Les attributs
22
N.N 1996
23
N.N 1996
24
N.N 1996
25
N.N 1996
note1 := DO;
note2 := SI;
26
N.N 1996
A <= B + C; I <= J + K;
A <= B + real(J); I <= 5; J <=- 2;
K <= I/J; -- K = -2
K <= I MOD J; -- K = -1 . K reçoit le signe de J
K <= I REM J; -- K = 1 . K reçoit le signe de I
27
N.N 1996
La concaténation
28
N.N 1996
• 6 classes de priorité :
Priorité
AND OR NAND NOR XOR -- logique
= /= < <= > >= -- relationnel
+ - & -- addition
+ - -- signe
* / MOD REM -- mutltiplication
** ABS NOT -- divers
30
N.N 1996
10 ns 20 ns 30 ns 40 ns
S
true
S’stable false
true
S’stable(5 ns) false
S’delayed (5 ns)
S’event T F T F T
S’last_event 6 ns 20 ns
10 ns 5 ns active ➫ transaction
S’active T F T T T Fonctions
event ➫ transition
S’last_active 6 ns 10 ns
10 ns 5 ns
31
N.N 1996
Les agrégats
• notation permettant de spécifier la valeur d'objets de
type tableau ou article
• dans un agrégat les éléments sont spécifiés par
association positionelle, nommée ou mixte
32
N.N 1996
Instructions concurrentes
• Le VHDL est un langage concurrent ➠ le système à
modéliser peut être divisé en plusieurs blocs agissant en
parallèle
• L'instruction concurrente est exécutée quand un
évènement sur certains de ses signaux apparait
➠ Instanciation de composants
➠ Process
➠ Affectation de signaux
➠ Appel de procédure
➠ Assertion
➠ Bloc
➠ Génération
33
N.N 1996
Instanciation de composants
34
N.N 1996
Process
• Ne contient que des instructions séquentielles
• Un process "vit" toujours ➠ cyclique
• Doit être controlé par sa liste de sensibilité ou des
synchronisations internes (wait)
➥sinon bouclage
Les affectations
36
N.N 1996
37
N.N 1996
L'appel de procédures
38
N.N 1996
Les assertions
assert S /= 'X'
report " Le signal S est non_défini "
severity warning ;
39
N.N 1996
Les blocs
41
N.N 1996
L'instruction "generate"
➠ Affectation de variables
➠ Affectation séquentielles de signaux
➠ Instruction de synchronisation
➠ Instructions de contrôle
➠ Appels de procédure
➠ Assertion
➠ Null
44
N.N 1996
Exemple de process sequentiel
Compteur_par_3 begin
calcul : process
variable etat : integer := 0;
clk sortie
begin
wait until clk = '1';
etat := etat + 1;
if etat = 3 then
sortie <= '1' after 5 ns;
Entity compteur_par_3 is wait for 10 ns;
port ( clk : in bit ; sortie <= '0';
sortie : out bit ); etat := 0;
end compteur_par_3; end if;
end process calcul;
end sequence;
45
N.N 1996
ASSERT
Appel de procédure
Process Return
begin
.... Utilisé dans les sous-programmes pour
test_valeur (A,B); revenir à l'appelant.
....
end Process; return; -- cas d'une procédure
48
N.N 1996
• MODELISATION STRUCTURELLE
49
N.N 1996
REGISTRE à DECALAGE
50
N.N 1996
Description de l'entité
entity SN_95 is
port ( SERIAL : in bit;
D : in bit_vector (1 to 4) ;
MODE : in bit;
SHIFT : in bit;
LOAD : in bit;
Q : inout bit_vector (1 to 4 )) ;
end SN_95
51
N.N 1996
52
N.N 1996
Déclaration des composants
(suite)
53
N.N 1996
54
N.N 1996
Description de l'architecture
architecture structurelle of SN_95 is
use WORK.SN_COMPONENTS.all;
begin
G1 : INVport map (MODE,W1);
G2 : INVport map (W1,W2);
G3 : AND2 port map (SHIFT,W1,W3);
G4 : AND2 port map (LOAD,MODE,W4);
G5 : OR2 port map (W3,W4,CK);
55
N.N 1996
end generate
end structurelle;
56
N.N 1996
Configuration du système
58
N.N 1996
Circulation de données
Contrôle de flot
59
N.N 1996
Affectation sur condition (exemple)
A
S S <= A after 5 ns when SEL = '1' else
B B after 4 ns;
MUX
• Buffer 3 états
I S with E select
S <= I when '1',
'Z' when '0',
E 'X' when others;
• ALU
A with OP select
B RES <= A and B when "0000",
RES A or B when "0001",
OP not (A and B) when "0010",
...........
A xor B when "1111";
Affectation de signal
V1 V2 V3 V4
Signal Valeur courante
t1 t2 t3 t4
62
N.N 1996
Driver et filtrage
MODELISATION COMPORTEMENTALE
64
N.N 1996
Description comportementale
• Modélisation algorithmique
• Pas de relation avec l'implantation du système
• Utilise un langage séquentiel, structuré et de haut
niveau
• On retrouve cette description dans 2 unités :
» les process
» les sous-programmes
65
N.N 1996
Exemples de process
ADD(5:0)
RAM 64*16
RW
DATA(15:0)
CS
ADD
DATA
•Lecture de la mémoire RW
CS
ADD
DATA
25 ns
66
N.N 1996
-- description de l'entite
entity Ram is
Port ( ADD : in std_logic_vector (5 downto 0); -- bus d'adresse
RW: in Bit;
CS: in bit;
DATA: inout std_logic_vector (15 downto 0));
end Ram;
67
N.N 1996
Fonctions et procédures
• Les procédures admettent des paramètres d'entrée et de sortie
» calcul_resul (a,b,20);
• Les fonctions admettent des paramètres d'entrée et retourne
une seule valeur
» data := autre_data and plus_petit( a,b);
• Les sous-programme sont définis en deux temps
– la partie déclarative ( elle est optionelle et n'est utilisée que dans les packages)
» procedure nom_procédure ( liste_paramètres);
» function nom_function (liste_paramètres) return type_resultat;
– le corps du sous-programme
procedure nom_procédure ( liste_paramètres) is
( ou function nom_function (liste_paramètres) return type_resultat is )
{ déclarations locales}
begin
............... -- return valeur (cas de la fonction);
end;
68
N.N 1996
Fonctions et procédures (suite)
69
N.N 1996
Fonctions et procédures
(exemples)
70
N.N 1996
Les surcharges
71
N.N 1996
Exemples de surcharge
72
N.N 1996
Les signaux à sources
multiples
73
N.N 1996
Exemple de fonction de
résolution
Package fonction_de_resolution is
function et_resolu ( sources : bit_vector)
return bit; use work.fonction_de_resolution.all;
subtype bit_resolu is et_resolu bit; entity test is
end fonction_de_resolution; port (a,b,c,d : in bit_resolu;
e : out bit_resolu);
Package body fonction_de_resolution is end test;
function et_resolu ( sources : bit_vector)
return bit is architecture nico of test is
begin begin
for I in sources'range loop
if sources(i) = '0' then return '0' e <= a or b after 15 ns;
end if; e <= c and d after 15 ns;
end loop; e <= a or d after 20 ns;
return '1';
end et_resolu; end nico;
end fonction_de_resolution;
74
N.N 1996
Les packages
75
N.N 1996
Exemple de packages
Package geometrie is
use work.geometrie.pi;
constant pi :real := 3.141592654; use work.geometrie.aire_cercle;
procedure aire_cercle ( a: in real ; b: out real);
..........
end geometrie; calc: process(h)
variable aire, perim :real ;
begin
package body geometrie is .....
aire_cercle (rayon,aire);
procedure aire_cercle ( a: in real ; b: out real) is perim := 2*pi*rayon;
begin .....
b := pi * a**2 ; end process calc;
end; .......
end geometrie;
76