Uploaded by Marvel Nemesis

Cours-VHDLs

advertisement
CHAPITRE 1 :
Les circuits logiques
programmables (PLD)
GRARI K.
1
I. INTRODUCTION
1) Circuit logique programmable
• Un circuit logique programmable, ou réseau logique
programmable, est un circuit intégré logique qui peut
être reconfiguré après sa fabrication.
• Il est composé de nombreuses cellules logiques
élémentaires et bascules logiques librement connectables
• Comme dans toute réalisation en logique câblée, une
fonction logique est définie par les interconnexions entre
des opérateurs combinatoires et des bascules
GRARI K.
2
I. INTRODUCTION
2) Structure de base d’un PLD
La plupart des PLDs suivent la structure suivante :
 Un ensemble d’opérateurs « ET » sur lesquels viennent se
connecter les variables d’entrée et leurs compléments.
 Un ensemble d’opérateurs « OU » sur lesquels les sorties
des opérateurs « ET » sont connectées.
 Une éventuelle structure de sortie (Portes inverseuses,
logique 3 états, registres...).
GRARI K.
3
I. INTRODUCTION
2) Structure de base d’un PLD
• Les deux premiers ensembles forment chacun ce qu’on
appelle une matrice. Les interconnexions de ces matrices
doivent être programmables.
• C’est la raison pour laquelle elles sont assurées par des
fusibles qui sont « grillés » lors de la programmation.
• Lorsqu’un PLD est vierge toutes les connexions sont
assurées.
GRARI K.
4
I. INTRODUCTION
2) Structure de base d’un PLD : exemple
• La figure ci dessous représente la structure interne d’un
PLD ayant ses fusibles intacts. Les équations logiques :
Q1
Q0
Fusible intact
a
b
GRARI K.
5
I. INTRODUCTION
2) Structure de base d’un PLD : exemple
• Si on veut obtenir les fonctions ci dessous« grillera » des
fusibles de façon à obtenir le schéma suivant :
Q1
Q0
Fusible intact
a
b
GRARI K.
6
I. INTRODUCTION
3) Les différents types des circuits
intégrés
• Les standards :
– Codeurs, Latchs, AOP, CAN, etc.
• Avantages :
– Leur coûts sont faibles car ils sont produits en très grandes quantité
GRARI K.
7
I. INTRODUCTION
3) Les différents types des circuits
intégrés
• Un ASIC :
– application-specific integrated circuit, littéralement « circuit intégré
propre à une application », est un circuit intégré développé pour un
client)c’ est un circuit intégré (micro-électronique) spécialisé. En
général, il regroupe un grand nombre de fonctionnalités uniques ou sur
mesure.
• Avantages :
– Solution rentable lors d’une fabrication à grand nombre d’exemplaire
– Maximum de performances
GRARI K.
8
I. INTRODUCTION
3) Les différents types des circuits
intégrés
• Les programmables:
– C’est un compromis entre les deux types de circuits précédents :
– Configurables : PAL, CPLD, FPGA
– Programmables : Microprocesseurs, microcontrôleurs
• Avantages :
– Il faut viser le maximum d’applications spécifiques possibles grâce à
un unique circuit standard
– L’intérêt des programmables est de pouvoir couvrir un large spectre
d’applications
GRARI K.
9
II. Les différents types de PLD
1) Quatre familles de PLD
PLD
PAL
GAL
EPLD
GRARI K.
FPGA
10
II. Les différentes familles de PLD
1) PAL (Programmable Array Logic):
•
•
•
Développés au début des années 70 par MMI (exAMD)
La programmation se fait par destruction de
fusibles Aucun fusible n’est grillé à l’achat de la
PAL
La fusion des fusibles est obtenue en appliquant à
leurs bornes une tension de 11,5 V pendant 10 à
50µS (leur tension de fonctionnement est environ
de 5V) en utilisant un programmateur adapté.
GRARI K.
11
II. Les différentes familles de PLD
1) PAL (Programmable Array Logic):
•
La plupart des P.A.L. sont constitués :
–
–
–
–
Un ensemble de portes « ET » sur lesquelles viennent se
connecter les variables d’entrée et leurs compléments.
Un ensemble de portes « OU » sur lesquelles les sorties
des opérateurs « ET » sont connectées les variables
d’entrée.
Le nombre d’entrées varie entre 10 et 22.
Le nombre de sorties varie entre 1 et 10.
GRARI K.
12
II. Les différentes familles de PLD
1) PAL (Programmable Array Logic):
GRARI K.
13
II. Les différentes familles de PLD
1) PAL (Programmable Array Logic):
•
Exemple : PAL22V10
GRARI K.
14
II. Les différentes familles de PLD
2) GAL (Generic Array Logic):
•
•
•
•
Un GAL est un PAL effaçable électriquement
Développés il y a un peu plus de 10 ans, par
l’entreprise LATTICE
Ils peuvent donc être reprogrammés à volonté sans
pour autant avoir une durée de vie restreinte.
dans leur structure interne les GALs sont
constitués de transistor CMOS alors que les PALs
classiques sont constitués de transistors bipolaires.
GRARI K.
15
II. Les différentes familles de PLD
2) GAL (Generic Array Logic):
•
•
•
•
La consommation des GALs est beaucoup plus
faible.
D’autres constructeurs fabriquent les GAL’s en les
appelant « PAL CMOS ».
Les GAL sont dotés d’un bit de sécurité qui peut
être activé lors de la programmation empêchant
ainsi toute lecture du contenu du circuit.
Ce bit est remis à zéro seulement en effaçant
complètement le GAL.
GRARI K.
16
II. Les différentes familles de PLD
2) GAL (Generic Array Logic):
•
Exemple : GAL16V8
GRARI K.
17
II. Les différentes familles de PLD
3) EPLD (Erasable Programmable Logic
Device)
•
•
Circuit logique reprogrammable, effaçables par
exposition aux ultraviolets
Avec une grande capacité
GRARI K.
18
II. Les différentes familles de PLD
4) FPGA (Forecasting Programmable
Gate Array)
•
•
•
Réseau de portes programmables sur sites
Evolution de CPLD mais avec un concept différent
Offre un niveau d’intégration très élevé par rapport
aux autres
GRARI K.
19
II. Les différentes familles de PLD
4) FPGA (Forecasting Programmable
Gate Array)
Blocs logiques
Interconnexion
programmable
Bloc
d’entrée/sortie
GRARI K.
20
III. FPGA
1)
•
Les différents types
FPGA programmable une seule fois (OTP)
–
–
–
•
Logique combinatoire : portes logiques traditionnelles AND
et OR
Logique séquentielle : flip-flops
Interconnexions : type anti-fusible
FPGA reprogrammable (SRAM)
–
–
–
–
Logique combinatoire dans des look up tables (LUT) : type
SRAM.
Logique séquentielle : flip-flops.
Possibilité de configuration des blocs logiques
Il faut une mémoire externe (par ex. PROM) pour la
sauvegarde de la configuration (en cas de hors tension)
GRARI K.
21
III. FPGA
2) Constitution des FPGA
• Constituée de deux couches:
–
–
La couche opérative comporte une structure
régulière de cellules logiques identiques
entourées d’un réseau d’interconnexions
La couche de configuration est un ensemble
de cellules mémoires statiques (SRAM) qui,
d’une part, configurent les cellules logiques de
la couche opérative et, d’autre part, établissent
leurs interconnexions (chemins de routage)
GRARI K.
22
III. FPGA
2) Constitution des FPGA
• Constituée de deux couches:
GRARI K.
23
III. FPGA
3) Routage
•
•
Les algorithmes de placement et de routage
font un compromis entre l’utilisation des
ressources disponibles et la vitesse
Les délais de propagation des signaux
dépendent du routage (non prédictible)
GRARI K.
24
III. FPGA
3) Routage
Cellule logique
Commutateur
•Point de connexion
(passe-transistor)
•Génère un temps
de propagation
GRARI K.
25
III. FPGA
4) Le processus de configuration (Ex. :
carte SPARTAN-3E)
•
Tout d’abord, la configuration (bitstream) est
enregistrée dans un circuit mémoire flash PROM
externe, pour permettre la conservation des
informations lorsque le système est hors tension
Téléchargement, via un
câble USB,
GRARI K.
26
III. FPGA
4) Le processus de configuration (Ex. :
carte SPARTAN-3E)
•
Après la mise sous tension, ou en appuyant sur le
bouton configuration restart, le bitstream est copié
de manière série dans la SRAM du circuit FPGA
Flash PROM
Bouton
« configuration restart »
GRARI K.
27
CHAPITRE 2 :
Introduction et règle d’écriture de
VHDL
GRARI K.
28
I. INTRODUCTION
1) VHDL:
GRARI K.
29
I. INTRODUCTION
1) L’histoire de VHDL
• 1980 : Le DOD a financé un projet pour créer un
langage de description de matériel (HDL)
• 1987 : le langage de description VHDL est devenu
une norme IEEE numéro 1076 .
• 1993 : VHDL est révisé pour supprimer quelques
ambiguïtés et améliorer la portabilité du langage
La norme est révisée tous les 5 ans (P1076-87,
P1076-93, P1076-2000, P1076-2002, P1076-2006)
GRARI K.
30
I. INTRODUCTION
1) L’utilité de VHDL
• VHDL est un langage de description matériel (HDL)
destiné à représenter le comportement d’un système
électronique numérique.
• Mais aussi à synthétiser le système c'est-à-dire être le
transformé par des logiciels adaptés (synthétiseurs) en
une série de portes logiques (NETLIST) prêtes à être
implémentées sur un circuit reconfigurable (FPGA,EPLD,
CPLD…)
• VHDL est l'un des trois grands langages de description de
matériel utilisés majoritairement dans l'industrie, avec
Verilog et SystemC.
GRARI K.
31
II. Les avantages de VHDL
1) Un langage complet
•
VHDL couvre les différentes étapes de la conception de
systèmes numériques: Spécifications, modélisation,
simulation, synthèse.
Spécifications
Synthèse
VHDL
Modélisation
Simulation
GRARI K.
32
II. Les avantages de VHDL
2. Un langage indépendant
•
VHDL n’appartient à personne en particulier, qui aurait
le pouvoir sur son évolution et son utilisation. Son
indépendance vis-à-vis des architecture et technologie
est totale.
GRARI K.
33
II. Les avantages de VHDL
3. Un langage flexible
•
VHDL permet à l’ utilisateur d’effectuer ses descriptions
en se plaçant à différents niveaux d’abstraction:



