Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/272165257
CITATIONS
READS
22
2 authors, including:
Etienne Messerli
La Haute Ecole d'Ingnierie et de Gestion d
4 PUBLICATIONS 0 CITATIONS
SEE PROFILE
Dpartement TIC
Institut REDS
Manuel VHDL
synthse
et
simulation
Version partielle septembre 2007
(Chapitres : 1, 2, 3, 4, 6, 7, 9, 10, 15)
Etienne Messerli
Version 6-a
Septembre 2007
Remise jour :
6me rvision :
Contact
Auteur: Etienne Messerli
e-mail : etienne.messerli@heig-vd.ch
Tel:
+41 (0)24 / 55 76 302
R DS
e-mail : alexandre.corbaz@heig-vd.ch
e-mail : yoan.graf@heig-vd.ch
e-mail : andres.perez-uribe@heig-vd.ch
e-mail : michel.starkier@heig-vd.ch
Titre chapitre
24
25
26
27
42
43
43
43
44
6-1.1.Dcalage de vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
III
Titre chapitre
Titre chapitre
VI
Prambule
Ce manuel a pour but de fournir toutes les connaissances ncessaires lutilisation du langage VHDL pour la synthse automatique. Le manuel inclu aussi
la mthodologie pour raliser des simulations automatiques.
Le manuel est organis pour un apprentissage progressif du langage. A la fin
de la lecture de ce manuel le lecteur sera capable de dcrire, en VHDL synthtisable, tout systme numrique quil souhaite raliser. Il sera aussi capable
dcrire les bancs de test automatique afin dutiliser la nouvelle mthodologie
de dveloppement.
Ce manuel na pas pour objectif de prsenter lensemble du langage VHDL.
Celui-ci est introduit de manire progressive. Certaines notions ont t volontairement carte afin de facilit lapprentissage. Le recourt un ouvrage exhaustif sera ncessaire pour la personne souhaitant connatre lensembe du
langage. Le manuel fourni toutes les informations ncessaires pour matriser
les description pour la synthse automatique et des bancs de test. Le lecteur
trouvera en annexe la liste des notions VHDL non trait dans cet ouvrage ()
Nous allons indiquer la suite des chapitres lire pour un apprentissage progressif du langage. Il est indispensable que le lecteur dispose des exercices
lis ce manuel et quil les pratique chaque tape.
VII
Prambule
VIII
Institut REDS
Titre
grer plus rapidement les deux utilisations du langage. Voici cette seconde dmarche:
IX
Prambule
Chapitre 1
Introduction
Chapitre 1: Introduction
Description en
VHDL
Synthse
(traduction)
le synsthtiseur nous fournit une liste dinterconnexion de primitives. Celles-ci seront dfinies pour la technologie choisie
Placement et
routage
(intgration)
Institut REDS
Chapitre 1: Introduction
Un outil indispensable actuellement est le simulateur. A toutes les tapes de la ralisation dun circuit logique, nous disposons dun fichier en
VHDL permettant dutiliser le mm banc de test. La figure 1- 2, page 4,
nous montre ces diffrentes possibilits de simulation.
Description VHDL
synthtisable
Fichier de simulation
VHDL
(test bench)
SYNTHETISEUR
(traduction)
Description logique
netlist
VHDL
fichier
VHDL
fonctionnelle
SIMULATEUR
temporelle
Placement routage
(intgration)
Programmation circuit
fichier de progr.
fichiers
VHDL
Institut REDS
1-3.1 Historique
Au dbut des annes 80, le dpartement de la dfense amricaine
(DOD) dsire standardiser un langage de description et de documentation
des systmes matriels ainsi qu'un langage logiciel afin d'avoir une indpendance vis--vis de leurs fournisseurs. C'est pourquoi, le DOD a dcid
de dfinir un langage de spcification. Il a ainsi mandat des socits pour
tablir un langage. Parmi les langages proposs, le DOD a retenu le langage VHDL qui fut ensuite normalis par IEEE. Le langage ADA est trs
proche, car celui-ci a servit de base pour l'tablissement du langage VHDL.
La standardisation du VHDL s'effectuera jusqu'en 1987, poque laquelle elle sera normalise par l'IEEE (Institute of Electical and Electronics Engineers). Cette premire normalisation a comme objectif:
La spcification par la description de circuits et de systmes.
La simulation afin de vrifier la fonctionnalit du systme.
La conception afin de tester une fonctionnalit identique mais
dcrite avec des solutions d'implmentations de diffrents
niveaux d'abstraction.
En 1993, une nouvelle normalisation par l'IEEE du VHDL a permis
d'tendre le domaine d'utilisation du VHDL vers:
La synthse automatique de circuit partir des descriptions.
La vrification des contraintes temporelles.
La preuve formelle d'quivalence de circuits.
Il existe un autre langage de haut niveau pour la description de matriel.
Il s'agit du langage VERILOG. La socit Cadence est l'origine de ce langage. Ce langage est aussi normalis par IEEE.
Chapitre 1: Introduction
tous les vendeurs d'outils EDA. Cela permet aux industriels d'investir sur
un outil qui n'est pas qu'une mode phmre, c'est un produit commercialement invitable. Techniquement, il est incontournable car c'est un langage puissant, moderne et qui permet une excellente lisibilit, une haute
modularit et une meilleure productivit des descriptions. Il permet de
mettre en oeuvre les nouvelles mthodes de conception.
Il est noter toutefois un inconvnient qui est la complexit du langage.
En effet, ce langage s'adresse des concepteurs de systmes lectroniques,
qui n'ont pas forcment de grandes connaissances en langages de programmation.
D'autres fausses ides circulent sur le langage VHDL. Celui-ci n'assure
pas la qualit du rsultat, la portabilit et la synthse des descriptions. Une
mthodologie est indispensable pour combler ces lacunes.
;;;;
;;;;
;;;;
Ensemble du VHDL
Sous-ensemble
synthtisable
Institut REDS
Chapitre 1: Introduction
Chapitre 2
--Affectation simple
Y <= (not C and B) or (A and C and not D);
--Affectation conditionnelle
A_Eq_B <= '1' when Val_A = Val_B else '0';
--Dclaration dentit
entity Nom_Du_Module is
zone pour dautres instructions
end Nom_Du_Module;
Exemple 2- 1 : Syntaxe dinstructions VHDL termines par un point virgules
Recommandations:
N'utiliser dans les identificateurs que des lettres et des chiffres.
Dfinir si vous crivez les identificateurs en majuscules ou en
minuscules.
Convention utilise au sein du REDS et dans ce manuel:
La convention de noms utilise pour les indentificateurs est la suivante:
1re lettre en majuscule, le reste en minuscule
Chaque mot est spar par un soulign avec la 1re lettre en
majuscule
Voici quelques exemples
Bus_Donnee, Etat_Present, Adr_Sel, Val_Don
Afin de simplifier la lecture des descriptions VHDL, nous avons dfini
une convention pour les noms des signaux. Les tableaux ci-aprs vous donnent les suffixes et prfixes utiliss:
10
Institut REDS
Objet
suffixe
port dentre
_i
port de sortie
_o
port entre/sortie
_io
signal interne
architecture textuelle
_s
signal interne
schma bloc
aucun
constante
_c
variable
_v
_sti
signaux observs
_obs
signaux de rfrence
_ref
Polarit
prfixe
aucun
n
exemple: nReset_i
11
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
Exemple 2- 2 : Types scalaires
12
Institut REDS
Lutilisation des types (Type), sous-types (Subtype) et les articles (record) est prsente dans le chapitre Notions avances du langage VHDL,
page 63.
Les constantes.
Les variables.
Les signaux.
Les fichiers.
Les classes d'objet signal et variable seront prsentes dans les paragraphes suivants. Nous pouvons dire qu'une variable appartient au monde soft.
Celle-ci n'a pas de ralit physique. Par contre, un signal appartient au
monde hard. Celui-ci reprsente une quipotentielle, il aura donc une reprsentation physique dans le circuit dcrit.
13
Description
Rsultat
and
ET logique
mme type
or
OU logique
mme type
nand
Non-ET Logique
mme type
nor
Non-OU logique
mme type
xor
OU exclusif logique
mme type
xnor
mme type
Les oprateurs relationnels sont dfinis pour tous les types scalaires et
les tableaux de scalaires. Mais les deux oprandes doivent tre du mme
type.
Oprateur
Description
Rsultat
galit
type boolen
/=
ingalit
type boolen
<
infrieur
type boolen
<=
infrieur ou gal
type boolen
>
suprieur
type boolen
>=
suprieur ou gal
type boolen
14
Institut REDS
Les oprateurs de dcalages et de rotation sont dfinis pour tous les types scalaires et les tableaux de scalaires. Ces oprateurs ont t rajout
dans la norme VHDL-93.
Oprateur
Description
Rsultat
sll
srl
Dcalage logique
droite
sla
Dcalage arithmtique
gauche
sra
Dcalage arithmtique
droite
rol
rotation gauche
ror
rotation droite
15
Oprateur
Description
Rsultat
Addition
mme rsultat
soustraction
mme rsultat
&
concatnation
La concatnation fourni un vecteur partir de deux ou plusieurs vecteurs. Cette fonction est trs utilise dans les descriptions VHDL en vue de
la synthse. Vous trouverez des exemples dans le paragraphe Loprateur
de concatnation &, page 47.
Les oprateurs de signe sont dfinis pour les types numriques.
Oprateur
Description
Rsultat
signe positif
mme rsultat
signe ngatif
mme rsultat
Descriptif
Rsultat
multiplication
dpend
division
dpend
mod
entier
rem
entier
Les oprateurs divers s'effectue sur des types diffrents selon la fonction. Le tableau ci-dessous donne les types utilisables pour chaque opration.
Oprateur
Descriptif
Rsultat
abs
mme rsultat
**
exponentiel
dpend
not
mme rsultat
16
Institut REDS
La valeur de la variable B est stocke dans la variable A. C'est une opration instantane, par la suite plus aucun lien n'existe entre ces 2 variables.
17
L'affectation est aussi valable si B est un signal. Dans tous les cas, le type
de l'expression de droite doit tre identique celui de la variable.
18
Institut REDS
dfini (don't care). De plus en simulation, nous avons besoin d'un tat non
pour indiquer des conflits, un signal non initialis, ...
'U',
'X',
'0',
'1',
'Z',
'W',
'L',
'H',
'-',
De par ces diffrents tats possibles le type Std_Logic est utile pour dcrire des portes logiques 3 tats, des rsistances de pull-up ou des sorties
de circuit collecteur ouvert, par exemples. Ltat - (indiffrent) permet
de spcifier que ltat dun signal est indifrent. Exemple dans le cas dune
combinaison inutilise dune fonction combinatoire. Le synthtiseur le
choix dutiliser ltat 1 ou 0 afin de simplifier la logique gnre. Les
tats U, X et W sont utiliss en simulation. En cas de conflit entre les
deux niveaux 0 et 1 pour un signal, il sera possible dindiquer cette situation par ltat X. Ce type est toujours utilis pour les descriptions en vue
d'une synthse automatique. Tous les exemples du manuel ainsi que les
exercices utiliserons ce type.
Le type Std_Logic est dfinit par le paquetage normalis
IEEE.Std_Logic_1164. Il sera donc indispensable de dclarer celui-ci au
dbut de son fichier VHDL (pour avoir accs au type Std_logic).
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;
19
-- Uninitialized
-- Forcing Unknown
-- Forcing 0
-- Forcing 1
High Impedance
-- Weak Unkown
-- Weak 0
-- Weak 1
--Dont care
),
Cette fonction utilise une table de rsolution pour dterminer l'tat d'un
signal pilot par deux sources
constant resolution_table : stdlogic_table := (
-------------------------------------------------------| U
X
0
1
Z
W
L
H
|
|
-----------------------------------------------------( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U |
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X |
( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- | 0 |
( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 |
( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z |
( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W |
( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L |
( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H |
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- | - |
);
20
Institut REDS
Dans lindustrie cest le type Std_Logic qui est principalement utilis. Cest
celui que nous utilisons dans ce manuel
---------------------------------------------------------------------------------------------------- *** industry standard logic type ***
--------------------------------------------------------------------------------------------------subtype Std_Logic is resolved Std_uLogic;
21
2-4 Le temps
Comme indiqu prcdemment, le signal n'est pas un rcipient que l'on
peut vider ou remplir loisir, comme une variable. C'est un objet qui a des
liens, il a un pass, un prsent et un futur. Nous devons associer un signal
un ensemble de valeurs. La notion de temps est indispensable pour reprsenter cet ensemble d'informations. Le langage VHDL associe chaque signal un pilote qui contient toutes ces informations.
10 ns 20 ns 30 ns 40 ns 50 ns
'0'
'1'
....
'0'
'1'
'0'
'1'
'0'
22
Institut REDS
Le rsultat de l'opration A >= B est soit vrai, soit faux. Il sagit dun
rsultat de type boolean. Il nest pas possible daffect le rsultat au signal
Y car celui-ci est de type Std_Logic. Si l'on veut rendre cette partie de description correcte en VHDL, il faut l'crire comme suit:
architecture Type of exemple
signal A, B, Y : Std_Logic;
begin
Y <= '1' when (A >= B) else '0';
end;
library
configuration
package
package
entity
package
library
package
architecture
package
package
Unit de conception
23
2-6.1 L'entit
L'entit est une vue externe du module, elle dfinit toutes les entres et
sorties.
Syntaxe gnrale de l'entit:
entity Nom_Du_Module is
port ( Nom_Entre_1 :inType_Du_Signal;
Nom_Entre_2 :inType_Du_Signal;
...
Nom_Sortie_1 :outType_Du_Signal;
Nom_E_S_1 :inoutType_Du_Signal );
end Nom_Du_Module;
Remarque:
Les entres et les sorties d'un module sont toujours reprsentes par
un port, il en existe 4 diffrents types, qui sont:
in
: port d'entre.
out
: port de sortie.
inout
: port bidirectionnel (utilisation pour des bus).
buffer
: port de sortie qui peut tre relu (ne pas utiliser)
Un signal de type buffer ne peut pas tre connect directement avec un
signal de type out (le VHDL est typ). Il est ncessaire dutiliser un cast.
Cela nest pas trs pratique. Nous dconseillons lutilisation de ce type !
Nous verrons plus tard comment se passer de ce type en utilisant un signal
interne dans larchitecture (Voir Remplacement du type de port "buffer",
page 50.).
Afin d'tre plus concret, nous allons vous prsenter, comme exemple,
l'entit d'un multiplexeur 8 -> 1 avec 3 entres de slection.
MUX8to1
0
Sel
3
A
B
C
D
E
F
G
H
0
G -7
0
1
2
3
4
5
6
7
24
Institut REDS
entity MUX8to1 is
port(Sel : in Std_Logic_Vector (2 downto 0);
A,B,C,D,E,F,G,H : in Std_Logic;
Y
: out Std_Logic);
end MUX8to1;
Exemple 2- 9 : Vue externe du multiplexeur en langage VHDL
2-6.2 L'architecture
L'architecture dcrit le comportement du module. Le langage VHDL
permet de dcrire le comportement de diffrentes faons. Dans ce manuel
nous allons traiter les description synthtisable et les bancs de test. Ceuxci seront tudi ultrieurement (Voir Simulation et bancs de test,
page 129.). Les autres types de description ne seront pas prsentes ici
(exemple: description de spcification)
Nous allons commencer par les descriptions synthtisables. Dans la littrature, ce niveau de description est appel RTL (Register Transfert Level). Nous distinguerons diffrentes possibilits de descriptions
synthtisables, soit:
Logique:
25
26
Institut REDS
27
28
Chapitre 3
Dans un circuit, toutes les portes fonctionnent simultanment. Le langage VHDL disposent dinstructions concurrentes qui vont nous permettre de
dcrire le comportement dun circuit. Une description VHDL est constitu
dun ensemble de processus concurrents. Lordre dans lequels ces processus apparaissent dans la description est indiffrent.
D <= not C;
C <= A and B;
est identique
C<= A and B;
D <= not C;
29
Nous allons commencer par dcrire les instructions concurrentes simples. Il sagit de laffectation simple, laffectation conditionnelle (when ...
else), laffectation slectionne (with ... select) et de linstanciation de composant. Cette dernire instruction permet de raliser des descriptions hirarchiques.
La dernire instruction concurrente est linstruction process. Cette instruction permet de dcrire un comportement avec des instructions squentielles. Il sera ainsi possible dutiliser des descriptions algorithmiques.
Cette instruction est dcrite dans le chapitre suivant Les instructions squentielles, page 37.
La description d'un comparateur d'galit entre 2 signaux, est un exemple concret d'une affectation avec une seule condition.
30
Institut REDS
Remarque:
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.
31
Dans l'exemple ci-dessus, le terme others, couvre les cas: "XXX", "ZZZ",
"HHH", "UUU", "01U", "-1-", etc. du vecteur Sel, si celui-ci est de type
Std_Logic_Vector. Ces tats ne sont pas utiliss en synthse mais existe
pour le type Std_Logic (9 tats, voir 3.3).
Lors de l'utilisation d'un composant, il est ncessaire de dclarer celuici et d'indiquer, la paire entit-architecture qui doit tre utilise. Cela s'appelle la configuration. La syntaxe gnrique de la dclaration dun composant avec la configuration est la suivante:
--Dclaration du composant
component Nom_Composant [is] --support en VHDL93
port (Nom_Entree : in Std_Logic;
....
Nom_Sortie : out Std_Logic );
end component;
for all Nom_Composant use entity work.Nom_Entity(Nom_Arch);
32
Institut REDS
Dans le cas o toutes les connections ne sont pas utilises il est possible
dutiliser le mot cl open. Voici un exemple dinstanciation dun comparateur ou une sortie nest pas utilise.
33
Remarques:
Le processus est trait en un seul bloc. C'est une instruction concurrente. Par contre son contenu va tre trait squentiellement
(voir instructions squentielles).
Lorsque linstruction process est utilise avec une liste de sensibilit, linstruction wait est interuite lintrieur du process.
Les signaux seront affects lors de lendormissement du processus. Cela a lieu soit la fin (end process) ou lors d'une attente
(wait ). Le temps n'volue pas lors de l'valuation d'un processus (excution des instructions squentielles).
A l'intrieur d'un processus, il est possible d'utiliser des variables. Celles-ci seront immdiatement misent jours.
Un processus est activ uniquement lorsqu'un des signaux de la
liste de sensibilit changent.
Lorsqu'il y a plusieurs processus dans la mme architecture, il est
utile de leur donner un nom. Ce qui est possible sous l'appellation label.
Lutilisation de linstruction processus est difficile. Nous verrons des
exemples dutilisation pour dcrire des systmes combinatoires, voir Description comportementale, page 94. Linstruction processus est indispensable pour dcrire des lments mmoires. Vous trouverez des exemples
34
Institut REDS
35
36
Chapitre 4
Remarque:
L'affectation ne modifie pas la valeur actuel du signal. Celle-ci modifie
les valeurs futurs. Le temps nvolue pas lors de lvaluation dun process.
Laffectation sera donc effective uniquement lors de lendormissement du
process. Voir L'instruction processus, page 34.
37
L'instruction when ... else n'est pas utilisable l'intrieur d'un process.
C'est une instruction concurrente. L'instruction squentielle correspondante est l'instruction conditionnelle (if then else), voir paragraphe suivant.
38
Institut REDS
Si le type utilis pour l'expression est ordonn (exemple: Integer, Natural, ..), il est possible de dfinir des plages:
when 0 to 7 =>
ou
when 31 downto 16 => --Zone pour instructions squentielles
Il est important de not que le type Std_Logic_Vector n'est pas un ensemble de valeurs ordonnes. C'est un type discret. Il est donc impossible d'utiliser les plages to et downto.
Nous allons montrer l'utilisation de l'instruction case avec la description
d'un dmultiplexeur 1 4. Ce circuit dispose d'une entre de slection Sel
de 2 bits, une entre commuter Val_In et de 4 sorties.
39
Remarque:
Le cas others n'est jamais utilis pour les combinaisons logiques de Sel.
Mais le type Std_Logique comprend 9 tats ('X', 'U', 'H', etc.). Le vecteur Sel
de 2 bits comprend donc 81 combinaisons et pas seulement 4! Il est indispensable de prvoir ces combinaisons dans la description. Lors de la simulation si Sel est diffrent d'une des 4 combinaisons logiques("00", "01", "10",
"11"), les sorties sont affectes avec l'tats 'X' pour indiquer qu'il y a un problme dans le fonctionnement du dmultiplexeur.
40
Chapitre 6
Visseries et astuces
Dans ce chapitre, nous allons prsenter des lments facilitant la description en VHDL. Il sagit soit doprateurs, dattributs ou dagrgats. Ces
lments forme la boite outils du langage. Lutilisation de ces outils permet lcriture de description plus compact et plus portable. Les attribut seront principalement exploits lors du chapitre Descriptions
paramtrables, page 117.
47
--dcalage logique
48
Institut REDS
Remarque:
Laffectation en hexadcimal ne fonctionne que pour des vecteurs multiples de 4 bits. Si vous avez un vecteur de 30 bits affecter vous pouvez
oprer comme suit:
--Soit les signaux suivants:
signal Vect30a, Vect30b : Std_Logic_Vector(29 downto 0);
constant Cst32 : Std_Logic_Vector(31 downto 0) := x"3A79B2E2";
--Nous pouvons ds lors affecter les vecteur 30 bits comme suit :
Vect30a <= Cst32(29 downto 0);
Vect30b <= "11" & x"A79B2E2";
Remarque:
Il existe aussi la possibilti de faire des affectation en octal, soit :
Vect12
<= o"7426";
49
Nous verrons plus loin que cette notion dagrgat utilis avec les attributs permet dcrire des descriptions paramtrables.
library IEEE;
use IEEE.Std_Logic_1164.all;
entity Exemple
port( A, B :
X
:
Y
:
end Exemple;
50
is
in
Std_Logic;
out
Std_Logic;
buffer Std_Logic);
Institut REDS
Nous conseillons dans un tel cas, dutiliser un type de port out et de crer
un signal interne. Celui-ci pourra tre relu et le signal de sortie reste avec
le type de port out. Nous donnons ci-dessous la modification de lexemple
avec la dclaration dun signal interne avec le sufixe .._s.
library IEEE;
use IEEE.Std_Logic_1164.all;
entity Exemple
port( A, B :
Y
:
X
:
end Exemple;
is
in
out
out
Std_Logic;
Std_Logic;
Std_Logic );
51
sont pas utile pour lutilisateur. De plus, ils ne sont pas utiliss au niveau
du langage VHDL.
Nous ne mentionnerons pas tous les attributs pr-dfinis. Nous allons
uniquement donner les plus utiliss. Nous laisserons le lecteur ce rfrer
la norme ou un livre pour voir la liste complte des attributs pr-dfinis.
Aleft
Aright
Ahigh
Alow
Alength
Arange
Areverse_range
valeur de gauche
valeur de droite
valeur suprieur
valeur infrieur
longueur (dimension du tableau)
porte
porte inverse
52
Institut REDS
Ces attribut ont de nombreuses utilisations. Nous allons donner quelques exemples ci-dessous. Le lecteur trouvera de multiple exemples dutilisation dans les descriptions fournies avec ce manuel. Vous pouvez aussi
vous rfrer au chapitre Descriptions paramtrables, page 117. Ces attributs y sont un outil indispensable.
entity Exemple is
port( ...
CPT : out Std_Logic_Vector (7 downto 0);
...
end Exemple;
architecture Comport of Exemple is
--Declaration dun signal interne avec la mme taille
--quun signal de lentite
signal CPT_s: Unsigned(Compteur'range);
.....
Exemple 6- 7 : Utilisation des attributs sur les tableaux pour les dclarations
53
library IEEE;
use IEEE.Std_Logic_1164.all;
use IEEE.Numeric_Std.all; --Fonction conversion
To_Unsigned
entity Exemple_tb
end Exemple_tb;
architecture Test_Bench of Exemple_tb is
....
signal Entrees_sti : Std_Logic_Vector(Entreesrange);
...
begin
...
process
begin
....
--Boucle pour parcourir toutes les combinaisons
for I in 0 to (2**(Entrees_sti'length)-1) loop
--Affecte les stimuli aux entrees du systeme
Entrees_sti <= Std_Logic_Vector(
To_Unsigned(I, Entrees_sti'length) );
....
end loop;
...
end process;
end Test_Bench;
Exemple 6- 8 : Utilisation attributs sur les tableaux dans un fichier de simulation avec utilisation de linstruction for ..loop
Ces attributs sont aussi valable pour des types ou sous-types de tableau.
Cette possibilit est plus rarement utilise. Nous expliquons le fonctionnement avec un sous-type.
--dclaration dun sous-type
subtype T_Bus_Adr : Std_Logic_Vector(11 downto 0);
--Voici le rsultat de lutilisation de chaque attribut :
T_Bus_Adr'left
= Data'high = 11
T_Bus_Adr'right = Data'low = 0
T_Bus_Adr'length = 12
T_Bus_Adr'range = 11 downto 0
T_Bus_Adr'reverse_range = 0 to 11
54
Institut REDS
55
S
Affectations
du signal S
au temps t
'1'
10 ns
'1'
20 ns
'0'
40 ns
56
Chapitre 7
Paquetage Numeric_Std
et oprations arithmtiques
Nous trouvons ces paquetages dans la bibliothque IEEE. La dclaration de ces paquetages est la suivante:
use IEEE.Std_Logic_Arith;
use IEEE.Std_Logic_Unsigned.all;
use IEEE.Std_Logic_Signed;
57
Ces deux types sont bass sur le type Std_Logic. La dclaration de ces
deux types est la suivante:
type Unsigned is array (Natural range <>) of Std_Logic;
type Signed is array (Natural range <>) of Std_Logic;
return Unsigned
return Unsigned
return Unsigned
return Signed
return Signed
return Signed
58
Institut REDS
return Boolean
return Boolean
return Boolean
return Boolean
return Boolean
return Boolean
return Boolean
Remarque:
L'utilisation de la comparaison avec des signaux de type
Std_Logic_Vector peut donner des rsultats errons. Dans ce
cas, la comparaison est faite lment par lment en commenant par la gauche (chane de caractre !). D'o:
"101" > "1000" est vrais !
To_Integer
(ARG: Unsigned)
To_Integer
(ARG: Signed)
To_Unsigned (ARG: Natural, SIZE: Natural)
To_Signed
(ARG: Integer, SIZE: Natural)
SIZE : indique le nombre de bits du vecteur
return Natural
return Integer
return Unsigned
return Signed
Le VHDL dfinit aussi les nombres entiers. Voici la syntaxe pour les
dclarations dun entier positif (Naturel) et dun entier sign:
signal Nbr_P : Natural; -0
(2**31)-1
signal Nbr_E : Integer; -- -2**31 (2**31)-1
59
Le langage VHDL tant typ, il est interdit d'affecter ensemble deux signaux de types diffrents. Il faut donc utiliser des fonctions d'adaptation ou
de conversion pour affecter des nombres ayant des diffrents types de reprsentation.
Il est noter que le passage directe entre un Std_Logic_Vector et un entier
est impossible. Il est ncessaire de passer par les types Unsigned ou Signed.
Nous allons vous prsenter dans les prochains paragraphe les diffrentes
possibilits de conversion ou dadaptation.
Vous trouverez dans les annexes un rsum de ces diffrentes conversion et adaptation ralis par la socit A.L.S.E. (Advanced Logic Synthesis for Electronics, Paris), voir Conversion vecteurs et nombres entiers,
page 173.
7-3.2
60
Institut REDS
61
62
Chapitre 9
89
A
Y
B
Figure 9- 1 : Schma d'une porte logique NOR 2 entres
library IEEE;
use IEEE.Std_Logic_1164.all;
entity Non_Ou is
port(A, B : in Std_Logic;
Y
: out Std_Logic);
end Non_Ou;
architecture Logique of Non_Ou is
begin
Y <= A nor B;
end Logique;
Exemple 9- 1 : Description d'une porte logique NOR 2 entres
D
X
Sortie
Y
90
Institut REDS
library IEEE;
use IEEE.Std_Logic_1164.all;
entity Schema is
port(A, B, C, D : in Std_Logic;
Sortie
: out Std_Logic);
end Schema;
architecture Logique of Schema is
--Signaux internes
signal X, Y : Std_logic;
begin
X <= (not A) and C and D;
Y <= B and (not C) and D;
Sortie <= X or Y;
end Logique;
Exemple 9- 2 : Description dun schma logique
G2..0
GRAY
Binaire pur
BP2..0
91
Gray 3bits
G2
G1
G0
BP2
BP1
BP0
La
utilisant
l'instruction
library IEEE;
use IEEE.Std_Logic_1164.all;
entity Gray_BinPur is
port(G : in Std_Logic_Vector(2 downto 0);
BP : out Std_Logic_Vector(2 downto 0));
end Gray_BinPur;
architecture TDV of Gray_BinPur is
begin
with G select
BP <= "000"
"001"
"011"
"010"
"111"
"110"
"100"
"101"
"XXX"
when
when
when
when
when
when
when
when
when
"000",
"001",
"010",
"011",
"100",
"101",
"110",
"111",
others; -- simulation
end TDV;
Exemple 9- 3 : Description dun transcodeur Gray -binair pur
92
Institut REDS
Val_A
Comparateur
A_EQ_B
Val_B
La
utilisant
l'instruction
library IEEE;
use IEEE.Std_Logic_1164.all;
entity Comp_Eq is
port(Val_A, Val_B : in Std_Logic_Vector( 3 downto
0);
A_Eq_B
: out Std_Logic);
end Comp_Eq;
architecture Flot_Don of Comp_Eq is
begin
A_Eq_B <= '1' when (Val_A = Val_B) else '0';
end Flot_Don;
Exemple 9- 4 : Description dun comparateur 4 bits
La comparaison de vecteur peut poser certains problmes. Les oprateurs de comparaison support que les vecteurs soient de taille diffrente.
Dautre part, la comparaison est effectue bit bit en commenant par la
gauche! Si nous avons deux vecteurs de taille diffrente, le rsultat peut
tre erron.
93
signal REG
signal CNT
-REG
-- "01111"
-- "01111"
library IEEE;
use IEEE.Std_Logic_1164.all;
use IEEE.Numeric_Std.all;
entity Comp_Eq is
port(Val_A, Val_B : in Std_Logic_Vector(3 downto 0);
A_Eq_B
: out Std_Logic);
end Comp_Eq;
architecture Flot_Don of Comp_Eq is
begin
--Utilise le type Unsigned pour garantir une
-- comparaison correcte
A_Eq_B <= '1' when (Unsigned(Val_A)=Unsigned(Val_B))
else
'0';
end Flot_Don;
Exemple 9- 6 : Description du comparateur avec lutilisation du type Unsigned
Institut REDS
ment dun systme numrique. Nous montrons cette dmarche avec le cas
dun dmultiplexeur (voir Description algorithmique dun dmultiplexeur 1 N, page 96).
DMUX1_4
0
Sel
1
Enable
Y0
Y1
Y2
Y3
EN
library IEEE;
use IEEE.Std_Logic_1164.all;
entity DMUX1_4 is
port ( Sel
: in Std_Logic_Vector (1 downto 0);
Enable : in Std_Logic;
Y
: out Std_Logic_Vector (3 downto 0) );
end DMUX1_4;
architecture Comport of DMUX1_4 is
begin
process(Sel ,Enable)
begin
Y <= (others => '0'); -- Valeur par dfaut
if Enable = '1' then
case Sel is
when "00" => Y(0) <= '1';
when "01" => Y(1) <= '1';
when "10" => Y(2) <= '1';
when "11" => Y(3) <= '1';
when others => Y <= (others => 'X');
-- pour la simulation
end case;
end if;
end process;
end Comport;
Exemple 9- 7 : description dun dmultiplexeur 4 to 1
95
Nous pouvons modifier cet algorithme en inversant les deux lignes, soit:
Toutes les sorties sont inactives
Activer la sortie slectionne.
Nous pouvons maintenant traduire cet algorithme en VHDL. Nous allons utiliser le concept des instructions squentiels qui permet daffecter
plusieurs fois le mme signal. Nous savons que seul la dernire affectation
squentiel du signal sera effectivement applique sur le signal. Voici la traduction de cet algorithme avec des instructions squentiels:
Sorties <= (others => 0); --toutes les sorties sont dsactives
Sorties(Sel_Integer) <= 1;--sortie slectionne active
Nous devons encore convertir la valeur de la slection en entier et donner la syntaxe exacte en VHDL. Ci-dessous, nous vous donnons la description VHDL du dmultiplexeur correspondant lalgorithme. Nous avons
donner lexemple dun dmultiplexeur 1 16. Dans le chapitre Description de systmes combinatoires, page 89, nous montrerons comment utiliser cet algorithme pour obtenir une description gnrique.
library IEEE;
use IEEE.Std_Logic_1164.all;
use IEEE.Numeric_Std.all;
entity DMUX1_16 is
port( Sel
: in Std_Logic_Vector (3 downto 0);
Sorties: out Std_Logic_Vector (15 downto 0)
);
end DMUX1_16;
architecture Comport of DMUX1_16 is
begin
process(Sel)
begin
--toutes les sorties sont desactivees
Sorties <= (others => '0'); --valeur par defaut
--active la sortie selectionnee
Sorties( To_Integer(Unsigned(Sel)) )<= 1;
end process;
end Comport;
Exemple 9- 8 : Description algorithmique dun dmultiplexeur 1 16
96
Institut REDS
library IEEE;
use IEEE.Std_Logic_1164.all;
use IEEE.Numeric_Std.all;
entity DMUX1_16 is
port( Sel
: in Std_Logic_Vector (3 downto 0);
Enable : in Std_Logic;
Sorties: out Std_Logic_Vector (15 downto 0)
);
end DMUX1_16;
architecture Comport of DMUX1_16 is
begin
process(Sel, Enable)
begin
--toutes les sorties sont desactivees
Sorties <= (others => '0'); --valeur par defaut
--active la sortie selectionnee si enable actif
Sorties( To_Integer(Unsigned(Sel)) )<= Enable;
end process;
end Comport;
Exemple 9- 9 : Description algorithmique dun dmultiplexeur 1 16 avec enable
97
CS_A
Dcodeur
Adresse
CS_B
d'adresse
CS_C
CS_A
CS_A
CS_A
en dcimal
2F
47
30
4F
48
79
50
7F
80
127
80
FF
128
255
Zone libre
Library IEEE;
use IEEE.Std_Logic_1164.all;
use IEEE.Numeric_Std.all;
entity Dec_Ad is
port(Adresse : in Std_Logic_Vector(7 downto 0);
CS_A, CS_B, CS_C : out Std_Logic );
end Dec_Ad;
architecture Comport of Dec_Ad is
begin
process(adresse)
begin
CS_A <= '0'; --Valeur par defaut
CS_B <= '0'; --Valeur par defaut
CS_C <= '0'; --Valeur par defaut
98
Institut REDS
case To_Integer(unsigned(Adresse)) is
when 0
to 47 => CS_A <= '1'; --adresse 0 a 2F
when 48 to 79 => CS_B <= '1'; --adresse 30 a 4F
when 80 to 127 => CS_C <= '1'; --adresse 50 a 7F
when 128 to 255 => null;
--zone libre
when others => CS_A <= 'X'; --simulation
CS_B <= 'X'; --simulation
CS_C <= 'X'; --simulation
end case;
end process;
end Comport;
Exemple 9- 10 : Description du dcodeur dadresses
99
Remarques:
Les composants qui sont dclars dans l'architecture sont les
modules VHDL qui sont utiliss lors de l'assemblage du fichier
structurel. Lors de cette dclaration, il est indispensable de lister
dans l'ordre les signaux d'entre et sortie du module.
Les signaux d'interconnexion qui sont dclars dans l'architecture, sont les signaux internes l'architecture qui servent relier
les diffrents composants entre eux.
Lors de la description de l'assemblage des blocs, il est indispensable de lister les signaux d'interconnexion qui sont connects en
spcifiant la correspondance ( .... => ....).
Sel (slection)
Valeur
(passe)
Valeur + 1
(incr.)
MUX
Valeur
0
4
Val_Cal
4
INCR
1
Val_Inc
Sel
Figure 9- 8 :
100
Institut REDS
Library IEEE;
use IEEE.Std_Logic_1164.all;
use IEEE.Numeric_Std.all;
entity Incr is
port(Valeur : in Std_Logic_Vector(3 downto 0);
Val_Inc : out Std_Logic_Vector(3 downto 0) );
end Incr;
architecture Comport of Incr is
signal Val_Int, Result : Unsigned(3 downto 0);
begin
Val_Int <= Unsigned(Valeur); -- cast
Result <= Val_Int + 1; --incrementation
Val_Inc <= std_Logic_Vector(Result); --cast
--Possible en une affectation sans signaux internes
--Val_Inc <= std_Logic_Vector( Unsigned(Valeur) + 1
);
end Comport;
Exemple 9- 11 : Description dun incrmenteur
Library IEEE;
use IEEE.Std_Logic_1164.all;
entity MUX2_1 is
port (In0, In1 : in Std_Logic_Vector(3 downto 0);
Sel
: in Std_Logic;
Y
: out Std_Logic_Vector(3 downto 0) );
end MUX2_1;
architecture Flot_Don of MUX2_1 is
begin
Y <= In1 when Sel = '1' else
In0;
end Comport;
Exemple 9- 12 : Description dun multiplexeur 2 1 sur 4 bits
101
Library IEEE;
use IEEE.Std_Logic_1164.all;
entity Unit_Cal is
port ( Valeur : in Std_Logic_Vector(3 downto 0);
Sel
: in Std_Logic;
Val_Cal : out Std_Logic_Vector(3 downto 0) );
end Unit_Cal;
architecture Struct of Unit_Cal is
component Incr is --is: accepte en VHDL93
port ( Valeur : in Std_Logic_Vector(3 downto 0);
Val_Inc : out Std_Logic_Vector(3 downto 0)
);
end component;
for all : Incr use entity work.Incr(Comport);
component MUX2_1 is -- is: accepte en VHDL93
port ( In0, In1 : in Std_Logic_Vector(3 downto 0);
Sel
: in Std_Logic;
Y
: out Std_Logic_Vector(3 downto 0)
);
end component;
for all : MUX2_1 use entity work.MUX2_1(Flot_Don);
signal Val_Inc_Int : Std_logic_Vector(3 downto 0);
begin
Cal:Incr port map( Valeur => Valeur,
Val_Inc => Val_Inc_Int
);
Mux:MUX2_1 port map( In0
In1
Sel
Y
);
=>
=>
=>
=>
Valeur,
Val_Inc_Int,
Sel,
Val_Cal
end Struct;
Exemple 9- 13 : Description structurelle de lunit de calcul
102
Chapitre 10
103
CLK
ar
Reset
Figure 10- 1 : Symbole du flip-flop D
library IEEE;
use IEEE.Std_Logic_1164.all;
entity DFF is
port(Reset :
CLK
:
D
:
Q
:
end DFF;
in
in
in
out
104
Institut REDS
end Comport;
Exemple 10- 1 : Description dun flip-flop D
Remarque:
La description du flip-flop D est simple. Il n'y a pas de dcodeur d'tat
futur et de dcodeur de sortie. La description comprend uniquement le processus de mmorisation.
library IEEE;
use IEEE.Std_Logic_1164.all;
entity LatchD is
port(G : in Std_Logic; --entre de commande
D
: in Std_Logic;
Q
: out Std_Logic );
end LatchD;
105
Si les sorties dpendent des entres, connecter celles-ci sur le dcodeur de sorties
REG
Actions_Asynchrone
Horloge
Dcodeur
de sorties
Entres
Dcodeur
d'tats futur
Etat_Futur
Sorties
Etat_Present
D
106
Institut REDS
library IEEE;
use IEEE.Std_Logic_1164.all;
use IEEE.bibliothques_utiles.all;
entity Nom_Du_Module is
port ( Nom_Entre : in Std_Logic;
....
Nom_Sortie : out Std_Logic);
end Nom_Du_Module;
architecture Type_De_Description of Nom_De_Module is
signal Etat_Present, Etat_Futur : Std_Logic_Vector(N-1 downto 0);
begin
------------------------------------------------------------------------------ Description decodeur d'etat futur (combinatoire)
----------------------------------------------------------------------------Etat_Futur <= .... when Condition_1 else
.... when Condition_2 else
...;
------------------------------------------------------------------------------ processus decrivant la memorisation (registre)
----------------------------------------------------------------------------Mem: process(Horloge, Actions_asynchrone )
begin
if (Action_asynchrone = '1') then
Etat_Present <= Etat_Initial;
elsif Rising_Edge(Horloge) then
Etat_Present <= Etat_Futur;
end if;
end process;
------------------------------------------------------------------------------ Description decodeur de sorties (combinatoire)
----------------------------------------------------------------------------Sortie <=.... when Etat_present = Etat_i else
.... when Etat_present = Etat_j else
....;
end Type_De_Description;
Dans la forme de base donne ci-dessus, les dcodeurs sont dcrit avec
linstruction concurrente when ... else. Il est possible de dcrire ces dcodeurs avec des instructions squentiels (dans un process) dans les cas plus
complexes. Le dcodeur d'tat futur et le dcodeur de sorties dpendant des
mmes entres sont parfois runis.
107
REG_4
Reset
Set_s
2S
Enable
G1
Horloge
Val
C2
1,2 D
Entres
Sorties
Reset
asynchrone
Set_s
synchrone
Enable
Horloge
Q+
Val
Val
Remarque:
Lorsque la sortie vaut Q, cela veut dire que le registre garde son tat prsent.
Voici la description synthtisable de ce registre en utilisant la structure
propose prcdemment.
108
Institut REDS
library IEEE;
use IEEE.Std_Logic_1164.all;
entity Reg_4 is
port(Reset
:
Set_s
:
Enable :
Horloge :
Val
:
Q
:
end Reg_4;
in
in
in
in
in
out
109
CTRDIV10
Reset_L
Load_L
M1
M2
Enable
G3
Horloge
Val
RCO
CT=9
C4 / 2,3 +
1,4 D
CPT
Le tableau ci-dessous nous donne la table de fonctionnement du compteur modulo 10. Dans ce tableau toutes les entres sont indiques en logique positive.
Entres
Sorties
Reset
asynchrone
Load
synchrone
Enable
Horloge
Val
CPT+
0000
Val
Val
CPT + 1
CPT
La description synthtisable de ce compteur modulo 10 est donne ciaprs. La description utilise la structure donne prcdemment. Nous
voyions dans ce cas un exemple de dcodeur de sortie. Celui-ci est utilis
pour gnrer le signal RCO.
110
Institut REDS
library IEEE;
use IEEE.Std_Logic_1164.all;
use IEEE.Numeric_Std.all;
entity CPTDIV10 is
port(Horloge, Reset_L : in Std_Logic;
Load_L, Enable
: in Std_Logic;
Val
: in Std_Logic_vector(3 downto 0);
Cpt
: out Std_Logic_Vector(3 downto 0);
RCO
: out Std_Logic );
end CPTDIV10;
architecture Comport of CPTDIV10 is
signal Cpt_futur, Cpt_Present : unsigned(3 downto 0);
signal Reset, Load : Std_Logic;
begin
--adaptation polarite
Reset <= not Reset_L;
Load <= not Load_L;
--Decodeur d'etat futur
--chargement
Cpt_Futur <= Unsigned(Valeur) when (Load = '1')
else
--Comptage: si CPT = 9, prochaine valeur=0000
"0000"
when (Enable = '1')
and (Cpt_Present = 9) else
-sinon incremente Cpt_present
Cpt_Present +1
when (Enable = '1') else
--Maintien
Cpt_Present;
Mem: process (Horloge, Reset)
begin
if (Reset = '1') then
Cpt_Present <= "0000";
elsif Rising_Edge(Horloge) then
Cpt_Present <= Cpt_Futur;
end if;
end process;
--Calcul du report
RCO <= '1' when (Cpt_present = 9) else '0';
--Mise a jour de l'etat du compteur
Cpt <= Std_Logic_Vector(Cpt_present);
end Comport;
Exemple 10- 4 : Description dun compteur modulo 10
111
Dans le paragraphe suivant, nous donnons un exemple simple de machine d'tats. Il s'agit d'un dtecteur de sens de rotation. Cet exemple va nous
permettre de nous familiariser avec la description VHDL d'une machine
d'tat.
112
Institut REDS
Un disque peut tourner dans les 2 sens de rotation possibles, le sens horaire et le sens anti-horaire. Deux capteurs A et B sont disposs 90 l'un
de l'autre, autour du disque. Le disque est "polaris" de faon ce que les
capteurs dtectent un tat logique haut ('1') sur une demi-circonfrence du
disque, et un tat logique bas ('0') sur l'autre demi-circonfrence. Il s'agit
l'aide de la squence de valeurs lues sur les capteurs A et B, de dterminer
dans quel sens tourne le disque.
Nous donnons ci-aprs un dessin schmatique du systme permettant la
dtection du sens de rotation.
Capteur A
Sens horaire
'1'
'0'
'1'
Sens anti-horaire
'0'
Capteur B
Nous pouvons dfinir le fonctionnement du dtecteur laide dun graphe des tats (version de Mealy).
10/0
Etat_i
code
Etat_a
"00"
11/0
00/1
11/0
Etat_d
"10"
00/1
10/1
10/0
01/1
01/1
10/1
11/1
01/0
Etat_c
"11"
Etat_b
"01"
00/0
11/1
00/0
01/0
Figure 10- 7 :
113
Remarque:
Le graphe d'tats est directement donn simplifi sans aucun dveloppement ou explication. La conception dune machine squentielles ne fait
pas partie des objectifs de ce manuel.
Le graphe des tats obtenu prcdemment est utilis pour la description
en VHDL du systme. Le graphe dfinit quel est ltat futur en fonction de
ltat prsent et des entres. Cela correspond au dcodeur dtat futur. De
mme le graphe indique pour chaque tat prsent la valeur des sorties. Il
sagit dans ce cas du dcodeur de sortie.
Dans la description VHDL de la machine dtat, donne ci-aprs, nous
avons fusionn les deux dcodeurs. Nous avons utilis un seul process pour
les deux parties combinatoires. A la fin de la description se trouve la description du registre correspondant aux bits dtats. Nous avons utilis des
constantes pour dfinir le codage correspondant chaque tat. Cela amliore la lisibilit de la description et permet de modifier le codage de la machine sans rcrire la description.
library IEEE;
use IEEE.Std_Logic_1164.all;
entity Detect_Sens is
port ( Reset
: in
Horloge : in
Capt_A
: in
Capt_B
: in
Sens
: out
end Detect_Sens;
Etat_a
Etat_b
Etat_c
Etat_d
:
:
:
:
Std_logic_Vector(1
Std_logic_Vector(1
Std_logic_Vector(1
Std_logic_Vector(1
downto
downto
downto
downto
0)
0)
0)
0)
:=
:=
:=
:=
"00";
"01";
"11";
"10";
114
Institut REDS
case Etat_Present is
when Etat_a =>
if (Capt_BA = "00") then
Etat_Futur <= Etat_a;
Sens
<= '1';
elsif (Capt_BA = "01") then
Etat_Futur <= Etat_b;
Sens
<= '1';
elsif (Capt_BA = "10") then
Etat_Futur <= Etat_a;
Sens
<= '0';
else --cas (Capt_BA = "11")
Etat_Futur <= Etat_d;
Sens
<= '0';
end if;
when Etat_b =>
if (Capt_BA = "00") then
Etat_Futur <= Etat_b;
Sens
<= '0';
elsif (Capt_BA = "01") then
Etat_Futur <= Etat_b;
Sens
<= '1';
elsif (Capt_BA = "10") then
Etat_Futur <= Etat_a;
Sens
<= '0';
else --cas (Capt_BA = "11")
Etat_Futur <= Etat_c;
Sens
<= '1';
end if;
when Etat_c =>
if (Capt_BA = "00") then
Etat_Futur <= Etat_b;
Sens
<= '0';
elsif (Capt_BA = "01") then
Etat_Futur <= Etat_c;
Sens
<= '0';
elsif (Capt_BA = "10") then
Etat_Futur <= Etat_d;
Sens
<= '1';
else --cas (Capt_BA = "11")
Etat_Futur <= Etat_c;
Sens
<= '1';
end if;
when Etat_d =>
if (Capt_BA = "00") then
Etat_Futur <= Etat_a;
Sens
<= '1';
elsif (Capt_BA = "01") then
Etat_Futur <= Etat_c;
Sens
<= '0';
elsif (Capt_BA = "10") then
Etat_Futur <= Etat_d;
Sens
<= '1';
else --cas (Capt_BA = "11")
Etat_Futur <= Etat_d;
Sens
<= '0';
end if;
115
116
Chapitre 15
Annexes
1980
1987
1993
1993
1994
1995
1996
1997
1999
169
abs
access
after
alias
all
and
architecture
array
assert
attribute
begin
block
body
buffer
bus
reject
rem
report
return
rol
ror
label
library
linkage
loop
select
severity
signal
shared
sla
sll
sra
srl
subtype
map
mod
case
component
configuration
constant
disconnect
downto
else
elsif
end
entity
exit
file
for
function
generate
generic
group
guarded
170
if
impure
in
inertial
inout
is
nand
new
next
nor
not
null
then
to
transport
type
of
on
open
or
others
out
unaffected
units
until
use
package
port
postponed
procedure
process
pure
wait
when
while
with
range
record
register
variable
xnor
xor
Institut REDS
syntaxe
VHDL
nom
classe
priorit
exemple
abs
valeur absolue
op. divers
abs A
not
non logique
op. divers
not A
**
puissance
op. divers
A**B
multiplication
op. de multiplication
A*B
division
op. de multiplication
A/B
mod
modulo
op. de multiplication
A mod B
rem
remainder
op. de multiplication
A rem B
plus
op. de signe
+A
moins
op. de signe
-A
addition
op. d'addition
A+B
soustraction
op. d'addition
A-B
&
concatnation
op. d'addition
- D1&D0 "vh"&"dl"
sll
Vecteur sll 3
srl
Vecteur srl 1
sla
Nombre sla 2
sra
Nombre sra
4
rol
rotation gauche
Valeur rol 2
ror
rotation droite
Valeur ror 4
quivalent
op. relationnels
when A=B
/=
diffrent de
op. relationnels
when A/=B
<
plus petit
op. relationnels
when A<B
<=
op. relationnels
when A<=B
>
plus grand
op. relationnels
when A>B
171
172
syntaxe
VHDL
nom
classe
priorit
exemple
>=
op. relationnels
when A>=B
and
et
op. logiques
A and B
or
ou
op. logiques
A or B
nand
non et
op. logiques
A nand B
nor
non ou
op. logiques
A nor B
xor
ou exclusif
op. logiques
A xor B
xnor
non ou exclusif
op. logiques
(VHDL93)
A xor B
Institut REDS
To_integer(s)
To_signed(i, Nbit)
Std_Logic_Vector
Integer range
unsigned(v)
To_unsigned(i,Nbits)
To_integer(u)
std_logic_vector(s)
Unsigned
Numbers
Contact:
Adresse:
173
15-5 Bibliographie
174
[1]
Le langage VHDL,
Jacques Weber, Maurice Meaudre,
DUNOD, 2001,
ISBN : 2-10-004755-8
[2]
[3]
[4]
[5]
[6]
[7]
[ 8]
[9]
Introduction au VHDL,
C. Guex,
EIVD, 1997
[ 10 ]
Institut REDS
175
176