Feuille Tage
Feuille Tage
Feuille Tage
Sébastien Moutault
Maurice Meaudre
Le Langage VHDL
du langage au circuit,
du circuit au langage
5e édition
PARTIE A
PARTIE B
13
1.1 La boîte noire et son contenu 13
1.1.1 La boîte noire: une entité 14
a) Déclaration d'entité 14
b) Déclaration de port et modes d'accès 15
1.1.2 Son contenu: une architecture 17
a) Définition d'architecture 17
b) Une description comportementale 19
c) Une description flot de données 21
d) Une description structurelle 22
res 9782100567027-livreTDM.fm Page IV Monday, March 21, 2016 5:21 PM
IV Le langage VHDL
PARTIE C
VI Le langage VHDL
PARTIE D
LE LANGAGE VHDL, ÉLÉMENTS DE SYNTAXE
PARTIE E
UN LANGAGE EN ÉVOLUTION
X Le langage VHDL
EXERCICES 267
BIBLIOGRAPHIE 285
INDEX 287
9782100567027-AvtProp.fm Page XI Tuesday, April 26, 2016 10:57 AM
Avant-propos
à la cinquieme édition
PARTIE A
MODÉLISATION ET SYNTHÈSE :
LE MÊME LANGAGE
L’origine du langage suit une histoire un peu banale dans sa répétition 4: le dévelop-
pement de l’informatique, la complexité croissante des circuits, ont fait fleurir une
1. Hémisphères droit et gauche du cerveau humain, diront certains. Mais c’est une autre histoire.
2. Peu importe, à ce niveau, le support physique utilisé, graphique ou textuel. Un schéma peut être décrit
par un dessin, le monde graphique, ou par une net list, le monde textuel. De même, un algo-
rithme peut être décrit par un diagramme (flowchart), le monde graphique, ou par un langage
procédural, le monde textuel. Chaque représentation a ses avantages et ses inconvénients.
3. La deuxième tentative est, en outre, fausse. Elle ne prend pas en compte le parallélisme inhérent
à tout système électronique.
4. Toute ressemblance avec ADA serait purement fortuite.
9782100567027-livre.fm Page 2 Mercredi, 15. juin 2011 6:06 18
multitude de langages plus ou moins compatibles entre eux, plus ou moins cohérents
entre synthèse (fabrication) et simulation (modélisation). Le programme VHSIC (very
high speed integrated circuits), impulsé par le département de la défense des États-
Unis dans les années 70-80, a donné naissance à un langage: VHSIC-HDL, ou VHDL.
Trois normes successives (IEEE 1-1076-1987, 1993 et 2008) en ont stabilisé la défi-
nition, complétées par des retouches et quelques extensions. La norme la plus majori-
tairement supportée par les outils reste aujourd’hui celle de 1993. Nous verrons les
principales modifications apportées par la dernière mouture du langage (2008) à la fin
de cet ouvrage. La prochaine évolution majeure consistera à intégrer les outils néces-
saires à l’élaboration de bancs de vérification abstraits, outils déjà supportés par le
principal concurrent de VHDL (voir Le langage SystemVerilog des mêmes auteurs).
«Apprendre à communiquer en une langue nouvelle prend toujours l’allure d’un défi.
Au début, il semble que tout est nouveau, et doit être assimilé avant de caresser
l’espoir d’utiliser le langage. Puis, après une première expérience, il apparaît des
points de ressemblance avec notre propre langage. Au bout d’un moment, nous
réalisons que les deux langages ont de nombreuses racines communes.»
Cette première phrase de ADA une introduction, par H. LEDGARD, résume on ne
peut mieux la difficulté. Par où commencer?
Nous commencerons par les principes, les idées directrices, avant de nous jeter à
l’eau dans la partie suivante.
➤ Un langage commun
➤ Simulation fonctionnelle
Tester un circuit revient à lui appliquer des stimuli, des vecteurs de test, et à analyser
sa réponse. À un deuxième niveau, le test inclut l’environnement dans lequel le circuit
est immergé, la carte sur laquelle il est implanté. Les conditions expérimentales
reproduiront, dans un premier temps, les conditions de fonctionnement normales. Dans
un deuxième temps elles chercheront à cerner les limites, une fréquence maximum,
par exemple.
Tester un module logiciel revient à écrire un programme qui lui transmet des
données, reçoit les résultats et les analyse. Dans une première étape les données
transmises sont celles attendues, elles servent à identifier d’éventuelles erreurs
9782100567027-livre.fm Page 4 Mercredi, 15. juin 2011 6:06 18
grossières. Dans une deuxième étape, les données sortent de l’ordinaire prévu,
provoquent une situation de faute. Les exemples informatiques abondent, en voici
un: quand on réalise un programme de tracé de courbes ou une calculatrice
graphique, demander le tracé de y = x2 est un test de la première catégorie, celui de
y = log [sin (1/x2) ] de la seconde 1.
VHDL est un langage informatique qui décrit des circuits. Les programmes de
test simulent l’environnement d’un montage, ils bénéficient de la souplesse de
l’informatique pour recréer virtuellement toutes les situations expérimentales possibles
et imaginables, même celles qui seraient difficiles à réaliser en pratique.
Le test est une opération psychologique difficile à mener: nous avons une
fâcheuse tendance à vouloir nous convaincre nous-mêmes de la justesse de notre
réalisation, à construire des tests qui nous conforteront dans cette idée. Or le but du
test est de chercher la faute, même, et surtout, la faute maligne, celle qui ne se révèle
pas au premier abord 2.
1. Dans une première étape on peut supprimer le logarithme. L’intervalle de variation intéressant
est évidemment centré autour de 0, comme {– 1..1}.
2. Une situation de débordement dans un calcul numérique, par exemple.
9782100567027-livre.fm Page 5 Mercredi, 15. juin 2011 6:06 18
Dans cette architecture, de nombreux points restent à préciser: quels sont les types
des opérandes et du résultat? Quelles sont leurs tailles, en nombre de chiffres
binaires? Comment réaliser l’addition compte tenu du circuit cible?
Les réponses aux premières de ces questions se trouvent dans des zones décla-
ratives:
PORT (hor, raz : IN STD_LOGIC; -- signaux binaires
e1, e2 : IN INTEGER RANGE 0 TO 15; -- entiers 4 bits
reg : OUT INTEGER RANGE 0 TO 31); -- entiers 5 bits
Le schéma comportera donc cinq bascules. À propos de ces premières instructions
VHDL, nous découvrons l’importance des déclarations, l’omission de la restriction du
domaine de variation des nombres conduirait, par défaut, à générer systématiquement
un additionneur 32 bits.
La réponse à la dernière des questions précédentes ne se trouve pas dans le
programme source. Elle fait partie intégrante de l’outil de synthèse, et dépend du circuit
cible. Si ce dernier ne comporte comme opérateurs combinatoires élémentaires que
des portes logiques, le synthétiseur devra être capable de traduire l’addition binaire
en équations logiques, chiffre binaire par chiffre binaire. Si le circuit cible comporte
des blocs arithmétiques, le synthétiseur tentera de les utiliser. Souvent la réalité se
situe à mi-chemin entre logiciel et matériel: le circuit ne comporte que des opérateurs
logiques, mais le compilateur de silicium possède des bibliothèques fournies de
© Dunod – La photocopie non autorisée est un délit.
1. Avec un certain humour, les auteurs d’un tel traducteur, qui s’adapte aux familles de circuits
cibles, l’avaient baptisé metamor (utilisé il y a une dizaine d’années par SYNARIO, de DATA IO).
9782100567027-livre.fm Page 6 Mercredi, 15. juin 2011 6:06 18
1. Le rêve de tout électronicien: diminuer les temps de retard du modèle rétro-annoté pour
augmenter la fréquence de travail du circuit réel.
2. Nous pouvons compléter, à la lumière de ce paragraphe, une remarque précédente que nous
avions faite à propos des représentations graphique et textuelle. La représentation graphique a
des aspects séduisants de lisibilité, c’est évident. Elle pose cependant un problème non trivial de
portabilité (rares sont les outils graphiques universels) et de rigueur. Une représentation textuelle
est moins intuitive, mais ne pose pas de problème de portabilité et permet une formalisation plus
aisée, qui lui assure un caractère non ambigu. De nombreux systèmes proposent les deux modes;
le mode graphique reste local, le passage d’un système à un autre se fait par l’intermédiaire du
langage textuel.
3. Un langage n’est qu’un outil. Mais les langages de haut niveau ne sont pas neutres au niveau des
méthodes de travail qu’ils induisent. Dans un contexte d’apprentissage, il est intéressant de disposer
d’outils de développement petits et bon marché, qui permettent de développer des applications
suffisamment simples pour être menées à terme par une seule personne en quelques heures.
9782100567027-livre.fm Page 7 Mercredi, 15. juin 2011 6:06 18
1. Les seuls types que nous avons rencontrés, pour l’instant, sont les types entier et bit; il y en a
d’autres.
9782100567027-livre.fm Page 8 Mercredi, 15. juin 2011 6:06 18
➤ Construction hiérarchique
La construction hiérarchique n’est, bien sûr, pas propre à VHDL. Tous les systèmes
de CAO dignes de ce nom la comprennent.
9782100567027-livre.fm Page 9 Mercredi, 15. juin 2011 6:06 18
Nous ne donnerons pas ici la façon de créer une hiérarchie dans le langage,
chaque chose en son temps. Contentons-nous d’insister sur l’importance du concept
et sur le fait que les instructions correspondantes sont extrêmement puissantes;
beaucoup plus qu’il n’est possible de le figurer avec des images. VHDL inclut toute
une algorithmique spatiale, qui permet de créer des structures paramétrables et
évolutives.
➤ Description fonctionnelle
Complémentaire de la précédente, la vision fonctionnelle apporte la puissance des
langages de programmation. Au premier abord elle est assez classique, le programmeur
habitué aux langages procéduraux se retrouve en terrain connu.
Le point important, qui rend VHDL très différent de langages comme C ou
PASCAL, malgré les ressemblances syntaxiques fortes avec ce dernier, est que tout
algorithme est la description interne d’un bloc situé quelque part dans la hiérarchie
du schéma complet.
La vision structurelle est concurrente, la vision algorithmique est séquentielle, au
sens informatique du terme. Un programme VHDL doit être compris comme
l’assemblage, en parallèle, de tâches indépendantes qui s’exécutent concurremment.
Les signaux sont, en réalité, les véhicules des informations électriques dans le
schéma; vus sous l’angle quelque peu informatique précédent, ils jouent le rôle de
canaux de communications interprocessus.
Avant de rentrer dans le vif du sujet, autorisons-nous un conseil: n’oubliez jamais
que vous décrivez un circuit. Les langages concurrents sont parfois déconcertants
pour les novices, nous avons ici la chance de traduire dans un tel langage le monde
des circuits; la vision physique des choses permet de franchir sans difficulté bien des
écueils.
9782100567027-livre.fm Page 10 Mercredi, 15. juin 2011 6:06 18
9782100567027-livre.fm Page 11 Mercredi, 15. juin 2011 6:06 18
PARTIE B
VHDL est un langage de haut niveau qui permet de décrire, d’un point de vue pure-
ment fonctionnel, le comportement de systèmes numériques. Il permet également de
synthétiser des circuits numériques, c’est-à-dire de traduire en schéma logique la
description de ces mêmes systèmes. Certaines constructions du langage sont synthé-
tisables et sont a fortiori simulables. D’autres sont de purs outils de modélisation,
utilisables pour simuler le fonctionnement d’un système mais pas pour en faire une
synthèse. C’est ici la source d’erreurs principale du débutant qui, se laissant bercer
par des constructions algorithmiques parfaitement simulables, ne voit pas qu’elles
ne correspondent à aucun circuit réalisable. Bien que cette frontière entre ce qui est
synthétisable et ce qui ne l’est pas soit floue et se déplace à mesure que les perfor-
mances d’analyse des outils de synthèse s’améliorent, la description des circuits
numériques obéit à des schémas d’écriture récurrents. Ce sont quelques unes de ces
structures de code synthétisables que le lecteur est invité à explorer à travers cette
© Dunod – La photocopie non autorisée est un délit.
deuxième partie.
Dans le premier chapitre, nous explorerons les principales constructions synthéti-
sables du langage à travers la réalisation concrète de modules classiques: décodeurs,
multiplexeurs, registres, compteurs, automates, etc. Puis nous aborderons les
problèmes du test unitaire et de la simulation post-synthèse. Enfin, un chapitre sera
entièrement consacré aux pièges classiques qu’est susceptible de rencontrer tout
concepteur débutant de circuits numériques.
9782100567027-livre.fm Page 12 Mercredi, 15. juin 2011 6:06 18
9782100567027-livre.fm Page 13 Mercredi, 15. juin 2011 6:06 18
Chapitre 1
Décrire le circuit
14 1 • Décrire le circuit
a) Déclaration d'entité
La déclaration d’entité d’un générateur de parité 7 bits s’écrit comme suit 2:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY parityGenerator IS
PORT (data : IN STD_LOGIC_VECTOR(6 DOWNTO 0);
even : IN STD_LOGIC;
parity : OUT STD_LOGIC);
END ENTITY parityGenerator;
Le signal data constitue les données d’entrée. L’état du signal de sortie parity
dépendra de la polarité choisie par l’intermédiaire du signal even.
➤ Spécification de contexte
Les deux premières lignes constituent une spécification de contexte. Elles indiquent
que, dans ce module, il est fait usage de la bibliothèque IEEE, dont le contenu est
traité en détail au chapitre 5 page 135. Ces deux lignes seront systématiquement
présentes devant toutes les déclarations d’entités.
1. La déclaration d'entité décrit aussi les éventuels paramètres génériques de l'unité de conception
(voir pages 57 et 178).
2. Les mots du langage peuvent être écrits indifféremment en majuscules ou en minuscules. Nous
avons choisi les majuscules, malgré leur aspect inesthétique, pour les distinguer visuellement
des mots définis par l’auteur d’une description.
9782100567027-livre.fm Page 15 Mercredi, 15. juin 2011 6:06 18
ENTITY biDirBuffer IS
PORT (outEn : IN STD_LOGIC;
datIn : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
datOut : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
datIO : INOUT STD_LOGIC_VECTOR (7 DOWNTO 0));
END ENTITY biDirBuffer;
1. Nous verrons (section C.5.2 page 138) que le type STD_LOGIC modélise bien plus qu'une simple
information logique. En toute rigueur, c'est le type STD_ULOGIC qui devrait être employé ici, mais
l'usage fait que ce n'est pas le cas.