Niveau comportemental : haut niveau
Niveau intermédiaire
Niveau structurel : bas niveau
GRARI K.
34
II. Les avantages de VHDL
4. Un langage moderne
•
Sa syntaxe est particulièrement lisible et permet de
minimiser les commentaires, ses mécanismes de
partitionnement et d’empaquetage permettent la
conception modulaire, l’archivage, et la réutilisation.
GRARI K.
35
II. Les avantages de VHDL
5. Un langage ouvert
•
VHDL est standardisé en 1987, grâce à son évolution il a
put durer, VHDL est donc un langage ouvert mais ses
évolutions sont contrôlées en devenant elles aussi
standard.
GRARI K.
36
II. Règles d’écriture de VHDL
1. Commentaires
•
•
Ils débutent par un double tiret du 6 « -- » et se
prolongent jusqu’à la fin de la ligne. Si le commentaire
doit se poursuivre sur la ligne suivante, un double tiret
est nécessaire.
Exemple:
A<=B and C;
--en VHDL le symbole <= effectue une
-- une assignation : A prend la valeur
-- de l’ opération (B and C)
GRARI K.
37
II. Règles d’écriture de VHDL
2. Majuscules et minuscules
•
VHDL ne distingue pas les majuscules des minuscules:
pour lui BONJOUR est identique à bonjour ou à
BoNjOuR
GRARI K.
38
II. Règles d’écriture de VHDL
3. Identificateurs
•
VHDL manipule de nombreux objets : signaux,
paquetages, processus, etc. Désignés par leur nom. Les
règles de dénomination sont les mêmes pour tous:





Le nom est constitué d’une suites de caractères : 26 lettres de
l’alphabet, les 10 chiffres et tiret 8 ‘_’
Le premier caractère doit être une lettre
Il ne peut y avoir deux tirets 8 « _ » de suite
L’identificateur ne peut se terminer par « _ »
Le nom ne doit pas être un mot réservé de VHDL
GRARI K.
39
II. Règles d’écriture de VHDL
4. Noms réservés
•
Ces mots-clés ne peuvent être utilisés comme
identificateurs:
GRARI K.
40
II. Règles d’écriture de VHDL
abs
access
after
alias
all
and
configuration impure
constant
in
disconnect
inertial
downto
inout
else
is
elsif
label
null
of
on
open
or
others
rem
report
return
rol
ror
select
type
unaffected
units
until
use
variable
architecture
array
assert
attribute
begin
block
body
buffer
bus
case
component
end
entity
exit
file
for
function
generate
generic
group
guarded
if
out
package
port
postponed
procedure
process
pure
range
record
register
reject
severity
signal
shared
sla
sll
sra
srl
subtype
then
to
transport
wait
when
while
with
xnor
xor
library
linkage
literal
loop
map
mod
nand
new
next
nor
not
GRARI K.
41
II. Règles d’écriture de VHDL
5. Littéraux
•
Ce sont des valeurs explicites attribués à différents
objets: constantes, variables…
 Entier : 123 1_2_3
 Entier basé : base #valeur# : 2#10#
16#1F#
 Valeurs physiques : toujours laisser un espace entre la valeur
et l’unité : 100 ps
2 ns
5 V
 Caractères : ils s’ écrivent entre apostrophe : ‘A’,‘a’,‘%’,
‘ ‘ (espace), les caractères acceptés sont les caractères ASCII
imprimables. NB ‘A’ est différent de ‘a’.
GRARI K.
42
II. Règles d’écriture de VHDL
5. Littéraux
 Chaine de caractère : elles s’ écrivent entre guillemets :
"Bonjour" "bonjour" (ces deux valeurs sont différentes).
Une chaine de caractère peut être obtenue en concaténant
plusieurs chaine au moyen de l’operateur & .
 Bits: entre apostrophes, et ont pour seules valeurs ‘0’ et
‘1’. Le type généralisé std_logic utilise en outre les valeurs
‘U’, ‘X’, ‘H’, ‘L’, ‘W’, ‘Z’, et ‘-’.
 Bus: ils s’écrivent entre guillemets constituées des 0 et 1:
"00110" . Par défaut la base de représentation est binaire , mais
il est possible d’ utiliser une notation octale ou hexadécimale en
préfixant la chaine: O"47" X "12AC"
GRARI K.
43
II. Règles d’écriture de VHDL
6. Espaces
 Les espaces ne sont pas significatifs, sauf dans les
valeurs littérales et pour la séparation des
identificateurs, ils ne sont pas nécessaire entre
identificateurs et symboles. Les deux lignes suivantes
sont correctes et équivalentes:
A<=B and C;
A
<=
B
and
GRARI K.
C
;
44
II. Règles d’écriture de VHDL
7. Sauts de lignes
 Une instruction peut s’étendre sur plusieurs lignes,
tant que le saut de ligne ne s’ effectue pas au milieu
d’un identificateur, d’un symbole d’operateur, ou d’
un littéral.
A<=B When C=‘0’ else D;
Peut aussi s’ écrire:
A<=B When C=‘0’
else D;
GRARI K.
45
II. Règles d’écriture de VHDL
8. Fin d’instruction
 Un fin d’instruction est repéré par le point virgule ‘;’
