Вы находитесь на странице: 1из 130

VHDL

1
Badreddine Bouzouita
Introduction
Il y a quelques annes la ralisation dun montage en lectronique
numrique impliquait lutilisation dun nombre important de circuits
intgrs logiques. intgrs logiques.
Ceci avait pour consquences un prix de revient lev
une mise en uvre complexe
un circuit imprim de taille importante.
2
Badreddine Bouzouita
Introduction
Le dveloppement des mmoires utilises en informatique fut
lorigine des premiers circuits logiques programmables (PLD :
programmable logic device). programmable logic device).
Ce type de produit peut intgrer dans un seul circuit plusieurs
fonctions logiques programmables par lutilisateur. Sa mise en uvre
se fait trs facilement laide dun programmateur, dun micro-
ordinateur et dun logiciel adapt.
3
Badreddine Bouzouita
Connexions programmables
Introduction
Deux formes canoniques pour les quations logiques :
-Somme de produits : S=a.b+ c.d
-Produits de somme : S=(z+f).(e +x)
Connexions programmables
ET cabl
4
OU cabl
Reprsentation
standard
Constitution dun
rseau programmable
Badreddine Bouzouita
Connexions programmables
Introduction
Exemple : Reprsentation d'un Ou Exclusif.
Cette quation se reprsente de la faon suivante:
1 2 1 2 1 2
. . I I I I I I = +
5
Badreddine Bouzouita
Introduction
Les composants programmables sont apparus dans lordre suivant : PLD
(programmable logic device), CPLD (complex PLD) et FPGA (Field
Programmable Gate Array). Lintrt de ces circuits rside dans le fait qu'il
est possible dy implanter n'importe quelle fonction logique.
La plupart de ces circuits sont programms partir d'un simple ordinateur
type PC directement sur la carte o ils vont tre utiliss. type PC directement sur la carte o ils vont tre utiliss.
En cas d'erreur, ils sont reprogrammables lectriquement sans avoir
extraire le composant de son environnement. Il est alors possible de dcrire
les circuits sans se soucier des dtails de l'implmentation.
Pour faciliter la programmation de ces circuits, on a invent des langages de
programmation volus tel que le VHDL (VHSIC Hardware Description
Langage avec VHSIC qui signifie : Very High Speed Integrated Circuits. (Circuit
intgr trs haute vitesse)).
6
Badreddine Bouzouita
Introduction
VHDL est un langage de description matriel destin reprsenter le
comportement ainsi que l'architecture dun systme lectronique
numrique.
L'intrt d'une telle description rside dans : L'intrt d'une telle description rside dans :
son caractre excutable : une spcification dcrite en VHDL peut
tre vrifie par simulation, avant que la conception dtaille ne soit
termine.
En outre, les outils de conception assiste par ordinateur permettant
de passer directement d'une description fonctionnelle en VHDL un
schma en porte logique ont rvolutionn les mthodes de
conception des circuits numriques, ASIC ou FPGA.
7
Badreddine Bouzouita
Historique
Introduction
Le langage VHDL a t command par le Dpartement de la Dfense des tats-Unis dans
le cadre de l'initiative VHSIC. Dans un effort de rationalisation, le VHDL reprend la mme
syntaxe que celle utilise par le langage Ada (ce dernier tant aussi dvelopp par le
dpartement de la dfense).
La version initiale de VHDL, standard IEEE 1076-1987, incluait un large ventail de types
de donnes, numriques (entiers, rels), logiques (bits, boolens), caractres, temps,
plus les tableaux de bits et chanes de caractres.
L'un des principaux problmes concernait le type bit. Celui-ci ne pouvant prendre que 2
valeurs (0, 1), il tait impossible de reprsenter les signaux de valeur inconnue ou
encore les signaux en haute impdance, ainsi que la force d'un signal (faible, forte ou encore les signaux en haute impdance, ainsi que la force d'un signal (faible, forte ou
nulle). La norme IEEE 1164 dfinit le type std_logic avec 9 tats possibles. Ceci a t
adopt dans le VHDL-93 (seconde version de la norme IEEE 1076).
Afin de rpondre aux diffrents problmes de l'lectronique, la norme VHDL a d
voluer. L'IEEE Design Automation Standards Committee (DASC) a cr la norme IEEE
1076.1 (1999), ou VHDL-AMS (VHDL-Analog and Mixed Systems).
Cette nouvelle norme est une extension de la norme IEEE 1076-1987 dj existante. Elle
permet la description et la simulation de circuits analogiques, numriques, et mixtes
(analogique et numrique). Pour cela elle utilise en complment des instructions
squentielles et concurrentes un nouveau type d'instructions, dites simultanes , et
qui ont valeur d'quations. En pratique, de plus en plus de simulateurs implmentent
cette extension. Par contre, les outils de synthse analogique associs n'en sont encore
qu' leurs balbutiements3.
8
CONVENTIONS LEXICALES
Casse
HDL est insensible la casse. Un mot en majuscule est identique un mot en minuscule.
Il est cependant conseill d'avoir des rgles d'criture cohrentes. Par exemple, les mots
rservs du langage peuvent tre en majuscule et les autres mots en minuscule.
Commentaires
Les commentaires doivent tre inclus dans le code, pour augmenter la lisibilit et la
documentation. Ils commencent par 2 tirets (--) en se terminent en fin de ligne
Identificateurs
Ce sont les noms de variables, de signaux, de fonctions, ...
Ils ne peuvent contenir que des lettres, des chiffres et le "underscore" _ .
Ils doivent commencer par une lettre.
Ils ne peuvent pas contenir d'espace.
Les mots-clefs du langage ne peuvent pas tre utiliss comme identificateurs.
Deux traits bas conscutifs ne sont pas admis et il en est de mme dun trait bas
au dbut ou la fin didentificateur.
9
Badreddine Bouzouita
Structure dune description VHDL simple
10
Badreddine Bouzouita
Structure dune description VHDL simple
11
Badreddine Bouzouita
DCLARATION DES BIBLIOTHQUES
La premire chose faire est de dfinir les librairies qui seront
utilises dans le code.
Library IEEE ; -- cest la librairie principale
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
Le mot cl use , qui indique quel package de la librairie nous allons Le mot cl use , qui indique quel package de la librairie nous allons
utiliser. Aprs cela, le nom du package. Enfin, le .all signifie que lon
souhaite utiliser tout ce qui se trouve dans ce package. Lorsque le
nom de la librairie est prcd de IEEE., cela signifie que cest une
librairie qui est dfinie dans la norme IEEE (Institut of Electrical and
Electronics Engineers), et que lon retrouvera donc normalement dans
tout logiciel. A linverse, il faut se mfier des librairies qui ne sont pas
IEEE, car elles sont en gnral spcifiques un logiciel.
12
Badreddine Bouzouita
Bibliothque std_logic_1164
DCLARATION DES BIBLIOTHQUES
La bibliothque std_logic_1164 nous permet de dclarer les types suivants :
Bit : 0 ou 1
Boolean : FALSE ou TRUE
Integer : entier appartenant lintervalle -2
31
-1 2
31
-1
Std_ulogic : les tats de ce type sont :
U,tat non initialis (utilis en simulation).
X, tat inconnu fort : utilis en simulation en cas de conflit entre les deux
niveaux 0 et 1 pour un signal. niveaux 0 et 1 pour un signal.
0, tat logique 0 fort.
1, tat logique 1 fort
Z, tat haut impdance.
W, tat inconnu faible. Utilis en simulation.
L, tat logique 0 faible.
H, tat logique 1 faible.
-, tat indiffrent : permet de spcifier que ltat du signa est indiffrent.
Exemple dans le cas dune combinaison inutilise dune fonction
combinatoire. Le synthtiseur au choix dutiliser ltat 1 ou 0 afin de
simplifier la logique gnre.
13
Badreddine Bouzouita
Bibliothque std_logic_1164
DCLARATION DES BIBLIOTHQUES
Lextension _Vector offre la possibilit de dcrire un ensemble de
signaux sous la forme dun vecteur.
Exemple de dclaration dun vecteur de 3bits :
Signal Bus_3_Bits : Std_Logic_Vector(2 downto 0);
Le nombre de bits qui compose le vecteur est spcifi dans la taille
vecteur (2 donwto 0). Nous donnerons toujours la taille en vecteur (2 donwto 0). Nous donnerons toujours la taille en
descendant (downto). Cela correspond la reprsentation normalise
des nombres en binaire. Le bit de poids fort (MSB, Most significant
Bit) est toujours gauche. Inversement, le bit de poids faible (LSB,
Least Significant Bit) est plac droite.
14
Badreddine Bouzouita
ENTITE
C'est la vue externe du systme, avec une dclaration de ses ports
(canaux de communication entre/sortie, pour le transport des
signaux).
ENTITY name IS
GENERIC(parametres_generiques : type := valeur_par_dfaut);
PORT(port_name1,port_name2 : MODE type; PORT(port_name1,port_name2 : MODE type;
port_name : MODE type;
:
port_name : MODE type);
END name;
avec MODE ={IN, OUT, INOUT, BUFFER}.
15
ENTITE
16
ENTITE
Exemple :
17
Badreddine Bouzouita
Les ports sont toujours des signaux, avec un type et un mode associs. Le
mode indique la direction de l'information et si le port peut tre lu
l'intrieur de l'entit.
Mode IN : Le signal peut tre lu l'intrieur
de l'entit (mais ne peut pas tre modifi).
Mode OUT : Le signal ne peut pas tre lu
ENTITE
Mode OUT : Le signal ne peut pas tre lu
l'intrieur de l'entit.
Mode INOUT : Le signal peut tre lu et
modifi l'intrieur de l'entit
Mode BUFFER : Pour les signaux sortants qui peuvent tre aussi
utiliss lintrieur de lentit
18
Badreddine Bouzouita
ARCHITECTURE
L'architecture est la description interne du circuit. Elle est toujours
associe une entit :
ARCHITECTURE nom_arch OF nom_entity IS
-- partie dclaration
BEGIN BEGIN
-- instructions concurrentes
END nom_arch ;
Remarque : Le nom de larchitecture nom_arch peut tre le mme
pour diffrents entits.
19
Badreddine Bouzouita
ARCHITECTURE
Une mme entit peut avoir plusieurs architectures, dont les
principaux styles sont:
Structurel : un assemblage de sous-blocs, similaire la liste Structurel : un assemblage de sous-blocs, similaire la liste
d'interconnexions d'un schma logique (netlist).
Data flow (flot de donnes) : instructions concurrentes.
Comportemental : instructions squentielles.
Mixte : mlange de trois styles.
20
Badreddine Bouzouita
Description comportementale
ARCHITECTURE
La description comportementale se fait laide dun processus
(PROCESS). Les instructions lintrieur de celui-ci sexcutent de
manire squentielle.
Pour dcrire un programme sous forme comportementale dun
systme combinatoire, la structure est la suivante :
21
Description comportementale
ARCHITECTURE
22
Badreddine Bouzouita
Description comportementale
ARCHITECTURE
Dans chacun des cas, les valeurs de sorties appropries sont aprs un
dlai. Chaque fois qu'une des valeurs se trouvant entre parenthses
aprs le mot-cl process est modifie, le processus est activ et
toutes les instructions sont excutes squentiellement.
23
Badreddine Bouzouita
Description par flot de donnes
ARCHITECTURE
Ce type description se droule de manire concurrente. Tous les
signaux sont assigns en mme temps. Il suffit de placer la droite
dune quation ce que lon veut assigner au signal qui se trouve la
gauche de lquation.
24
Badreddine Bouzouita
Description par flot de donnes
ARCHITECTURE
Exemple Exemple :: Comparateur
25
Badreddine Bouzouita
Description par flot de donnes
ARCHITECTURE
Exemple Exemple :: demi-additionneur 1 bit
26
Badreddine Bouzouita
Description par flot de donnes
ARCHITECTURE
Exemple Exemple :: Bascule RS asynchrone
27
Badreddine Bouzouita
Description par flot de donnes
ARCHITECTURE
Exemple Exemple :: Multiplexeur
28
Badreddine Bouzouita
Description structurelle
ARCHITECTURE
Cette description correspond un assemblage de modules. Chacun des modules
est dcrit de manire comportementale ou flot de donnes et fait partie ensuite
dune bibliothque de modules. Ils sont alors utiliss de la mme manire que la
structure dun schma.
29
Description structurelle
ARCHITECTURE
Entity Entity
30
Description structurelle
ARCHITECTURE
Entity
31
Description structurelle
ARCHITECTURE
32
Description structurelle
ARCHITECTURE
Un additionneur 4 bits est un bon exemple de ce type de description;.
Pour ce faire, le module dun additionneur 1 bit sera utilis.
33
Badreddine Bouzouita
Description structurelle
ARCHITECTURE
34
Badreddine Bouzouita
Utilisation dun composant
ARCHITECTURE
Pour utiliser un composant (component), il doit tre dclar. Sa
dclaration est similaire la dclaration d'une entit : c'est
simplement la liste des ports de sa bote noire
Pour pouvoir simuler ou synthtiser un composant, il doit exister
ailleurs une paire entit-architecture qui le dcrive.
35
Badreddine Bouzouita
Remarque
Le nom du composant doit tre le mme que celui de l'entit
correspondante.
Les noms des signaux du composant doivent tre identiques aux
noms des signaux de l'entit correspondante.
Utilisation dun composant
ARCHITECTURE
Lassociation par position consiste mettre les arguments rels
dans lordre des arguments formels. Le premier sera associ au
premier, le second au second, etc. Exemple :
EX : port map (S1,S2,S3);
Lassociation par nom consiste crire largument et le rel pour
chaque item : argument_formel => objet_rel, ce qui libre de la chaque item : argument_formel => objet_rel, ce qui libre de la
contrainte dordre. Cette forme est beaucoup plus claire pour le
lecteur. Exemple :
Ex. : port map (X=>S3, Y=>S1, Z=>S2) ;
36
Badreddine Bouzouita
Utilisation dun composant
ARCHITECTURE
Laisser ouvert : Les signaux de mode out peuvent tre ignors du
simulateur. Il suffit de leur associer le mot cl OPEN. Exemple :
EX : port map (S1,S2,S3=>OPEN);
Dfaut : On peut donner une valeur par dfaut lors de la dclaration
du port de mode IN. Lexistence de cette valeur par dfaut permettra
domettre ce port dans la liste dassociation. Exemple : domettre ce port dans la liste dassociation. Exemple :
Component c is
Port (A, B : bit := 0 ; S : out Bit);
End component
Ex. : port map (X=>S3, Y=>S1, Z=>S2) ;
37
Badreddine Bouzouita
Utilisation dun composant : configuration
ARCHITECTURE
La CONFIGURATION permet d'associer une instance de composant
un couple entit/architecture. La configuration est une unit de
compilation part, tout comme l'entit et l'architecture. Pour la
plupart des outils , la configuration est optionnelle.
Syntaxe :
CONFIGURATION configuration_name OF enitty_name IS CONFIGURATION configuration_name OF enitty_name IS
FOR architecture_name
. Configuration du composant
END FOR;
END configuration_name;
38
Badreddine Bouzouita
Utilisation dun composant : configuration
ARCHITECTURE
Instanciation directe : Dans ce cas , il n'est pas ncessaire de
dclarer de composant et l'instanciation se fait en spcifiant le
couple entit/architecture. Cette mthode ne ncessite pas de
configuration. Elle est la plus simple mais peut tre aussi moins
adapte aux gros circuits.
Exemple :
39
Badreddine Bouzouita
Utilisation dun composant : configuration
ARCHITECTURE
Configuration immdiate : Les associations entit/architecture des
composants peuvent tre dclars directement dans l'architecture
avant le corps de l'architecture (begin). Elle est rserve aux petits
circuits pour des essais de diffrentes architectures.
Exemple :
40
Badreddine Bouzouita
Utilisation dun composant : configuration
ARCHITECTURE
Configuration plat : Elle peut tre unique et indique les liens
entit/architecture explicitement avec la clause use
entity(architecture). Elle est utilise pour des circuits simples car il
n'est pas ncessaire d'avoir des fichiers de configuration au niveau
hirarchique infrieur.
Exemple :
41
Badreddine Bouzouita
Utilisation dun composant : configuration
ARCHITECTURE
Configuration hirarchique : Pour chaque entit, une configuration
est cre. Dans chaque configuration, la clause use configuration est
utilise pour les instances de composant de niveau infrieur.
Exemple :
La configuration est vide car l'entit
AND_2 n'a pas d'instances de composant.
La configuration existe toutefois car tous
42
Badreddine Bouzouita
La configuration existe toutefois car tous
les composants utiliss doivent avoir une
configuration dans cette mthode.
Le composant AND2 est instanci dans
AND_3. A chaque instance la configuration
CF_AND2 est utilise.
DFINITION DES PARAMTRES GNRIQUES (GENERIC)
Un argument gnrique est vu comme une constante nomme dans
le modle qui sen sert.
Exemple de dclaration :
generic (A, B: integer:=8; c : bit);
On voit quon y dclare les noms des arguments, leur type et leur
ventuelle valeur par dfaut prendre si aucune autre nest donne. ventuelle valeur par dfaut prendre si aucune autre nest donne.
Aussitt dclare, cette constante peut tre utilise et en particulier
dans la dclaration des ports qui suit immdiatement :
generic (N:integer);
port (S : bit_vector(N-1 downto 0));
On fournit les valeurs par la clause generic map, qui apparat dans les
instanciations de composants et dans les diffrentes configurations.
43
Badreddine Bouzouita
Exemple :
DFINITION DES PARAMTRES GNRIQUES (GENERIC)
entity And2 is
generic (delay : DELAY_LENGTH);
port (x, y : in BIT; z: out BIT);
end And2;
architecture ex2 of And2 is
begin begin
z <= x and y after delay;
end ex2;
-- instanciation du composant
g2: entity WORK.And2(ex2) generic map (5 NS)
port map (p, b, q);
g2: entity WORK.And2(ex2) generic map (delay => 5 NS)
port map (z => q, x =>p, y =>b);
44
Badreddine Bouzouita
Exemple :
DFINITION DES PARAMTRES GNRIQUES (GENERIC)
Si une valeur par dfaut est prcise :
generic (delay : DELAY_LENGTH:= 5 ns);
et un composant est instanci comme suit :
g2: entity WORK.And2(ex2)
port map (p, b, q);
alors, le composant g2 prend la valeur 5 Ns par dfaut pour delay. alors, le composant g2 prend la valeur 5 Ns par dfaut pour delay.
Enfin, la valeur par dfaut d'un gnrique sera utilise si le mot
rserv open est utilis :
g3: entity WORK.And2(ex2) generic map (open)
port map (z => q, x =>p, y =>b);
45
Badreddine Bouzouita
Les classes dobjets
Le VHDL dfinit cinq classes dobjets :
Les constantes.
Les variables.
Les signaux.
Les pointeurs.
Les fichiers. Les fichiers.
46
Badreddine Bouzouita
Les constantes
Les classes dobjets
Les constantes permettent de paramtrer des valeurs non modifiables
lors de lexcution de la description. Elles permettent damliorer la
lisibilit de la description.
Constant periode : time := 100ns;
Constant faux : std_logic := O;
Constant Vect_Nul : Std_Logic_Vector(3 downto 0):="0000"; Constant Vect_Nul : Std_Logic_Vector(3 downto 0):="0000";
47
Badreddine Bouzouita
Les Variables
Les classes dobjets
La variable est limage dun objet auquel on peut affecter, tout
moment, la valeur que lon dsire.
Il est possible, mais non obligatoire, dinitialiser les variables au
moment de leur dclaration.
VARIABLE phase : real := 124.0;
VARIABLE clock_period : time := 20ns; VARIABLE clock_period : time := 20ns;
VARIABLE var1 : integer := function_d_init();
Laffectation et la modification des variables se font par
lintermdiaire de :=
Nom_variable := expression ;
Les variables sont dynamiques et ne sont utilisables que dans un
contexte squentiel, cest--dire lintrieur des process.
48
Badreddine Bouzouita
Les Variables
Les classes dobjets
Exemple :
La valeur de la variable A est stocke dans la variable B. Cest une
opration instantane, par la suite aucun lien nexiste entre ces 2
variables.
49
Badreddine Bouzouita
Le signal
Les classes dobjets
Le signal, dans le langage VHDL, est limage dune entre ou dune
sortie dun composant logique. Laffectation de ce dernier tablit un
lien dfinitif entre un ou plusieurs autres signaux ; la modification a
lieu la prochaine itration de la simulation (retard delta).
Laffectation dun signal se fait laide de loprateur : <=
Nom_Signal <= expression ;
Lexemple ci-dessus modlise laffectation du signal de sortie dune
porte OU logique.
50
Badreddine Bouzouita
Le signal
Les classes dobjets
Affectation concurrente : offre plus de souplesse que le simple transfert
de la valeur dune expression un signal. Il est possible dy inclure des tests
par une affectation conditionnelle :
Plusout <= 1 when etat = plus else 0;
Affectation slective :
with sel4 select
sort <= e0 when zero, sort <= e0 when zero,
e1 when un ,
e2 when deux ,
e3 when trois,
0 when others ;
Le mot rserv others regroupe toutes les combinaisons non testes du
signal de slection
51
Badreddine Bouzouita
Attributs des signaux
Les classes dobjets
Ils correspondent lextraction de proprits des signaux laide de
suffixes. Leurs valeurs dpendent du type du signal sur lequel porte le
suffixe :
Rsultat boolen sur des signaux :
event : retourne true si la valeur du signal varie
stable : retourne true si la valeur du signal na pas vari
quiet : retourne true si le signal na aucune source (tat quiet : retourne true si le signal na aucune source (tat
isol)
Rsultat entier sur les tableaux, les vecteurs :
left, right : bornes gauches et droites dun tableau, dun
vecteur
length : taille dun tableau, dun vecteur
range : couple des bornes dun tableau, dun vecteur
52
Badreddine Bouzouita
Attributs des signaux
Les classes dobjets
Exemple dutilisation :
A <= Z when CLKevent;
Z est brivement connect A lors de chaque variation de CLK
(pratiquement, cette connexion dure t)
Temps Temps de de transit transit :: le temps de transit dune expression sera indiqu Temps Temps de de transit transit :: le temps de transit dune expression sera indiqu
par une clause after. Il reprsente celui du circuit combinatoire
reprsent par lexpression.
RES <= A xor B after 10ns;
Le temps de transit sera donn en hr, min, s, ms, us, ns, ps. Il sera de
t si rien nest mentionn
53
Badreddine Bouzouita
Notion de dlai
Les classes dobjets
VHDL permet de spcifier des dlais dans les affectations.
Il existe deux types d'affectations avec dlai :
affectation avec dlai inertiel : x <= 3 after 2 ns; ou plus
explicitement x <= inertial 3 after 2 ns;
affectation avec dlai de transport : x = transport 3 after 2 ns;
Dans le cas du mode inertiel (par dfaut), les transitions prsentes en
entre et plus courtes que le temps de propagation ne sont pas
transmises.
Contrairement au mode inertiel, toutes les transitions en entre sont
transmises en sortie avec un dcalage gal au temps de propagation.
54
Badreddine Bouzouita
Notion de dlai
Les classes dobjets
55
Badreddine Bouzouita
56
Les types Bit et Bit_Vector
Le type bit est le type standart en VHDL pour un signal. Le bit est
dfinit dune telle faon quil peut uniquement prendre comme valeur
2 tats logiques :
0, tat logique forc 0.
1, tat logique forc 1.
Lextension _Vector indique un lment reprsentant un vecteur Lextension _Vector indique un lment reprsentant un vecteur
compos dun ensemble de bits. Ce type correspond un composite
de type tableau (arry)
Le type Bit nest jamais utilis en pratique. Ils ne permettent pas de
reprsenter tous les tats rels dun signal. Nous devons avoir, en plus
des tats 0 et1, la possibilit de spcifier ltat haut impdance,
ltat dfini (dont carry). De plus en simulation, nous avons besoin
dun tat non pour indiquer des conflits, un signal non initialis,
57
Badreddine Bouzouita
Les types Std_Logic et Std_Logic_Vector
Le type Std_Logic est utilis dans la pratique dans lindustrie. Il comprend tous les tats
ncessaires pour modliser le comportement des systmes numriques.
Lors de lutilisation du type Std_Logic, il est ncessaire dcrire au dbut de la description
VHDL les lignes suivantes :
Library IEEE;
Use IEEE.Std_Logic_1164.all;
Voici la liste des tats du type Std_Logic :
U,tat non initialis (utilis en simulation).
X, tat inconnu fort : utilis en simulation en cas de conflit entre les deux niveaux
0 et 1 pour un signal. 0 et 1 pour un signal.
0, tat logique 0 fort.
1, tat logique 1 fort
Z, tat haut impdance.
W, tat inconnu faible. Utilis en simulation.
L, tat logique 0 faible.
H, tat logique 1 faible.
-, tat indiffrent : permet de spcifier que ltat du signa est indiffrent. Exemple
dans le cas dune combinaison inutilise dune fonction combinatoire. Le
synthtiseur au choix dutiliser ltat 1 ou 0 afin de simplifier la logique gnre.
58
Badreddine Bouzouita
Le sous type vecteur
VHDL offre la possibilit de dcrire un ensemble de signaux sous la
forme dun vecteur, il sagit du type composite (array). Le paquetage
Std_logic1164 dfinit celui-ci de la manire suivante pour les deux
types Std_ulogic et Std_Logic :
Type Std_uLogic_Vector is array (Nature range <>) of Std_uLogic;
Type Std_Logic_Vector is array (Nature range <>) of Std_Logic; Type Std_Logic_Vector is array (Nature range <>) of Std_Logic;
Exemple de dclaration dun vecteur de 3bits :
Signal Bus_3_Bits : Std_Logic_Vector(2 downto 0);
Le nombre de bits qui compose le vecteur est spcifi dans la taille
vecteur (2 donwto 0). Nous donnerons toujours la taille en
descendant (downto). Cela correspond la reprsentation normalise
des nombres en binaire. Le bit de poids fort (MSB, Most significant
Bit) est toujours gauche. Inversement, le bit de poids faible (LSB,
Least Significant Bit) est plac droite.
59
Badreddine Bouzouita
Les oprateurs logiques
Les oprateurs
Les oprateurs logiques sont dfinis pour les boolan (true, false), Bit
(0, 1), Bit_Vector, Std_logic et Std_Logic_Vectror.
Oprateur Description Rsultat
And ET logique Mme type
Or OU logique Mme type
60
Or OU logique Mme type
Nand Non-ET Logique Mme type
Nor Non-Ou logique Mme type
Xor OU exclusif logique Mme type
Xnor Non-OU exclusif
logique
Mme type
Badreddine Bouzouita
Les oprateurs relationnels
Les oprateurs
Les oprateurs relationnels sont dfinis pour tout type scalaire et les
tableaux de scalaires. Mais les deux oprandes doivent tre de mme
type.
Oprateur Description Rsultat
= galit Type boolen
61
/= Ingalit Type boolen
< Infrieur Type boolen
<= Infrieur ou gal Type boolen
> Suprieur Type boolen
>= Suprieur ou gal Type boolen
Badreddine Bouzouita
Les oprateurs de dcalage et de rotation
Les oprateurs
Les oprateurs de dcalages et de rotation travaillent exclusivement
sur des tableaux une dimension (vecteurs) de type BIT ou
BOOLEAN.
Oprateur Description
sll
Dcalage logique gauche : llment de gauche est perdu, une
autre valeur de remplissage arrive droite (0 pour les tableaux
62
autre valeur de remplissage arrive droite (0 pour les tableaux
de type BIT et FALSE pour ceux boolens
srl
Dcalage logique droite
sla
Dcalage arithmtique gauche : llment de droite est dcal
et dupliqu.
sra
Dcalage arithmtique droite : llment de gauche est dcal
et dupliqu.
rol
Rotation gauche
ror
Rotation droite
Badreddine Bouzouita
Les oprateurs de dcalage et de rotation
Les oprateurs
Exemple :
63
Badreddine Bouzouita
Les oprateurs arithmtiques
Les oprateurs
Les oprateurs arithmtiques sont dfinis pour tout type numriques.
Oprateur Description
+ Addition
- Soustraction
Pour pouvoir utiliser ces oprateurs, il faut rajouter les bibliothques
suivantes au dbut du fichier VHDL :
Use ieee.numeric_std.all;
Use ieee.std_logic_arth.all;
64
* Multiplication
/ Division
Badreddine Bouzouita
Les oprateurs de signe
Les oprateurs
Les oprateurs de signe sont dfinis pour tout type numriques.
Oprateur Description Rsultat
+ Signe positif Mme rsultat
65
- Signe ngatif Mme rsultat
Badreddine Bouzouita
Les oprateurs multiplicatifs
Les oprateurs
Les oprateurs multiplicatifs sont dfinis pour tout type numrique
suivant : entier, sign et non sign, flottants.
Oprateur Description Rsultat
* Multiplication Dpend
66
/ Division Dpend
mod Modulo, sur entiers entier
rem Reste, sur entiers entier
Badreddine Bouzouita
Les instructions concurrentes
Dans un circuit, toutes les portes fonctionnement simultanment. Le
langage VHDL dispose dinstructions concurrentes qui vont nous
permettre de dcrire le comportement dun circuit. Lordre dans
lequel ces processus apparaissent dans la description est indiffrent.
Exemple :
67
D<= not C;
est identique
C<= A and B;
C<= A and B; D<= not C;
Badreddine Bouzouita
Les instructions concurrentes
Mais alors que se passe-t-il si la structure prsente des rebouclages
avec ses sorties comme la bascule RS, par exemple ?
En fait, le simulateur regarde en permanence si le changement de
valeur prvu d'un signal ne va pas entraner celui d'un ou plusieurs
autres signaux et ragit en consquence. Dans le cas de la bascule RS,
Exemple :
68
Badreddine Bouzouita
Les instructions concurrentes
si le changement d'tat de l'entre A entrane celui de la sortie Q, alors le si le changement d'tat de l'entre A entrane celui de la sortie Q, alors le
simulateur va calculer l'tat futur de la sortie /Q et, si cela est ncessaire,
calculer nouveau l'tat de Q, puis celui de /Q, etc., jusqu' arriver une
situation stable. On peut rsumer le fonctionnement du simulateur de la
faon suivante :
A chaque changement d'tat d'un ou de plusieurs signaux d'entres, le
simulateur calcule l'tat des signaux de sorties en tenant compte des
rebouclages jusqu' aboutir une situation stable. C'est ce moment, et
seulement ce moment, que les valeurs des signaux de sorties sont
ractualises
69
Badreddine Bouzouita
Les instructions concurrentes
Le langage VHDL dispose de 5 instructions concurrentes, soit :
Laffectation simple <=
Laffectation conditionnelle whenelse Laffectation conditionnelle whenelse
Laffectation slectionne withselect
Linstanciation de composant
Linstruction process. Celle-ci dfinit une zone pour les
instructions squentielles
70
Badreddine Bouzouita
Laffectation simple
Les instructions concurrentes
La syntaxe gnrique dune affectation simple est la suivante:
Signal_1 <= Signal_2 fonction_logique Signal3;
Lassignation dun signal de sortie dune porte logique NAND est un
exemple concret dune affectation simple :
71
Architecture Logique of Nand2 is
Begin
Y<= A nand B;
End Logique
Badreddine Bouzouita
Laffectation simple
Les instructions concurrentes
Laffectation dun tat logique un signal seffectue laide des
simples guillemets ('tat_logique') :
- '1' ou 'H' pour un niveau haut avec un signal de 1 bit.
- '0' ou 'L' pour un niveau bas avec un signal de 1 bit.
- 'Z' pour un tat haut impdance avec un signal de 1 bit.
- '-' pour un tat quelconque, cest dire 0 ou 1. Cette
valeur est trs utilise avec les instructions : when else et valeur est trs utilise avec les instructions : when else et
with . Select .
Pour les signaux composs de plusieurs bits on utilise les guillemets
" " (exemple : Vecteur_3_Bits <="001";).
Les bases numriques utilises pour les bus peuvent tre :
- BINAIRE, exemple : BUS <= "1001" ; -- BUS = 9 en dcimal
- HEXA, exemple : BUS <= X"9" ; -- BUS = 9 en dcimal
- OCTAL, exemple : BUS <= O"11" ; -- BUS = 9 en dcimal
72
Badreddine Bouzouita
Les oprateurs de concatnation : &
Les oprateurs
Cet oprateur permet de joindre des signaux entre eux.
Exemple :
-- Soit A et B de type 3bits et S1 de type 8 bits
--A= "001" et B="110"
S1<= A & B & "01";
73
Badreddine Bouzouita
Laffectation simple
Les instructions concurrentes
Remarque
La base dcimale ne peut pas tre utilise lors de laffectation
de signaux. On peut seulement lutiliser avec certains
oprateurs, comme + et pour raliser des compteurs (voir le
74
oprateurs, comme + et pour raliser des compteurs (voir le
chapitre sur les compteurs).
Badreddine Bouzouita
Laffectation conditionnelle
Les instructions concurrentes
La syntaxe gnrique dune affectation conditionnelle est la suivante:
Signal_S <= Signal_1 when Condition_1 else
Signal_2 when Condition_2 else
. .
Signal_X when Condition_X else
Signal_Y; Signal_Y;
Laffectation avec condition permet de tester plusieurs conditions qui
sont exclusives. La seconde condition ne sera teste uniquement que
si la premire est fausse. La premire condition est donc prioritaire
sur les suivantes et ainsi de suite.
75
Badreddine Bouzouita
Laffectation slectionne : Exemple
Les instructions concurrentes
Entity exemple is
port (A, B, C : IN bit; Sel : IN bit_vector (1 downto 0);
S : OUT bit);
End exemple;
architecture arc_exemple of exemple is
begin begin
S <= A when Sel="00 else
B when Sel="01" else
C when Sel="10" else
'0';
end arc_exemple;
76
Badreddine Bouzouita
Laffectation slectionne
Les instructions concurrentes
La syntaxe gnrique dune affectation slectionne est la suivante:
with Vecteur_De_Commande select
Signal_Sortie <= Valeur_1 when Etat_Logique_1,
Valeur_2 when Etat_Logique_2,
. .
Valeur_N when others; Valeur_N when others;
Le terme others affecte au signal ltat logique mentionn, et ceci
pour tous les autres tats logiques du signal de commande qui nont
pas t cits prcdemment.
77
Badreddine Bouzouita
Laffectation slectionne : Exemple
Les instructions concurrentes
Entity exemple is
port (A, B, C : IN bit; Sel : IN bit_vector (1 downto 0);
S : OUT bit);
End exemple;
architecture arc_exemple of exemple is
begin begin
With Sel select
S <= A when "00",
B when "01",
C when "10",
'0' when others;
end arc_exemple;
78
Badreddine Bouzouita
Linstanciation de composant
Les instructions concurrentes
La syntaxe gnrique dune affectation conditionnelle est la suivante:
[Label:] Nom_Composant port map(Nom_port=>Signal,
.);
Lors de lutilisation dun composant, il est ncessaire de dclarer
celui-ci et dindiquer, la paire entit-architecture qui doit tre utilise.
Cela sappelle la configuration. La syntaxe gnrique de la dclaration Cela sappelle la configuration. La syntaxe gnrique de la dclaration
dun composant avec la configuration est la suivante :
79
Process
Les instructions concurrentes
Lorsque lon a besoin de faire une excution squentielle dans une
architecture, on utilise un process.
Un process peut tre dfini par un label, mais ce nest pas obligatoire.
Il y a par contre toujours une liste de sensibilit (ce qui se trouve
entre parenthses). Lorsque lun des signaux prsents dans la liste de
sensibilit va changer, le contenu du process est alors excut. Si lon
oublie de mettre un signal dans la liste de sensibilit, le rsultat peut oublie de mettre un signal dans la liste de sensibilit, le rsultat peut
tre compltement diffrent.
80
Badreddine Bouzouita
Process
Les instructions concurrentes
Remarque
Le processus est trait en un seul bloc. Cest une instruction
concurrente. Par contre son contenu va tre trait squentiellement.
81
lorsquil y a plusieurs processus dans la mme architecture, il est
utile de leur donner un nom. Ce qui est possible sous lappellation
label.
Badreddine Bouzouita
Process : Variables & Signaux
Les instructions concurrentes
A lintrieur dun process, on prfrera utiliser des variables
intermdiaires plutt que des signaux intermdiaires. De plus,
lutilisation de variable intermdiaire soulage lcriture du process, car
tant dclare lintrieur du process, on ne les dclare pas dans la
liste de sensitivit.
82
Remarque
Dans un process, un signal naura sa nouvelle valeur daffecte
qu la fin du process. A linverse, la variable aura sa nouvelle
valeur affecte immdiatement.
Badreddine Bouzouita
Process : Variables & Signaux
Les instructions concurrentes
Utilisation de variables Utilisations de signaux
Signal A, B, P : integer ;
Begin
Process ( A, B)
Variable VM, VN : integer ;
Begin
VM := A ;
Signal A, B, P : integer ;
Signal SM, SN : integer ;
Begin
Process ( A, B, SM, SN)
Begin
SM <= A ;
83
VM := A ;
VN := B ;
P <= VM + VN ;
End process ;
SM <= A ;
SN <= B ;
P <= SM + SN ;
End process ;
P est affect en une itration du
process.
P est affect en deux itrations : une
premire itration va affecter SM et
SN en fin de process, ce qui va
redclencher lexcution pour que P
reoive la somme de SM et SN.
Badreddine Bouzouita
Process : Variables & Signaux
Les instructions concurrentes
Quand on utilise Variables ou Signaux?
Une bonne rgle de base pour dterminer les conditions
appropries pour utiliser le signal / variable serait de vous
demander, "Vais-je tre en utilisant cette valeur assigne dans
cette tique mme simulation?" Si la rponse est oui,
videmment, vous avez besoin d'utiliser une variable, sinon
84
videmment, vous avez besoin d'utiliser une variable, sinon
vous pouvez utiliser un signal.
Badreddine Bouzouita
Process : Variables & Signaux
Les instructions concurrentes
Quand on utilise Variables ou Signaux?
Il ne faut pas oublier que lutilisation de la variable est locale
seulement un PROCESS. Si une valeur assigne doit tre mise
en commun entre des PROCESS diffrents, un signal est plus
appropri.
85
Badreddine Bouzouita
Process
Les instructions concurrentes
86
Badreddine Bouzouita
Process
Les instructions concurrentes
87
Badreddine Bouzouita
Process : Synchronisation des processus par WAIT
Les instructions concurrentes
L'instruction WAIT permet de mettre des points d'arrt dans le corps
du processus (PROCESS). La syntaxe de l'instruction est la suivante :
wait [on S1,S2,...] [until CONDITION] [for DUREE]
o S1 et S2 sont des signaux, CONDITION est une expression gnrant
un boolen, et DUREE est le temps physique d'attente.
Plusieurs utilisations de wait :
Wait on SIGNAL : attends jusqu ce quun vnement arrive sur Wait on SIGNAL : attends jusqu ce quun vnement arrive sur
SIGNAL.
Wait until SIGNAL = X : attends jusqu ce quun vnement arrive
sur SIGNAL et SIGNAL = X (0 ou 1)
Wait for X ns : attends pour un temps de X ns puis redmarre
Wait on S1,S2 until CK = '1' for X ns : attends jusqu ce quun
vnement arrive sur S1 ou S2 et que CK = 1 mais pas plus longtemps
que X ns.
88
Badreddine Bouzouita
Process : Synchronisation des processus par WAIT
Les instructions concurrentes
Une liste de sensibilit est quivalente un wait on . plac en fin de
processus. Ainsi :
Process (a)
Begin
s <= a ;
b <= s ;
End process ; End process ;
est quivalent :
Process
Begin
s <= a ;
b <= s ;
wait on a ;
End process ;
89
Badreddine Bouzouita
Process : Variables & Signaux
Les instructions concurrentes
UTILISATION DE SIGNAL DE RALIMENTATION
Une autre forme pour l'utilisation du signal est ralimentation.
Cette figure montre un circuit utilisant un signal de ralimentation
(output). Ce dernier doit tre dclar comme tant un BUFFER et non
un port de SORTIE (OUT).
90
Badreddine Bouzouita
Agrgats et concatnation sur les vecteurs
Dans le cas dun vecteur qui doit recevoir plusieurs sources sur des
portions diffrentes, on peut utiliser lagrgat, plus synthtique
quune affectation par segment et qui sera moins sujette a erreurs.
Remarque :
Les agrgats et concatnations doivent toujours faire la mme taille Les agrgats et concatnations doivent toujours faire la mme taille
que celle du vecteur cible.
91
Badreddine Bouzouita
Exemple
Agrgats et concatnation sur les vecteurs
Signal A, B, C : std_logic ;
Signal Z_bus : std_logic_vector(1 downto 0) ;
Signal Status_byte : std_logic_vector(7 downto 0) ;
-- affectation par position
Z_bus <= (A, B) ;
-- affectation par association de nom
Status_byte <= (7 => 1, 5 downto 4 => Z_bus , 6 => C, others => 0) ;
-- affectation par concatnation -- affectation par concatnation
Status_byte <= 1 & C & Z_bus & "0000"
-- affectation par segment
Status_byte(7) <= 1 ;
Status_byte(6) <= C ;
Status_byte(5 downto 4) <= Z_bus ;
Status_byte(3 downto 0) <= "0000" ; ctation par segment et qui sera moins
sujette a erreurs :
92
Badreddine Bouzouita
Instructions squentielles
Les instructions squentielles sexcutent dans lordre dcriture lune
aprs lautre. Elles doivent tre utilises uniquement dans une zone
de description squentielle. Nous utiliserons principalement ces
instructions lintrieur de linstruction process. Ces instructions
peuvent aussi tre utilises dans des procdures et des fonctions.
93
Badreddine Bouzouita
Instruction conditionnelle
Instructions squentielles
If CONDITION then
-- squence dopration
End if ;
La squence ne sera excute
que si la CONDITION est
ralis.
94
If CONDITION then
-- squence1 dopration
Else
-- squence2 dopration
End if ;
La squence1 sera excute si
la CONDITION est ralis,
sinon cest la squence2 qui
sera excute.
Badreddine Bouzouita
Instruction conditionnelle
Instructions squentielles
If CONDITION1 then
-- squence1 dopration
Elsif (CONDITION2) then
Ici, on fait un encodage
prioritaire : si la CONDITION1
nest pas ralise, on teste la
95
Elsif (CONDITION2) then
-- squence2 dopration
Elsif (CONDITION3) then
-- squence3 dopration
Else
-- squence_opt dopration
End if ;
nest pas ralise, on teste la
CONDITION2, et si elle nest pas
elle-mme ralis, on testera
alors la CONDITION3.
Si les conditions 1 et 3 sont
ralises, par exemple, seule la
squence 1 sera excut, du fait
de lencodage prioritaire
Badreddine Bouzouita
Linstruction de choix Case
Instructions squentielles
Case expression is
When VALUE_1 =>
-- squence1 dopration
When VALUE_2 to VALUE_5 =>
-- squence2 dopration
When VALUE_6 | VALUE_8 =>
Lvaluation des conditions doit
tre imprativement disjointe :
par exemple, on ne peut avoir
when VALUE_2 to VALUE_5 et
when VALUE_5 to VALUE_6 .
Il faut toujours mettre un
Remarque: ne pas confondre => (implique) et <= (affecte).
96
When VALUE_6 | VALUE_8 =>
-- squence3 dopration
When others => NULL
-- squence3 dopration
End case ;
Il faut toujours mettre un
when others . Cela permet de
couvrir tous les cas de figure,
et donc de ne pas avoir des
tats indtermins.
Badreddine Bouzouita
Linstruction de choix Case
Instructions squentielles
Il est possible de dfinir plusieurs valeurs de la manire suivante :
when Val_3 | val_4 | val_5 => -- Zone pour instructions squentielles
Si le type utilis pour lexpression est ordonn (exemple : Integer,
Natural,), il est possible de dfinir des plages :
when 0 to 7 => -- Zone pour instructions squentielles
ou ou
when 31 downto 15 => -- Zone pour instructions squentielles
Il est important de not que le type Std_Logic_Vector nest pas un
ensemble de valeurs ordonnes. Cest un type discret. Il est donc
impossible dutiliser les plages to et downto.
97
Badreddine Bouzouita
Linstruction de choix Case
Instructions squentielles
Exemple : dmultiplexeur 1 4
98
Linstruction de boucle FOR/LOOP
Instructions squentielles
LOOP est une instruction squentielle et ne peut tre donc utilise
qu lintrieur dun PROCESS, FUNCTION, ou PROCEDURE.
FOR/LOOP : la boucle est rpte un nombre de fois fixe.
Exemple :
Signal OP,IP : std_logic_vector(3 downto 0) ;
()
[label:] For I in 0 to 3 loop [label:] For I in 0 to 3 loop
OP(I) <= IP(3 I) ;
End loop [label] ;
La variable I ne doit pas tre dclare, elle lest dj par la fonction
for..loop. Cest une variable locale la fonction loop.
Si on dsire parcourir I dans lordre dcroissant, on utilise DOWNTO
la place de TO.
99
Badreddine Bouzouita
Linstruction de boucle WHILE/LOOP
Instructions squentielles
WHILE/LOOP : la boucle est rpte jusqu la condition devient
fausse.
[label:] While condition loop
-- instructions squentielles
End loop [label] ;
EXIT : est utilis pour sortir de la boucle :
[label:] EXIT [label] [WHEN condition];
NEXT : permet de sauter litration courante de la boucle et de passer
litration suivante :
[label:] NEXT [loop_label] [WHEN condition];
100
Badreddine Bouzouita
Linstruction de boucle
Instructions squentielles
Exemple :
process(a)
BEGIN
first_loop: FOR i IN 0 TO 100 LOOP
second_loop:FOR j IN 1 TO 10 LOOP
EXIT second_loop; -- exits the second loop only EXIT second_loop; -- exits the second loop only
EXIT first_loop; -- exits the first loop and second
-- loop
END LOOP;
END LOOP;
END PROCESS;
101
Badreddine Bouzouita
Ecriture quivalente a un if hors process
Assignation concurrente
Cette criture permet de remplacer un process simple qui ne contient
quune boucle if avec affectation sur un seul signal.
Affectation dans un process Affectation hors process
Process (A, B, C, T)
Begin
If (T > 5) then
102
If (T > 5) then
OP <= A ;
Elsif (T < 5) then
OP <= B ;
Else OP <= C ;
End if ;
End process ;
OP <= A when T > 5
Else B when T < 5
Else C ;
Badreddine Bouzouita
Ecriture quivalente un case hors process
Assignation concurrente
Cette criture permet de remplacer un process simple qui ne contient
quune boucle case avec affectation sur un seul signal.
Affectation dans un process Affectation hors process
Process (A, B, C, T)
Begin
Case T is
103
Case T is
When 0 to 4 =>
OP <= B ;
When 5 =>
OP <= C ;
When others
OP <= A ;
End case ;
End process ;
With T select
OP <= B when 0 to 4,
C when 5,
A when others ;
Badreddine Bouzouita
Variables vs signaux
Dans un process, un signal naura sa nouvelle valeur daffecte qu la
fin du process. A linverse, la variable aura sa nouvelle valeur affecte
immdiatement.
Cest pourquoi, a lintrieur dun process, on prfrera utiliser des
variables intermdiaires plutt que des signaux intermdiaires.
De plus, lutilisation de variable intermdiaire soulage lcriture du De plus, lutilisation de variable intermdiaire soulage lcriture du
process, car tant dclare lintrieur du process, on ne les dclare
pas dans la liste de sensitivit.
104
Badreddine Bouzouita
Variables vs signaux
Dans le cas 1, P est affect en une itration du process.
Dans le cas 2, P est affect en deux itrations : une premire itration
va affecter SM et SN en fin de process, ce qui va re-dclencher
lexcution pour que P reoive la somme de SM et SN.
Cas 1 : utilisation de variables Cas 2 : utilisations de signaux
Signal A, B, P : integer ; Signal A, B, P : integer ;
105
Signal A, B, P : integer ;
Begin
Process ( A, B)
Variable VM, VN : integer ;
Begin
VM := A ;
VN := B ;
P <= VM + VN ;
End process ;
Signal A, B, P : integer ;
Signal SM, SN : integer ;
Begin
Process ( A, B, SM, SN)
Begin
SM <= A ;
SN <= B ;
P <= SM + SN ;
End process ;
Badreddine Bouzouita
Les sous-programmes : procdures et fonctions
VHDL connat deux catgories de sous-programmes : les procdures
et les fonctions. Les sous-programmes dont des modules de code
squentiel ; ils utilisent donc le mme jeu dinstructions que le
processus.
En synthse, lemploi de sous-programmes ne fait videment faire
aucune conomie de silicium, chaque appel une procdure ou
une fonction provoque la cration des oprations physique une fonction provoque la cration des oprations physique
ncessaires sa ralisation.
Linstruction wait est interdite dans el corps dune fonction, elle peut
figurer dans celui dune procdure ; mais cette possibilit est souvent
exclue par les compilateurs en synthse.
106
Badreddine Bouzouita
Les sous-programmes : procdures et fonctions
Procdures et fonctions diffrent sur ces points :
Les paramtres dune procdure peuvent tre de classe signal,
constant, variable ou file. Pour les trois premires classes, les
modes accepts sont in, out et inout, les fichiers nont pas de mode.
Les paramtres dune fonction peuvent tre des constantes ou des
signaux, toujours de mode in, ou des fichiers ; jamais des variables. signaux, toujours de mode in, ou des fichiers ; jamais des variables.
Une procdure sexcute jusqu sont mot-cl END moins de
rencontrer linstruction RETURN; sur sa route.
Une fonction ne doit jamais arriver sont mot-cl END final. Cela
provoquerait une erreur lors de lexcution. Elle doit toujours
rencontrer le mot-cl RETURN et rendre alors la main (et une
valeur) lappelant.
107
Badreddine Bouzouita
Les sous-programmes : procdures et fonctions
108
Badreddine Bouzouita
Les sous-programmes : procdures et fonctions
Procdures et fonctions diffrent principalement par le sens de
transfert des informations, alors que les premires autorisent des
paramtres en entre et en sortie, le secondes nont que de
paramtres quen entre , et renvoient un rsultat utilisable dans une
expression.
109
Badreddine Bouzouita
Fonctions : dclaration
Les sous-programmes : procdures et fonctions
FUNCTION nom_fonction (list_paramtres) RETURN type IS
-- partie dclaration
BEGIN
-- instructions squentielles
END nom_fontion;
avec : list_paramtre = CONSTATE nom_const : type;
ou list_paramtre = SIGNAL nom_signal : type; ou list_paramtre = SIGNAL nom_signal : type;
Remarque : il ne faut pas utiliser RANGE avec INTEGER, ou TO/DOWNTO
avec std_logic_vector. Exemple :
FUNCTION f1 (a,b :INTEGER; c : std_logic_vector) RETURN boolean IS
-- partie dclaration
BEGIN
-- instructions squentielles
END f1;
110
Badreddine Bouzouita
Fonctions : appel
Les sous-programmes : procdures et fonctions
Une fonction est appele comme une partie dune expression.
Exemple :
111
Badreddine Bouzouita
Fonctions : appel
Les sous-programmes : procdures et fonctions
Exemple : dtection dun front montant
112
Badreddine Bouzouita
Fonctions : appel
Les sous-programmes : procdures et fonctions
Exemple : conversion binaire en dcimale
113
Badreddine Bouzouita
Procdures : dclaration
Les sous-programmes : procdures et fonctions
PROCEDURE nom_procedure (list_paramtres) IS
-- partie dclaration
BEGIN
-- instructions squentielles
END nom_procedure;
Remarque : quand il sagit juste de dclarer lexistence de la
procdure, on termine par un point virgule. La procdure devient
visible pour ses clients. Il faudra videment en crire la dfinition plus
loin, soit dans la mme unit si lon est dans une architecture ou un
corps de paquetage, soit dans lunit corps si lon est dans une
entit ou une dclaration de paquetage.
114
Badreddine Bouzouita
Procdures : Rcursivit
Les sous-programmes : procdures et fonctions
On peut programmer de manire rcursive en VHDL. Dans un langage
informatique, la rcursivit est la proprit qu un sous-programme
de pouvoir sappeler lui-mme. La rcursivit crois (le sous-
programme A appel le sous programme B et rciproquement) est
aussi autorise. Il convient de sassurer, si lon utilise ce trait du
langage, quun test darrt a bien t mis en place pour stopper la
rcursion. rcursion.
115
Badreddine Bouzouita
Les types prdfinis
Le typage des objets
On pourra dfinir un type soit en utilisant des types prdfinis soit en
utilisant des constructeurs de type.
Les types prdfinis scalaires sont :
integer : cod en gnral sur 32 bits.
natural : cod en gnral sur 31 bits.
Boolean : false, true
Bit : 0, 1 Bit : 0, 1
Char : NUL, a, b,
Time : -2
31
-1 to 2
31
-1 (integer ou real)
Real : flottant dpendant de limplmentation
Les types prdfinis complexes sont :
bit_vector : tableau de bit
String : tableau de char
116
Badreddine Bouzouita
Sous-type
Le typage des objets
Un sous-type est dfini par une restriction dun type un sous-
domaine de ce type.
Pour dfinir la contrainte sur un type scalaire, VHDL fournit un
mcanisme de restriction : le range . Il rduit le type en dfinissant
un sous-intervalle ordonn, soit dans le mme sens que le type, soit
en sens inverse.
subtype chiffre is integer range 0 to 9 ; --ordre croissant
subtype inverse is integer range 9 downto 0 ; --ordre dcroissant
117
Badreddine Bouzouita
Types numrs
Le typage des objets
Un type numr est construit par une liste ordonne de valeurs de
type caractre ou par une liste didentificateurs. Lordre dans le type
permet dutiliser les oprateurs relationnels.
Exp :
type couleur is (bleu, blanc, vert);
Un objet dfini sur le type couleur pourra transporter les valeurs
abstraites bleu, blanc, vert. Ce type dfinit une relation dordre et
dans ce cas on a bleu qui est suprieur blanc, lui-mme suprieur
vert
Remarque : un mme symbole ou caractre peut appartenir
plusieurs types.
118
Badreddine Bouzouita
Types entiers et types flottants
Le typage des objets
Type entiers :
type index is range -3 to 24;
type rev_index is range 24 downto -3;
Type flottants :
type index_real is range -3.0 to 24.0; type index_real is range -3.0 to 24.0;
type rev_index_real is range 24.0 downto -3.0;
119
Badreddine Bouzouita
Types physiques
Le typage des objets
Les types physique dcrivent des objets qui peuvent prendre des
valeurs entires exprimes avec des units dfinies par le type :
Type resistance is range 0 to 1E9
Units
ohm;
kohm:= 1000 ohm; kohm:= 1000 ohm;
mohm := 1000 kohm;
End units resistance ;
Remarque : il faut insrer un caractre blanc (espace) entre le
nombre et lunit.
Exp : 234 ohm;
120
Badreddine Bouzouita
Types structurs
Le typage des objets
Comme tous les langages de faut niveau, VHDL permet lutilisateur
de structurer ses donnes au moyen des types composites que sont
les tableaux (arrays) et les enregistrement (records). Ces types sont
constitus dlments, scalaires u eux-mmes composites, tous de
mme type dans le cas des tableaux, de types diffrents dans le cas
des enregistrements.
121
Badreddine Bouzouita
Types structurs : tableaux
Le typage des objets
Un tableau est une collection dlments, tous de mme type, qui
sont reprs parles valeurs dindices. Un tableau caractris par un
seul indice est dit unidimensionnel, on parle alors dun vecteur.
Lors de la dfinition dun type, il est possible de ne pas spcifier tout
de suite les bornes des indices, constituant par l un tableau
gnrique non contraint. Des sous-types peuvent driver du type non
contraint en prcisant simplement les bornes et les sens de parcours contraint en prcisant simplement les bornes et les sens de parcours
des valeurs des indices.
Exp :
type matrice is array (0 to 9, 0 to 9) of boolean;
type table_verite_2 is array (bit,bit) of bit;
Constant ouex_tv : table_verite_2 := ((0,1),(1,0));
-- ou encore
Constant ouex_tv : table_verite_2 := ("01", "10");
122
Badreddine Bouzouita
Types structurs : tableaux
Le typage des objets
Exp :
type bit_vector is array (natural range <>) of bit;
Il sagit du type prdfini bit_vector. Le signe <> signale labsence de la
contrainte
Subtype octet is bit_vector(7 downto 0);
-- accs aux lments directement
A(2) <= 1; -- permutation poids faibles/poids forts
-- accs aux lments par tranche
S(2 to 4) <= A(9 downto 7); -- permutation poids faibles/poids forts
S(5 to 7)<="111";
123
Badreddine Bouzouita
Types structurs : tableaux
Le typage des objets
-- accs aux lments par agrgat
-- Notation positionnelle
A(3 downto 1) <= ('0', '1', B(15));
B <= ('1','1',others => '0');
-- Notation par nommage
A <= (1 =>'1', 3 =>'1',others =>'0'); A <= (1 =>'1', 3 =>'1',others =>'0');
--Exemple matrice unit de dimension 4
Matrice <=((1=>1, others => 0),
(2=>1, others =>0),
(3=>1, others =>0),
(4=>1, others =>0));
-- Notation mixte
Byte <=(0, 1, 5=>1, 3=>1, others =>0);
124
Badreddine Bouzouita
Types structurs : tableaux
Le typage des objets
-- Par concatnation
signal A,B,C,D : std_logic;
signal BYTE : std_logic_vector(7 downto 0);
signal Z_BUS,A_BUS : std_logic_vector(3 downto 0);
Z_BUS <= A & C & D & B;
BYTE <= Z_BUS & A_BUS; BYTE <= Z_BUS & A_BUS;
125
Badreddine Bouzouita
Types structurs : tableaux
Le typage des objets
-- Dclaration dun tableau de dimension 1D :
type row is array (7 downto 0) of std_logic;
-- Dclaration dun tableau de dimension 1Dx1D :
type array1 is array (7 downto 0) of row;
type array2 is array (7 downto 0) of std_logic_vector(7 downto 0);
-- Dclaration dun tableau de dimension 2D : -- Dclaration dun tableau de dimension 2D :
type array3 is array (0 to 3, 7 downto 0) of std_logic;
-- Initialisation
:= "0001"; -- pour tableau de 1D
:= (0, 0, 0, 1); -- pour tableau de 1D
:= ((0, 0, 0, 1), (0, 0, 0, 1)); -- pour tableau de 1Dx1D ou 2D
126
Badreddine Bouzouita
Types structurs : tableaux
Le typage des objets
signal x : row;
signal y : array1;
signal v : array2;
signal w : array3;
-- Scalaire affectation
X(0) <= y(1)(2);-- deux paires de parenthse pour 1Dx1D X(0) <= y(1)(2);-- deux paires de parenthse pour 1Dx1D
X(1) <= v(2)(3);-- deux paires de parenthse pour 1Dx1D
X(2) <= w(2,1);-- un seul paire de parenthse pour 2D
y(1)(2) <= w(3,3);
w(2,1) <= x(7);
w(3,1) <= v(2)(7);
127
Badreddine Bouzouita
Types structurs : tableaux
Le typage des objets
signal x : row;
signal y : array1;
signal v : array2;
signal w : array3;
-- Vecteur affectation
X <= y(0); X <= y(0);
X <= v(1);
X <= w(2);
X <= w(2, 2 downto 0);
y(1)(2) <= w(3,3);
w(2,1) <= x(7);
w(3,1) <= v(2)(7);
128
Badreddine Bouzouita
Types structurs : enregistrements
Le typage des objets
quivalents des structures de C, les enregistrements (records) permettent
de rassembler des objets de types diffrents dans une mme organisation,
et de reprer chaque lment par son nom.
Exp :
Type date is
record
jour : integer range 1 to 31; jour : integer range 1 to 31;
mois : integer range 0 to 12;
annee : integer range -2000 to 4000;
End record date;
Signal afficheur : date ;
afficheur.jour <= 0;
Afficheur <= (1,12,2012);
Affichage <= ( mois =>12, annee=>2012,jour=>1);
(afficheur.mois, afficheur.annee) <= (12,2012);
129
Badreddine Bouzouita
Generics
C'est une faon de spcifier des paramtres pour un composant : chaque fois que
le composant est utilis, on peut donner des valeurs diffrentes pour ces
paramtres
Exemple :
entity nand2 is
generic (trise, tfall : time;
load : natural);
port (a, b : in std_logic;
c : out std_logic); c : out std_logic);
end nand2;
component nand2 is
generic (trise : time := 3 ns;
tfall : time := 2 ns;
load : natural := 1);
port (a, b : in std_logic;
c : out std_logic);
end component;
130
Badreddine Bouzouita

Вам также может понравиться