c’est l’une des erreurs les plus fréquentes.
GRARI K.
46
CHAPITRE 3 :
Structure d’une description
VHDL
GRARI K.
47
Exemple d’une description VHDL
library ieee;
use ieee.std_logic_1164.all;
entity add is
port(a,b: in std_logic;
c: out std_logic);
end add;
architecture archi1 of add is
begin
c<=a and b;
GRARI K.
end archi1;
Déclaration des bibliothèques
Déclaration de l’entité
a
b
c
Déclaration d architecture
a
c
b
48
I. Bibliothèque : Library
• Une bibliothèque est une bibliothèque ou sont
stockées des entités, des architectures, des
paquetages.
• Elles sont déclarées en en-tête d’une description
VHDL par l’instruction library
• l’instruction use permet de sélectionner quels
objets pourront être utilisés dans la suite de la
description.
• Les bibliothèques work et std sont toujours
accessible sans besoin de déclaration
GRARI K.
49
I. Bibliothèque : Library
1. exemple
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY « nom »;
•« nom » : est symbolique et
ENTITY cmpl_sig IS
définit par l'outil de compilation
PORT ( a, b, sel : IN std_logic;
•Note : Work et STD pas
x, y, z : OUT std_logic;
END cmpl_sig;
nécessaire de les déclarer
ARCHITECTURE logic OF cmpl_sig IS
USE nom_lib.nom-pacq.objet
BEGIN
•All est un mot réservé tous les
x <= (a AND NOT sel) OR (b AND sel);
pacquages
y <= a WHEN sel='0' ELSE b;
WITH sel SELECT
Placer la bibliothèque en premier
z <= a WHEN '0',
permettra à tout les unités de les
b WHEN '1',
utilisées
'0' WHEN OTHERS;
END logic;
CONFIGURATION cmpl_sig_conf OF cmpl_sig IS
FOR logic
END FOR;
END cmpl_sig_conf;
GRARI K.
50
I. Bibliothèque : Library
2.
Bibliothèque STD
•Contient les pacquages suivants:
– standard (Types: Bit, Booléen, entier, réel, et le temps.
Toutes les fonctions qui supportent ces types)
–TEXTIO (opérateur de fichier)
•Une bibliothèque implicite
– pas besoin d’ être déclaré
GRARI K.
51
I. Bibliothèque : Library
3.
Types définis dans le pacquage standard
•Bit:
–2 valeurs logiques (‘0’,’1’)
•signal S1 : bit;
–Bus de Bit (bit_vector)
•signal S3: bit_vector(3 downto 0);
•signal temp : bit_vector(0 to 3) ;
•Type Booléen
•Vrai , Faux
GRARI K.
52
I. Bibliothèque : Library
3.
Types définis dans le pacquage standard
• Entier: Les valeurs positives et négatives en
décimal
–signal N : integer; -- nombre de 32 bits
–signal int_tmp1 : integer range 0 to 255;
--nombre de 8 bits
–N.B. : Le paquet standard a d'autres types
GRARI K.
53
I. Bibliothèque : Library
4.
Bibliothèque IEEE
• Contient les packages suivants:
–std_logic_1164 (types de std_logic et fonctions associées)
–std_logic_arith (fonctions arithmétiques)
–std_logic_signed (fonctions arithmétiques signées)
–std_logic_unsigned (fonctions arithmétiques non signé)
GRARI K.
54
I. Bibliothèque : Library
4.
Bibliothèque IEEE
a) le package std_logic_1164 :
–Définition des types: std_logic et std_logic_vector
•‘U’ : non initialisé
•‘X’ : niveau inconnu, forçage fort
•‘0’ : niveau 0, forçage fort
•‘1’ : niveau 1, forçage fort
•‘Z’ : haute impédance
•‘W’ : niveau inconnu, forçage faible
•‘L’ : niveau 0, forçage faible
•‘H’ : niveau 1, forçage faible
•‘-’: quelconque
GRARI K.
55
I. Bibliothèque : Library
4.
Bibliothèque IEEE
b) le package std_logic_arith :
–Les opérateurs de base :
 +, -, *,
–Les comparateurs de base :
 <=, >=, /=, =
GRARI K.
56
I. Bibliothèque : Library
4.
Bibliothèque IEEE
b) Déclaration d’une bibliothèque:
LIBRARY <nom de bibliothèque>;
USE <nom de bibliothèque >.<nom de paquetage >.all;
GRARI K.
57
II. Entité
1.
L’entité
•
l'entité est une vue externe du module, elle définit
toutes les entrées et les sorties
IN1
IN2
IN3
BOITE NOIRE
Entrées
Sorties
Types
GRARI K.
OUT1
OUT2
58
II. Entité
2.
Syntaxe
entity Nom_entité is
port(Nom_entrée_1 : in type;
Nom_entrée_2 : in type;
Nom_entrée_3 : in type;
.....
Nom_sortie_1 : out type;
Nom_ent_sor_1 : inout type);
end Nom_entité;
GRARI K.
59
II. Entité
3. Port:
•Les entrées et les sorties d'un module sont toujours
représentées par un port, il en existe 4 différents types,
qui sont:
–
–
–
–
in : port d'entrée.
out : port de sortie.
inout : port bidirectionnel (utilisation pour des bus).
buffer : port de sortie qui peut être relu (ne pas
utiliser)
GRARI K.
60
II. Entité
3. Port:
•Un signal de type buffer ne peut pas être connecté
directement avec un signal de type out (le VHDL est
typé). Il est nécessaire d’utiliser un cast. Cela n’est pas
très pratique. Nous déconseillons l’utilisation de ce
type! Nous verrons plus tard comment se passer de ce
type en utilisant un signal interne dans l’architecture
GRARI K.
61
II. Entité
4. Exemple
•Prenant comme exemple l'entité d'un multiplexeur 8 à 1
avec 3 entrées de sélection.
Sel
A
B
C
D
E
F
G
H
2
1
0
Multiplexeur
S
8à1
GRARI K.
62
II. Entité
4. Exemple
•Ecrire l’entité d’un additionneur Add4 de deux mots, a
et b, de 4 bits en entrée, avec une retenue entrante retin,
et une sortie som sur 4 bits avec une retenue sortante
retout.
GRARI K.
63
II. Entité
4. Exemple
•Dessiner le schéma du composant correspondant à
l’entité suivante :
entity exemple is
port(b : in bit;
clk : in bit;
raz : in bit;
a : inout bit);
end exemple;
GRARI K.
64
III. Architecture
1.
L’architecture
• Le corps d’une architecture définit le corps d’une
entité de conception. Il spécifie les relations entre les
entrées et les sorties d’une entité de conception.
• La partie déclarative déclare des objets qui seront
visibles et utilisables par l’entité de conception.
• Toutes les instructions qui décrivent le corps de
l’architecture sont des instructions concurrentes qui
s’exécutent de façon asynchrone les unes par rapport
aux autres.
GRARI K.
65
II. Architecture
1.
L’architecture
• La relation entre les entrées et les sorties d’une entité
peut être exprimée sous forme Logique, TDV, Flotdon, Comportementale, M-Etat, Structurelle, ces
formes peuvent coexister à l’intérieur d’un même
corps d’architecture:
– Logique: Equations logiques, description du
fonctionnement directement avec des équations logiques.
– TDV: Table de vérité, description du fonctionnement avec
une table de vérité (utilisation de l'instruction with ...
select).
GRARI K.
66
II. Architecture
1.
L’architecture
– Flot_Don: Flot de données, description du fonctionnement
très proche du fonctionnement logique (utilisation des
instructions concurrentes <=, when ...else ou with ... select)
– Comportementale: description du fonctionnement en
décrivant le comportement (exemple: description avec un
process et de l'instruction if... then ... else)
– M _Etat: Machine d'état, description du fonctionnement à
l'aide d'une machine d'état
– Structurelle: description du module en donnant les
interconnexions entre différents sous modules (description
hiérarchique avec l'instanciation de composant)
GRARI K.
67
II. Architecture
1.
L’architecture
• Dans un circuit logique, toutes les portes fonctionnent
simultanément. On dit alors que les portes
fonctionnent de manière concurrente, c'est-à-dire que
l'ensemble des opérations se déroulent en parallèle.
• Le langage VHDL a été créé dans le but de pouvoir
décrire le comportement d'un circuit. Le langage
dispose donc d'instructions concurrentes. Cette notion
est particulière au langage de description de matériel.
GRARI K.
68
II. Architecture
1.
L’architecture
• Parfois, il est plus performant de décrire le
comportement en utilisant un algorithme en utilisant
une instruction tel que le if .. then .. else . C'est la
raison de l’existence, dans le langage VHDL, d’une
instruction concurrente particulière, l’instruction
process. Celle-ci permet de décrire le comportement
du circuit avec des instructions séquentielles. A
l'intérieur de cette instruction le déroulement des
instructions est séquentiel.
GRARI K.
69
III. Architecture
2.
Syntaxe
architecture nom_architecture of nom_entité is
--déclarations sous-programmes, types
--constantes, signaux, alias, composants
Zone de déclaration
begin
Instructions_Concurrentes;
process (Liste_De_Sensibilité)
Begin
Instructions_Séquentielles;
end process;
end nom_architecture;
GRARI K.
Zone de définition
70
III. Architecture
3.
Exemple
architecture Flot_Don of Multiplexeur is
begin
with Sel select
S <= A when "000",
B when "001",
C when "010",
D when "011",
E when "100",
F when "101",
G when "110",
H when "111",
'X' when others;
end Flot_Don;
GRARI K.
71
III. Architecture
3.
Exemple
•
Ecrire l’architecture (description logique) d’un
additionneur Add4 de deux mots, a et b, de un bit
en entrée, une sortie som somme sur un bits avec
une retenue sortante ret.
GRARI K.
72
IV. Package
•
•
•
VHDL supporte et encourage la conception
modulaire et hiérarchique : les paires
entités/architectures peuvent être réutilisée et
partagées.
Les structures permettant de regrouper ces
entités/architectures pour faciliter la réutilisation
sont appelées packages (paquetages)
Certains paquetages sont inclus dans l’outils de
développement d'autres sont créer par l’utilisateur
afin de regrouper des définitions, des sousprogrammes, .. pour son projet. (chapitre 5)
GRARI K.
73
V. Description comportementale et
structurelle
•
Il existe deux façons distinctes de décrire
une structure. L'une dite comportementale et
l'autre structurelle.
Comportemental • Ce que fait l’entité
Structurel
• Comment elle le fait
GRARI K.
74
V. Description comportementale et
structurelle
1.
Description comportementale
•
La description de la fonctionnalité est faite sans
hypothèse sur sa réalisation concrète, ni référence
à l’architecture matérielle.
C’est sur l’intelligence du synthétiseur que repose
l’efficacité de la méthode, à lui d’interpréter la
description pour la traduire en logique concrète.
Elle favorise la portabilité, la lisibilité, la
maintenance et l’évolutivité.
•
•
GRARI K.
75
V. Description comportementale et
structurelle
1.
Description comportementale : exemple
comparateur
A
B
Comparateur
=
C
Entity comparateur is
A,B : in bit;
C : out bit;
End comparateur;
GRARI K.
76
V. Description comportementale et
structurelle
1.
Description comportementale : exemple
comparateur
architecture comportem1 of comparateur is
Begin
C <= 1 when A=B else ‘0’;
end comportem1;
•
Ou avec l’équation xor
architecture comportem2 of comparateur is
Begin
C <= not(A xor B);
end comportem2;
GRARI K.
77
V. Description comportementale et
structurelle
2.
Description structurelle
•
La fonctionnalité est décrite par utilisation et
interconnexion de composant élémentaires, de
manière similaire à un schéma. La description
s’attache principalement à la réalisation, à
l’implémentation de la fonction.
Le qualificatif « structurel» désigne, dans la
terminologie VHDL, ce qui est interconnecté par
des signaux
•
GRARI K.
78
V. Description comportementale et
structurelle
2.
Description structurelle
•
Dans cette forme de description, le concepteur se
substitue largement au synthétiseur dans sa
fonction d’interprétation
VHDL inclut les mécanismes et constructions
permettant de choisir le niveau de description le
plus approprié
•
GRARI K.
79
V. Description comportementale et
structurelle
2.
Description structurelle
•
À tout moment, éventuellement d’une ligne de
description à l’autre , c’est le concepteur qui
décide du niveau de description : les deux niveau
et leurs intermédiaires peuvent coexister
pacifiquement au sein d’une même description
GRARI K.
80
V. Description comportementale et
structurelle
2.
Description structurelle : exemple
comparateur
•
Une description structurelle est l’équivalent littéral
d’un schéma représentant l’interconnexion de portes
élémentaires.
Ici le comparateur est composé d’un composant «ou
exclusif à deux entrées» et un composant «inverseur»
•
A
C
B
GRARI K.
81
V. Description comportementale et
structurelle
2.
Description structurelle : exemple
comparateur
Use work.gatespkg.all;
architecture structurelle of comparateur is
Signal int1 : bit;
begin
U0 : xor2 port map (A,B,int1);
U1 : inv port map (int1,C);
end structurelle;
GRARI K.
82
CHAPITRE 4 :
Les objets et les éléments de
VHDL
GRARI K.
83
I. Les objets
1.
Signaux
•
Les signaux représentent l'interconnexion physique
(fils) processus (fonctions) qui communiquent
entres eux
Les signaux peuvent être déclarés dans les
packages, entité et architecture
Un signal interne n’a pas de mode (sens), ce n’est
qu’un fil d’interconnexion
•
•
Fonction 1
Signal
GRARI K.
Fonction 2
84
I. Les objets
1.
Signaux
•
Déclaration des signaux:
signal bus_local : std_logic_vector(7 downto 0) ;
signal bus_ent, bus_sort : bit;
GRARI K.
85
I. Les objets
1.
Signaux
•
Affectation d’un signal par l’instruction "<=" .
Nom_du_signal <= expression;
•
Exemple :
bus1 <= A or B ;
bus2 <= (bus1 and not(C xor D));
A
bus1
B
C
D
E
bus2
GRARI K.
86
I. Les objets
1.
Signaux
•
Affectation d’une valeur à un signal
signal bus_local : std_logic_vector (7 downto 0);
Tous les bits
bus_local <= “10101010”;
bus_local <= x”AA” ;
Un seul bit
Groupe de bit
N.B.
bus_local (7)
<= ‘1’;
bus_local (7 downto 4) <= “1010”;
un seul bit guillemet simple (‘)
Multi-bit guillemet double (“)
GRARI K.
87
I. Les objets
2.
Variable
•
Est un objet capable de retenir une valeur, pendant
une durée limitée, elle ne peut être employée qu’à
l’ intérieur d’un process.
A l’opposé d’un signal une variable n’est pas une
liaison concrète, et ne laissera pas une trace âpres
synthèse.
Stockage temporaire
•
Sans retard
GRARI K.
88
I. Les objets
2.
Variable
•
Déclaration d’une variable
variable nom__variable : type_de vairable;
variable indice : integer;
•
Affectation d’une valeur à une variable " := "
nom__variable :=valeur_de vairable;
Indice := 12;
•
Déclaration et affectation
variable indice : integer := 12;
GRARI K.
89
I. Les objets
2.
Variable
•
Les affectations de variables sont mis à jour
immédiatement
–
N’entraine pas un retard
GRARI K.
90
I. Les objets
2.
Variable
•
Affectation d’une valeur à une variable
variable temp : std_logic_vector (7 downto 0);
Tous les bits
temp := “10101010”;
temp := x”AA” ;
Un seul bit
Groupe de bit
N.B.
temp (7)
:= ‘1’;
temp (7 downto 4) := “1010”;
un seul bit guillemet simple (‘)
Multi-bit guillemet double (“)
GRARI K.
91
I. Les objets
2.
Variable
•
Comparaison entre signal et variable
Signal (<=)
Affectation
Utilité
Champ
d’application
Variable (:=)
signal <= affectation
Variable := affectation
Représente l'interconnexion
physique
Représente un stockage
local
Global
(Communication entre PROCESS)
locale
(à l’intérieur du process)
Comportement Mis à jour à la fin de la déclaration
du processus
(Nouvelle valeur non disponible)
GRARI K.
Mise à jour immédiate
(Nouvelle valeur
disponible)
92
I. Les objets
3.
Constantes
•
Une constante peut être assimilée à un signal
interne auquel est associée une valeur fixe et
définitive.
La déclaration de constante est rarement une
nécessitée, plus généralement une simplification
d’écriture pour une meilleure compréhension, une
meilleure lisibilité et une meilleur évolutivité.
•
GRARI K.
93
I. Les objets
3.
Constantes
•
Déclaration d’une constante et affectation (:=)
constant nom__const : type_de vairable := valeur_cont;
•
Exemple:
contant zero : bit_vector (1 downto 0) := ”00”;
contant huit_ou_plus : std_logic (3 downto 0) := ”1---”;
GRARI K.
94
I. Les objets
3.
Alias
•
Une déclaration d’alias permet de dénommer un
objet de différentes manières.
GRARI K.
95
I. Les objets
3.
Alias
•
Exemple : un bus de 32 bits (dbus) que l’on
souhaite pouvoir utiliser indifféremment par octet.
signal dbus : bit_vector (31 downto 0);
•
•
Pour designer l’octet du poids fort on nomme
dbus(31 downto 24)
Pour designer l’octet du poids faible on nomme
dbus(7 downto 0)
GRARI K.
96
I. Les objets
3.
Alias
•
Exemple : cette méthode devient rapidement
fatigante si les sous-éléments sont utilisé
fréquemment, une autre solution consiste à
redéfinir le signal dbus par des alias
signal dbus : bit_vector (31 downto 0);
alias octet3 : bit_vector(7 downto 0) is dbus (31 downto 24);
-- octet3 c’est l'octet du poids fort;
alias octet0 : bit_vector(7 downto 0) is dbus (7 downto 0);
-- octet0 c’est l'octet du poids faible;
GRARI K.
97
I. Les objets
3.
•
Alias
Exemple :
–
Refaire pour octet2 et octet1
–
Refaire pour les deux demi-mot du signal dbus
GRARI K.
98
II. Operateurs
1.
Operateurs standard : operateurs logiques
Catégorie
and
nand
or
nor
xor
xnor
not
signification
Et
Non-et
Ou
Non-ou
Ou exclusif
Egal (non ou-excusif)
non
GRARI K.
Type entrée/sortie
boolean
Bit
Bit_vector
99
II. Operateurs
2.
Operateurs standard : operateurs relationnels
Catégorie
=
/=
<
<=
>
>=
signification
Type
entrée
résultat
Egal
Non égal
Tout type boolean
scalaire
Inferieur
Inferieur ou égal
Supérieur
Supérieur ou égal
GRARI K.
100
II. Operateurs
3.
Operateurs standard :operateurs arithmétiques
Catégorie
+
*
/
abs
**
mod
rem
signification
Unaire (signe +) ou addition
Unaire (signe -) ou soustraction
Multiplication
Division
Valeur absolue
Exponentiation
Modulo
reste
GRARI K.
Type entrée/sortie
Integer
real
integer
101
II. Operateurs
4.
Operateurs standard : Décalage
Catégorie
signification
sll (shift left logical)
décalage logique à gauche
srl (shift right logical)
décalage logique à droite
rol (rotate left )
rotation logique à gauche
ror (rotate right)
rotation logique à droite
GRARI K.
Type
entrée/sortie
bit_vector
102
II. Operateurs
5.
Operateurs standard : Décalage
•
Exemple:
Instruction
“1100” sll 1
“1100” srl 2
“1100” rol 1
“1100” ror 2
•
Résultat
“1000”
“0011”
“1001”
“0011”
1100” ror –1 est la meme chose que “1100” rol 1
GRARI K.
103
II. Operateurs
6.
Operateurs standard : Concaténation
Catégorie
&
signification
concaténation
GRARI K.
Type entrée/sortie
entrée
résultat
bit
Bit_vector
Bit_vector
104
II. Operateurs
7.
Operateurs standard : priorité
Plus élevé
exponentiation
Valeur absolue
Ordre de priorité des opérateurs
multiplication addition décalage
GRARI K.
Plus bas
relationnel logique
105
II. Operateurs
7.
Operateurs standard : priorité
•
Tous les operateurs logiques sont de même
priorité, l’utilisation des parenthèse est nécessaire
des qu’une incertitude d’ interprétation existe.
A
B
E
C
D
E<= (A and B) or (C and D)
E<= A and B or C and D
GRARI K.
106
II. Operateurs
7.
Operateurs standard : Exemple
•
Prenant comme exemple l‘architecture d'un
multiplexeur 8 à 1 avec 3 entrées de sélection.
Sel
A
B
C
D
E
F
G
H
2
1
0
Multiplexeur
S
8à1
GRARI K.
107
II. Operateurs
7.
Operateurs standard : Exemple
•
Ecrire l’ensemble d’un fichier VHDL (Library,
Entity, Architecture) qui décrit une porte OU à 2
entrées a et b de 1 bit (sortie s)
GRARI K.
108
II. Operateurs
7.
Operateurs standard : Exemple
•
Ecrire l’ensemble d’un fichier VHDL (Library,
Entity, Architecture) qui décrit un additionneur
ADD4 à 2 entrées de 4 bits A et B signées et une
sortie S de 4 bits
GRARI K.
109
II. Operateurs
7.
Operateurs standard : Exemple
•
Ecrire l’ensemble d’un fichier VHDL (Library,
Entity, Architecture) permettant la concaténation
de 2 bus de 4 bits A et B en un bus C de 8 bits (le
bus A représente les bits de poids fort).
GRARI K.
110
CHAPITRE 5 :
Fonctionnements concurrents et
séquentiels
GRARI K.
111
Fonctionnement concurrents et
séquentiels
•
•
Instruction concurrente : instruction à l’extérieur des
process.
Instruction séquentielle : instruction à l’intérieur
d’un process
GRARI K.
112
I. Fonctionnements concurrents
•
•
•
VHDL se distingue des langages de programmation
traditionnels par une caractéristique majeure : les
instructions sont évaluées en permanence et toutes
simultanément
Chez les logiciens ce type de fonctionnement est
appelé parallèle ou concurrent
Chez les électroniciens on parle de fonctionnement
combinatoire
GRARI K.
113
I. Fonctionnements concurrents
•
Exemple :
A<=B;
B<=C;
•
En programmation traditionnelle on comprendrait:
–
–
•
A prend la valeur de B,
Puis B prend la valeur de C (sans effet rétroactif sur A)
En VHDL on a :
–
–
–
À tous moment A prend la valeur de B, et
À tous moment B prend la valeur de C,
Autrement dit à tout moment A,B et C ont la même valeur
l’ordre des instructions n’a pas d’importance.
GRARI K.
114
I. Fonctionnements concurrents
•
Exemple : Logique combinatoire
E
B
D
A
C
Architecture ex1 of exem is
Begin
A <= B and C;
B <= D and E;
End ex1;
Architecture ex2 of exem is
Begin
B <= D and E;
A <= B and C;
End ex2;
GRARI K.
115
II. Fonctionnements séquentiels
•
•
•
•
Ce mode concerne uniquement les fonctions,
procédure et process
Les process manipulent les variables et signaux
Au sein de ces descriptions, les déclarations sont
exécutées de manière séquentielle, l’une après
l’autre
L’ordre des déclarations est donc important
GRARI K.
116
II. Fonctionnements séquentiels
1.
•
process
Un process est un groupe délimité d’instructions,
doté de trois caractéristiques essentielles :
– Le processus s’exécute à chaque changement d’ état
d’un des signaux auxquels il est déclaré sensible.
– Les instructions du processus s’exécutent
séquentiellement,
– Les modifications apportées aux valeurs de signaux par
les instructions prennent effet à la fin du processus.
GRARI K.
117
II. Fonctionnements séquentiels
1.
•
process
La structure d’un processus est la suivante:
nom_optionnel : process (liste_de_signaux)
--partie déclarative du process
begin
--instructions séquentiels
end process nom_optionnel;
•
ou
nom_optionnel : process
--partie déclarative du process
begin
--instructions séquentiels
wait on (liste_de_signaux)
end process nom_optionnel;
GRARI K.
118
II. Fonctionnements séquentiels
1.
•
•
•
•
process
Le nom du process est optionnel, le même nom
devra en fin du processus.
Le mot-clé process est suivi de la liste dite de
sensibilité
Il est possible de remplacer la liste de sensibilité par
une instruction wait on placée à la fin du corps de
process
dans la partie declarative du processus sont listées
les variables locales du processus.
GRARI K.
119
II. Fonctionnements séquentiels
2.
•
•
•
Déclenchement d’un process
Un process se déclenche à chaque changement
d’état d’un de ses signaux d’activation
Et se rendort jusqu’au prochain déclenchement.
La liste des signaux déclenchant le processus est
appelée liste de sensibilité et figure entre parenthèse
derrière la déclaration de processus
GRARI K.
120
II. Fonctionnements séquentiels
2.
Déclenchement d’un process : exemple bascule D
•
L’un des exemples les plus simples concerne la description
d’une bascule-D
GRARI K.
121
II. Fonctionnements séquentiels
Library ieee;
Use ieee.std.logic_1164.all;
Entity bascule_D is port(
D, CLK : in std_logic;
Q : out std_logic);
End bascule_D;
Architecture arch_basc_D of bascule_D is
Begin
Process (CLK)
Begin
If (CLK=‘1’) then
Q <= D;
End if;
End process;
End arch_basc_D;
GRARI K.
122
II. Fonctionnements séquentiels
2.
Déclenchement d’un process : exemple bascule D
•
Process (CLK) : la liste de sensibilité se limite à un signal :
CLK son changement (0 à 1 ou 1 à 0) déclenchera
l’exécution du processus
If ( CLK=‘1’) then Q<=D : s’il s’agit d’un front montant de
CLK alors la valeur de la sortie Q prend la valeur de l’entrée
D
if : fin d’instruction if, l’absence de clause else est interprétée
comme signifiant : sinon la sortie Q ne change pas .
End process : c’est à ce moment seulement que sont mises à
jour les valeurs des signaux évalués dans le processus
•
•
•
GRARI K.
123
II. Fonctionnements séquentiels
3.
Mise à jour des valeurs de signaux : R. à D.
•
Les valeurs de signaux d’un process ne prennet effet qu’a la
fin du processus (end process)
Ce comportement est important comme le montre l’exemple
du registre à décalage de deux bits
•
D_IN
D_OUT
S1
Registre à décalage
CLK
GRARI K.
124
II. Fonctionnements séquentiels
Library ieee;
Use ieee.std.logic_1164.all;
Entity reg_dec is port(
D_IN, CLK : in std_logic;
D_OUT : out std_logic);
End reg_dec;
Architecture arch_reg_dec of reg_dec is
Signal S1 : std_logic;
Begin
Process (CLK)
Begin
If (CLK=‘1’) then
S1 <= D_IN;
D_OUT<=S1;
End if;
End process;
GRARI K.
End arch_reg_dec;
125
II. Fonctionnements séquentiels
3.
Mise à jour des valeurs de signaux : R. à D.
•
If (CLK=‘1’) then : les assignations suivantes ne
s’effectueront que s’il s’agit d’un front montant de CLK
S1<=D_IN : sur le front montant de CLK le signal interne S1
prend la valeur de l’entrée D_IN
D_OUT<=S1 : sur le même front montant de CLK, D_OUT
prend la valeur du signal interne S1. les instructions du
processus étant exécutées séquentiellement, on pourrait
penser que, S1 ayant déjà pris sa nouvelle valeur, D_OUT
prend à son tour cette nouvelle valeur. La règle n°3 des
processus : les valeur des signaux ne sont mises à jour qu’à
la fin du processus
•
•
GRARI K.
126
II. Fonctionnements séquentiels
4.
Liste de sensibilité multi signaux : bascule D RZ
•
Rien n’empêche un processus d’être sensible à plusieurs
signaux, c’est même le cas le plus courant.
Prenant l’exemple d’une bascule D avec remise à zéro
•
D_IN
Q
CLK
NRESET
GRARI K.
127
II. Fonctionnements séquentiels
4.
Liste de sensibilité multi signaux : bascule D RZ
Library ieee;
Use ieee.std.logic_1164.all;
Entity D_RAZ is port(
D, NRESET, CLK : in std_logic;
Q : out std_logic);
End D_RAZ;
Architecture arch_D_RAZ of D_RAZ is
Begin
Process (CLK,NRESET)
Begin
If NRESET=‘0’ then Q<=‘0’;
elsif CLK=‘1’ then Q<=D;
End if;
End process;
End arch_D_RAZ;
GRARI K.
128
II. Fonctionnements séquentiels
4.
Liste de sensibilité multi signaux : bascule D RZ
•
Process(CLK,NRESET) : le processus est sensible aux
changement d’état des signaux CLK et NRESET
If NRESET=‘0’ then q<=‘0’ : lorsque le signal NRESET
passe à 0, la sortie Q est à zéro. La séquentialité des
instructions dans le processus est importante : puisque le
signal NRESET est testé d’ emblée, il est donc prioritaire :
les instructions suivantes ne seront exécutées que si NRESET
est inactif (à ‘1’)
Elesif CLK=‘1’ then Q<=D : si NRESET est inactif et CLK
est à 1, alors la sortie Q prend la valeur de l’entrée D.
•
•
GRARI K.
129
II. Fonctionnements séquentiels
4.
Liste de sensibilité multi signaux : bascule D RZ
Chronogramme
D
CLK
NRESET
Q
1
2
GRARI K.
3
130
II. Fonctionnements séquentiels
4.
Liste de sensibilité multi signaux : bascule D RZ
•
D’après le chronogramme la description précédente n’est pas
conforme au fonctionnement d’une bascule D avec remise à
zéro
Le problème vient d’une mauvaise interprétation de la
condition if CLK=‘1’ on ne souhaiterait exécuter les
instructions associés que si c’est réellement le signal CLK
qui a déclenché le processus et non par une autre condition
alors que CLK se trouvait à ‘1’
VHDL permet de résoudre ce problème via l’attribut event
•
•
GRARI K.
131
II. Fonctionnements séquentiels
5.
Attribut event
•
L’attribut event accolé à un signal permet de reconnaitre si le
déclenchement du processus est dut à ce signal
La description correcte du processus est:
•
Process (CLK,NRESET) begin
If NRESET=‘0’ then Q<=‘0’;
elsif (CLK event and CLK=‘1’) then Q<=D;
End if;
End process;
•
Il est recommandé de toujours utiliser la forme if(CLK event
and CLK=‘1’) pour décrire un front montant et if(CLK event
and CLK=‘0’) pour décrire un front descendant
GRARI K.
132
CHAPITRE 6 :
Instructions
GRARI K.
133
Instructions
•
•
•
Certaines instructions VHDL ne sont utilisables
qu’en mode séquentiel c’est-à-dire à l’intérieur d’un
processus d’autres seulement en mode concurrent
(hors processus)
L’instruction if…then…else est utilisée seulement à
l’intérieur du processus
Mais l’instruction when…else hors de processus
exclusivement
GRARI K.
134
I. Instruction en mode concurrent
1.
•
•
Assignation inconditionnelle
C’est la plus utilisée des instructions
Forme générale :
Signal <= expression;
•
Exemple:
A <= B and C;
•
•
A prend la valeur de l’opération (B and C)
Autres exemples:
F <= 124;
Bus_in <= ¨0000¨;
GRARI K.
135
I. Instruction en mode concurrent
2.
•
Assignation conditionnelle
Forme générale:
Signal <= {expression when condition} else expression;
•
Exemple:
A <= B when (C=‘1’) else D;
•
•
A prend la valeur de B si C est égal à ‘1’ sinon A prend la
valeur de D la condition testée doit être booléenne.
L’assignation conditionnelle peut être à double détente,
exemple:
A <= B when S=T else
C when S=U else ‘0’;
GRARI K.
136
I. Instruction en mode concurrent
2.
•
Assignation conditionnelle
Si les conditions listés sont exclusives, la logique sera
synthétisée sans ambigüité. Si les condition ne sont pas
exclusives, alors la logique sera synthétisé compte tenu de
l’ordre de déclaration des conditions. Exemple:
A <= B when (C=‘0’) else
D when (E=‘1’)
else ‘0’;
•
Il est fortement conseillé que les conditions soient
exhaustives. l’exemple sera traitée comme:
A <= B when (C=‘0’) else
D when (C=‘1’ and E=‘1’)
else ‘0’;
GRARI K.
137
I. Instruction en mode concurrent
4.
•
Assignation sélective
Forme générale:
With selecteur select
Signal <= {expression when valeur_selecteur ,}
[expression when others];
•
Cette expression permet d’assigner différentes valeurs à un
signal, selon la valeur prise par une expression appelée
sélecteur: prenant l’exemple:
GRARI K.
138
I. Instruction en mode concurrent
4.
Assignation sélective
Architectutre arch_sel of expl_sel is
Signal ETAT : std_logic_vector(1 downto 0);
Signal X, A, B, C, D : std_logic;
Begin
with ETAT select
X <= A when ¨¨00¨,
B when ¨01¨,
C when ¨10¨,
D when others;
End Arch_sel;
•
X prend la valeur de A si le signal ETAT, utilisé comme
sélecteur, vaut ¨00¨, B si le sélecteur vaut ¨01¨, etc.
GRARI K.
139
I. Instruction en mode concurrent
4.
Assignation sélective
with (A2 & A1 & A0) select
CS <= ‘0’ when ¨¨010¨,
‘1’ when others;
•
La termination de l’instruction par when others est toujours
recommandée, de manière à regrouper toutes les valeurs
éventuellement non listées du sélecteur, par exemple le
sélecteur ETAT de l’exemple 1 est de type std_logic il existe
plus de quatre cas (XX et ZX)
GRARI K.
140
II. Instruction en mode séquentiel
1.
•
Assignation inconditionnelle de signal
Elle a la même forme que l’assignation en mode concurrent.
Dans un processus les nouvelles valeurs des signaux sont
calculées au fur et à mesure des assignations, mais ne
prennent effet qu’à la fin du processus.
A <= (B and C);
•
A va prendre la valeur de (B and C)
GRARI K.
141
II. Instruction en mode séquentiel
2.
•
Assignation inconditionnelle de variable
Forme générale:
Var :+ expression;
•
Contrairement à l’assignation de signal, l’assignation de
variable prend effet immédiatement.
GRARI K.
142
II. Instruction en mode séquentiel
3.
•
•
Assignation conditionnelle
Elle peut s’appliquer aux variable aussi bien qu’aux signaux,
les exemple ci-dessous concernent des signaux.
Forme générale:
If condition then instructions
{elsif condition then instructions}
[else instructions]
End if;
GRARI K.
143
II.
Instruction
en
mode
séquentiel
3.
Assignation conditionnelle : exemple
if LOAD=‘1’ then CNT <= DATA_IN;
else CNT <= CNTT + 1;
end if;
•
•
Si le signal LOAD vaut ‘1’ alors CNT va prendre la valeur de
DATA_IN, sinon CNT + 1, la condition testée doit être
booléenne.
Chacune des branches conditionnelles peut être constituée
d’une séquence d’instructions, incluant le cas échéant une
nouvelle instruction if:
if LOAD=‘1’ then CNT <= DATA_IN;
elsif C_EN = ‘1’ then
if C_UP=‘1’ then CNT <= CNT + 1;
else CNT <= CNT – 1;
end if;
end if;
GRARI K.
144
II. Instruction en mode séquentiel
4.
Assignation sélective
• Forme générale :
Case selecteur is
{when valeur_selecteur} => {instruction}
[when others => {instruction}]
End case;
• Le sélecteur est une expression dont les différentes valeurs
possibles permettent de générer des actions différenciées
• Les valeurs utiles du sélecteur sont listées au moyen de clause
when chacune associée à une liste d’instruction
• Les valeurs restantes sont regroupés sous la clause when others
GRARI K.
145
II. Instruction en mode séquentiel
4.
•
Assignation sélective
Exemple:
Case AD is
When X¨0¨ =>
CS <= ¨100¨;
When X¨8¨ | X¨9¨ | X¨A¨ | X¨B¨ =>
CS <= ¨010¨;
When X¨1¨ | X¨2¨ =>
CS <= ¨001¨;
When others =>
CS <= ¨000¨;
End case;
GRARI K.
146
II. Instruction en mode séquentiel
4.
Assignation sélective
• Exemple:
– Case AD is : le sélecteur est le bus AD, de largeur 4 bits
– When X¨0¨=>CS<=¨¨100¨: lorsque AD vaut 0, le vecteur intermédiaire est
positionné à ¨100¨
– When X¨8¨|X¨9¨|X¨A¨|X¨B¨=>CS<=¨010¨: lorsque AD vaut de 8 à B
(hex) le vecteur intermédiaire est positionné à ¨010¨
– When X¨1¨|X¨2¨=>CS<=¨001¨: lorsque AD vaut 1 ou 2, le vecteur
intermédiaire CS est positionné à ¨001¨
– When others => CS <=¨000¨: dans tous les autres cas le vecteur
intermédiaire CS est positionné à ¨000¨, elle garantie un ‘point de chute’ à
tous les valeurs possibles du selecteur
GRARI K.
147
II. Instruction en mode séquentiel
5.
Boucle for…loop
• Forme générale:
[étiquette :] for variable boucle in intervalle loop
{instructions}
End loop [étiquette];
• Pour chaque valeur successive de de la variable de boucle
dans l’intervalle indiqué, exécuter les instructions listées.
• La variable de boucle, qui n’a pas à être déclarée au
préalable, peut bien entendu être utilisée par les
instructions de la boucle. La lise d’instructions peut
contenir toute instruction séquentielle, par exemple
conditionnelle ou nouvelle boucle.
GRARI K.
148
II. Instruction en mode séquentiel
5.
Boucle for…loop
• Exemple:
Boucle1 : for indice in 7 downto 0 loop
If indice = then d_bus(indice) <= databus(15);
Else d_bus(indice) <= not(d_bus(15-indice));
End if;
End loop boucle1;
GRARI K.
149
II. Instruction en mode séquentiel
6.
Boucle while…loop
• Forme générale:
[étiquette :] while condition loop
{instructions}
End loop [étiquette];
• Tant que la condition est vraie, exécuter les instructions de
la boucle ( les instructions de la boucle doivent assurer que
la condition deviendra fausse au bout d’un temps fini)
• La synthèse aisée de cette boucle impose que la condition
testée soit statique, c’est-à-dire figée au moment de la
compilation
GRARI K.
150
II. Instruction en mode séquentiel
6.
Boucle while…loop
• Exemple
TOTAL :=15;
I:=15;
Boucle2 : while I >=0 loop
If compte(I)= ‘0’ then TOTAL := TOTAL-1;
Else TOTAL :=TOTAL-2;
End if;
I := I-2;
End loop boocle2;
GRARI K.
151
II. Instruction en mode séquentiel
7.
Boucle next et exit:
• L’instruction next permet de terminer une itération de
boucle sans exécuter les instructions suivante, l’instruction
exit permet de terminer l’ exécution de la boucle.
• Exemple:
C:=0;
Boucle3 : for k in 1 to 7 loop
If DBUS(k)=‘0’ then next;
Elseif DBUS(k)=‘1’ and DBUS(k-1)=‘1’ then exit boucle3;
Else C:=C+1;
End if;
End loop boucle3;
GRARI K.
152
III. Mémorisation implicite
• Cette caractéristique propre à VHDL, est importante à
appréhender car elle apporte autant d’avantage lorsqu’elle est
utilisée à bon escient que de mauvaise surprise lorsqu’elle est
oubliée.
• En VHDL, les signaux ont une valeur courante et une valeur
prochaine, déterminée par l’operateur d’assignation. Si lors
d’une instruction conditionnelle un signal reçoit une
assignation dans une branche, alors il doit recevoir une
assignation dans toutes les autres branche : si ce n’est pas le
cas chaque absence d’assignation signifie que la prochaine
valeur du signal est identique à la valeur courante et le
synthétiseur génère une logique de mémorisation (registre,
latch) afin de préserver cette valeur courante
GRARI K.
153
III. Mémorisation implicite
• Avantage : simplification de la description des
fonctionnement basés sur des signaux d’horloge.
• Exemple
Precess (CLK)
If (CLK’event and CLK=‘1’) then
Q1 <= D_IN;
Q2 <= Q1;
Q3 <= Q2;
End if;
End process;
• Les sorties ne changent d’état que sur un front d’horloge (FM)
lorsque le processus est déclenché par l’autre front d’horloge
les sorties ne doivent pas changer la clause else donc inutile
GRARI K.
154
III. Mémorisation implicite
• La description est équivalente à:
Precess (CLK)
If (CLK’event and CLK=‘1’) then
Q1 <= D_IN;
Q2 <= Q1;
Q3 <= Q2;
Else Q1 <= Q1;
Q2 <= Q2;
Q3 <= Q3;
End if;
End process;
GRARI K.
155
CHAPITRE 7 :
Fonctions et procédures
GRARI K.
156
Fonctions et procédures
•
•
•
•
Les fonctions et procédures de VHDL sont
équivalentes à celles des langages de programmation
traditionnels
Les fonctions ne possèdent que des paramètres
d’entrée et retournant un seul résultat
Les procédures possèdent des paramètres d’entrées, de
sortie (multiples) et paramètres d’entrée modifiable
Les fonctions sont plus utilisées, pour les procédures
on préfère généralement les instanciations de
composant
GRARI K.
157
I. Description de fonctions
•
L’exemple suivant décrit une fonction BIT_BOOL,
assurant la conversion du type bit en type booléen
Function BIT_BOL (A : bit) return boolean is
Begin
If A=‘1’ then return (TRUE);
Else return (FALSE);
End if;
End BIT_BOOL;
•
Function BIT_BOL (A: bit) return boolean is : le mot
réservé function est suivi du nom donné à la fonction. Les
paramètres d’appel –ici un seul- sont listés avec leur type
par défaut les paramètres d’appel acceptés peuvent être
des constantes ou des signaux.
GRARI K.
158
I. Description de fonctions
•
•
•
En cas de restriction de type d’objet peut apparaitre
explicitement, par exemple (signal A : bit) pour
exclure les constantes. Enfin le type du résultat
retourné est indiqué
Begin : marque la fin de la partie déclarative de
variables internes de la fonction ici vide
Les fonction sont des constructions séquentielles,
utilisant les instructions de cette catégorie. Toutefois,
contrairement aux processus, les fonctions ne sont pas
synchronisé c’est-à-dire pas de signaux d’horloge la
logique synthétisé sera du type combinatoire
GRARI K.
159
II. Ou déclarer la fonction
Package CONVERSION is
Function BIT_BOL (A : bit) return boolean;
--autre fonction de conversion
-End CONVERSION;
Package body CONVERSION is
Function BIT_BOL (A : bit) return boolean is
Begin
If A=‘1’ then return (TRUE);
Else return (FALSE);
End if;
End BIT_BOOL;
--description des autres fonctions
-End CONVERSION;
GRARI K.
160
III. Appel de fonction
•
Les fonctions s’appellent de manière classique, en
s’assurant que les opérandes d’entrée sont listés dans
l’ordre correct, et sont du type requis
C <= BIT_BOOL(D);
•
Le paquetage contenant la fonction doit avoir fait au
préalable l’objet d’une déclaration d’utilisation, via la
clause use, par exemple:
Use work.CONVERSION.all;
GRARI K.
161
CHAPITRE 8 :
Modularité
GRARI K.
162
I. Modularité
Un description est modulaire si elle est partitionnée en
plusieurs sous-ensembles. VHDL supporte et encourage la
conception modulaire qui offre de nombreux avantages
•
Les descriptions sont plus simple
•
Les durées de simulation est de mise au point sont
raccourcies
•
La fiabilité est améliorée du fait de sa simplicité, chaque
sous ensemble peut être testé seul
•
Les sous-ensembles sont réutilisables. Et plus un
module est simple, plus grande est chance d’être
réutilisé
GRARI K.
163
I. Modularité
•
Exemple : pour illustrer l’intérêt des composants et
des paquetages par un exemple progressif : on
prend l’exemple d’un comparateur 4 bits en
respectant sa forme structurelle constituée de 4
composants xnor2 et d’un composant and4
A
B
4
4
C
GRARI K.
164
I. Modularité
•
Exemple : l’entité du comparateur s’écrit:
Entity comp4 is port(
A , B : in bit_vector(3 downto 0);
C : out bit) ;
End comp4;
GRARI K.
165
II. Description à plat
•
Une description à plat ou schéma à plat est une
représentation sans hiérarchie. La description de
notre comparateur s’effectue en deux étapes :
1) Description des éléments de base, à savoir
l’élément xnor2 et l’élément and4
2) Description du comparateur en utilisant les
éléments préalablement décrits (xnor2 et and4)
GRARI K.
166
II. Description à plat
•
Le fichier VHDL obtenu est le suivant:
•
Description de l’élément xnor2
Entity xnor2 is port(
X,Y : in bit;
XN : out bit);
End xnor2;
Architecture archxnor2 of xnor2 is
Begin
XN <= not (X xor Y);
End archxnor2;
GRARI K.
167
II. Description à plat
•
Description de l’élément and4
Entity and4 is port(
D, E, F, G : in bit;
H : out bit);
End and4;
Architecture archand4 of and4 is
Begin
H <= D and E and F and G;
End archand4;
GRARI K.
168
II. Description à plat
•
Description du comparateur
Entity comparateur4 is port(
A,B: bit_vector ( 3 downto 0 );
C : out bit);
End comparateur4;
Architecture archcomp of comparateur4 is
Signal I : bit_vector ( 3 downto 0);
Begin
Premièr_xnor : xnor2 port map (A(0), B(0), I(0));
Deuxième_xnor : xnor2 port map (A(1), B(1), I(1));
Troisième_xnor : xnor2 port map (A(2), B(2), I(2));
Quatrieme_xnor : xnor2 port map (A(3), B(3), I(3));
And_des_quatre : and4 port map (I(0), I(1), I(2), I(3), C);
End archcomp;
GRARI K.
169
II. Description à plat
•
•
•
•
NB : les trois descriptions c’est le même fichier
VHDL de description du comparateur
La portée des descriptions xnor2 et and4 est
limitée à l’entité/architecture comparateur4
D’autres fonction qui souhaiteraient utiliser
également xnor2 et and4 devraient à leur tour
recompiler ces fonctions
Pertes de temps et manque de souplesse
GRARI K.
170
II. Description à plat
•
EXEMPLE : faite une description à plat
A
B
4
4
C
GRARI K.
171
III. Description modulaire sans
package
•
Elle permet de rendre les descriptions xnor2 et
and4 accessible à qui le veut c.à.d. modulaire
On décrit xnor2 et and4 hors de la description
globale et en les déclarant dans comparateur4
comme component
Comme les signaux internes, les composants sont
listés dans la partie déclarative de l’ architecture:
•
•
–
–
Le nom du composant est celui de l’entité à laquelle il
est associé
La liste des signaux est elle aussi identique à celle de
l’entité associée
GRARI K.
172
III. Description modulaire sans
package
•
•
•
Elle est possible ainsi de séparer la compilation des
descriptions xnor2 et and4 de celle de
comparateur4
Apres compilation, xnor2 et and4 sont stockés
dans la bibliothèque work
Lors de la compilation de comparateur4, les
déclarations de composants autoriseront l’aces aux
éléments souhaités
GRARI K.
173
III. Description modulaire sans
package
•
Les deux fichiers VHDL obtenus sont les suivants :
–
Description des composants:
Entity xnor2 is port(X,Y : in bit; XN : out bit);
End xnor2;
Architecture archxnor2 of xnor2 is
Begin
XN <= not (X xor Y);
End archxnor2;
Entity and4 is port(D, E, F, G : in bit;H : out bit);
End and4;
Architecture archand4 of and4 is
Begin
H <= D and E and F and G;
End archand4;
GRARI K.
174
III. Description modulaire sans
package
–
Description des composants:
Entity comparateur4 is port(
A,B: bit_vector ( 3 downto 0 );
C : out bit);
End comparateur4;
Architecture archcomp of comparateur4 is
Signal I : bit_vector ( 3 downto 0);
Component xnor2 port (X,Y : in bit; XN : out bit);
Component and4 port (D, E, F, G : in bit; H : out bit);
Begin
Premièr_xnor : xnor2 port map (A(0), B(0), I(0));
Deuxième_xnor : xnor2 port map (A(1), B(1), I(1));
Troisième_xnor : xnor2 port map (A(2), B(2), I(2));
Quatrieme_xnor : xnor2 port map (A(3), B(3), I(3));
And_des_quatre : and4 port map (I(0), I(1), I(2), I(3), C);
End archcomp;
GRARI K.
175
III. Description modulaire sans
package
•
•
N.B. la description du compteur4 est maintenant
modulaire, cependant si elle utilise une
cinquantaine de composants externes alors une
cinquantaine de déclaration ce qui rendra la
description de l’architecture plus difficile
D’où la nécessité d’une description modulaire avec
package
GRARI K.
176
III. Description modulaire sans
package
•
EXEMPLE : faite une description à plat
A
B
4
4
C
GRARI K.
177
IV. Description modulaire avec
package
•
•
•
On regroupe les composants pour y accéder plus
facilement ce regroupement est le package
Les déclarations de component sont sortie de
l’architecture appelante, et regroupées dans un
paquetage, pour notre exemple on appel portes
La déclaration de chaque composant dans
l’architecture utilisatrice est remplacé par une
déclaration globale d’utilisation du paquetage
portes en tète de cette même architecture:
Use work.portes.all;
GRARI K.
178
IV. D.M. avec package
-- description package portes
Package portes is
Component xnor2 port (X,Y : in bit; XN : out : bit);
End component;
Component and4 port (D, E, F, G : in bit; H : out bit);
End component;
End portes;
-- description xnor2
Entity xnor2 is port(X,Y : in bit; XN : out bit);
End xnor2;
Architecture archxnor2 of xnor2 is
Begin
XN <= not (X xor Y);
End archxnor2;
-- Description and4
Entity and4 is port(D, E, F, G : in bit; H : out bit);
End and4;
Architecture archand4 of and4 is
Begin
H <= D and E and F and G;
End archand4;
GRARI K.
179
IV. Description modulaire avec
package
Entity comparateur4 is port(
A,B: bit_vector ( 3 downto 0 );
C : out bit);
End comparateur4;
Use work.portes.all;
-- declaration d’acces au package portes
Architecture archcomp of comparateur4 is
Signal I : bit_vector ( 3 downto 0);
Begin
Premièr_xnor : xnor2 port map (A(0), B(0), I(0));
Deuxième_xnor : xnor2 port map (A(1), B(1), I(1));
Troisième_xnor : xnor2 port map (A(2), B(2), I(2));
Quatrieme_xnor : xnor2 port map (A(3), B(3), I(3));
And_des_quatre : and4 port map (I(0), I(1), I(2), I(3), C);
End archcomp;
GRARI K.
180
IV. Description modulaire avec
package
•
Package :
–
Une fois un package est constitué, compilé et archivé
dans une bibliothèque, un paquetage peut être accéder
par quiconque à l’aide de la directive :
Use nom_library.nom_package.all
–
–
Un paquetage peut contenir un nombre quelconque
d’élément
Une description peut faire appel à plusieurs paquetages :
il lui suffit de lister autant de use qu’il ya de paquetage
GRARI K.
181
IV. Description modulaire avec
package
•
Component : port map
–
Permet d’associer les signaux de l’architecture
appelante à ceux du composant
Entity xor2 is port (I1, I2 : in bit; O1 : out bit);
U0 : xor2 port map (A, B, INT); -- A relié a I1,B à I2
-- INT à O1
–
Ou :
U0 : xor2 port map (I2=>B, I1=>A, O1=>INT);
A
I1
O1
B
I2
GRARI K.
INT
182
Download