Le langage VHDL
ENSIAS Rabat Z. ALAOUI ISMAILI 1
2.1. Qu’est ce que le langage VHDL?
VHSIC Hardware Description Language, où VHSIC
signifie Very High-Speed Integrated Circuit.
Le langage VHDL permet la description de tous les aspects d‟un système matériel (hardware
system): son comportement, sa structure et ses caractéristiques temporelles.
La description d‟un système en apte
simulée
VHDL
modèle VHDL est exécutable
appliquer des stimulis
(executable model).
observer l‟évolution des signaux
décrits en VHDL
du modèle dans le temps.
Le langage VHDL la synthèse
Le langage VHDL est un standard IEEE
ENSIAS Rabat Z. ALAOUI ISMAILI 2
2.2. Flot de conception basé sur VHDL
La Figure 2.1 illustre les différentes étapes du flot de conception ainsi que les outils
utilisés et les informations (données de conception) nécessaires.
ENSIAS Rabat Z. ALAOUI ISMAILI 3
Les composants Les
avec texte en composants
italique grisés
représentent des représentent
données qui ne des outils EDA
peuvent pas être
représentées en
VHDL.
ENSIAS Rabat Z. ALAOUI ISMAILI 4
Le flot de conception actuel basé description du système à réaliser
sur VHDL au niveauRTL.
Les fonctions complexes manière comportementale
Par exemple:
un contrôleur machine à états finis
(ou séquenceur) (FSM, finite state machine),
équations booléennes
régit
une partie opérative
flot de données
(ALU)
contrôlé
un signal d‟horloge
ENSIAS Rabat Z. ALAOUI ISMAILI 5
Un tel modèle RTL Ensemble de déclarations
paquetages (packages)
groupées
VHDL
description les types d‟information Ensemble des fichiers et
manipulés par le modèle. des procédures nécessaires
sous formes de blocs (organigrammes, machines d‟états,
validé etc.).
simulation logique Environnement de test
Écrit en VHDL
(testbench)
un ensemble de
stimulis, ou vecteurs de
test.
ENSIAS Rabat Z. ALAOUI ISMAILI 6
Le modèle RTL synthétisé
Outil de synthèse logique (logic
synthesis)
capable
description transformer circuit optimisé à base de
comportementale portes logiques (gatelevel
netlist).
satisfaire le circuit.
utilisateur
la surface les délais
Satisfaire le circuit.
ENSIAS Rabat Z. ALAOUI ISMAILI 7
Le résultat de la
Circuit de portes logiques
synthèse logique
tirer
nouvelle description
VHDL
N.B. La réalisation du circuit sous forme de layout est faite par un outil
de placement et de routage qui nécessite une description d‟entrée dans
un format différent de VHDL.
ENSIAS Rabat Z. ALAOUI ISMAILI 8
2.3. Environnement de travail VHDL
La Figure 2.2 illustre l‟environnement de travail type de VHDL et les différentes
phases d‟édition, d‟analyse, d‟élaboration et d‟exécution liées au langage.
ENSIAS Rabat Z. ALAOUI ISMAILI 9
simple éditeur de texte
Interface graphique
générer squelette d‟un
Éditeur de schémas
modèle VHDL
Le comportement du système à la déclaration d‟entité avec ses
modéliser sous la forme de machines ports et un corps d‟architecture
d‟états, de chronogrammes ou de minimum
tables de vérité
vérifie la syntaxe d‟une description
Analyseur (ou compilateur)
VHDL
ENSIAS Rabat Z. ALAOUI ISMAILI 10
comportement applique
Simulateur Système modélisé un ensemble de stimuli
écrit
Environnement de test VHDL
système définissant les stimuli
Opérations à appliquer aux signaux de
sortie
simulation pas à pas
visualiser (sous forme texte
de signaux ou graphique).
modification interactive
de valeurs,etc.
visualisation de variables
ENSIAS Rabat Z. ALAOUI ISMAILI 11
Outil de synthèse netlist de portes logiques
générer (synthèse logique)
description VHDL
architecture RTL comportementale
(synthèse de haut niveau)
Le résultat de la synthèse peut lui aussi être décrit en
VHDL pour simulation
ENSIAS Rabat Z. ALAOUI ISMAILI 12
2.4. Organisation d’un modèle VHDL
2.4.1. Unités de conception
L‟unité de conception (design unit) est le plus petit module compilable séparément.
VHDL offre cinq types d‟unités de conception (Figure 2.3):
la déclaration d‟entité (entity declaration);
le corps d‟architecture (architecture body), ou plus simplement architecture;
la déclaration de configuration (configuration declaration);
la déclaration de paquetage (package declaration);
le corps de paquetage (package body).
gris
ENSIAS Rabat Z. ALAOUI ISMAILI 13
P
Qualifiées de primaires
(primary unit)
vue externe
(le "quoi" de la boîte noire).
secondaires
(secondary units)
vue interne (le "comment"
de la boîte noire).
ENSIAS Rabat Z. ALAOUI ISMAILI 14
2.4.2. Entité de conception
L‟entité de conception (design entity) est l‟abstraction de base en VHDL.
Déclaration d‟entité et d‟un corps d‟architecture correspondant.
Une entité de conception
système matériel à plusieurs
niveaux de complexité
une porte logique.
Un système entier
une cellule complexe (p.ex. AL
un sous-système
mémoire, etc.)
une carte un circuit intégré
ENSIAS Rabat Z. ALAOUI ISMAILI 15
2.4.3. Bibliothèques de conception
VHDL possède deux bibliothèques logiques prédéfinies:
La bibliothèque de nom logique WORK est le dépositaire de toutes les unités de
conception compilées.
C‟est en fait la seule bibliothèque dans laquelle il est possible
d‟ajouter et de modifier des éléments.
La bibliothèque de nom logique STD est prédéfinie et contient deux unités:
le paquetage STANDARD, qui inclut les définitions des types, opérateurs
et sous-programmes prédéfinis;
le paquetage TEXTIO, qui inclut les définitions et les sous-programmes
relatifs au traitement de fichiers textes.
ENSIAS Rabat Z. ALAOUI ISMAILI 16
2.5. Modèles VHDL d’un registre 4 bits Le langage VHDL n‟est pas sensible
à la casse (minuscule, majuscule)
des lettres.
Plusieurs versions possibles d‟un Illustrer l‟usage des différentes unités de
modèle de registre 4 bits en VHDL conception et des styles de description
disponibles en VHDL.
2.5.1. Déclaration d’entité
La Figure 2.4 illustre la vue externe du registre 4 bits.
ENSIAS Rabat Z. ALAOUI ISMAILI 17
Les mots-clés réservés du
langage sont indiqués en
caractères gras.
les types de signaux transitant par ces
canaux ainsi que les directions de
Les ports (ports) définissent les canaux de transition.
communication entre le modèle et le monde
extérieur.
Dans l‟exemple, tous les signaux
sont du type prédéfini bit
les signaux d‟entrée (resp. de sortie)
sont définis par le mode in (resp. par le
mode out).
prendre la valeur
‟0‟ ou ‟1‟
la manière dont les signaux sont traités dans le modèle.
ENSIAS Rabat Z. ALAOUI ISMAILI 18
Rq: d‟entrée ne peut qu‟être lu dans
le modèle.
Le signal associé à un port
de sortie ne peut que recevoir une
valeur dans le modèle.
ENSIAS Rabat Z. ALAOUI ISMAILI 19
Architecture
Une architecture décrit le contenu d‟une entité VHDL a trois styles
d‟architecture qui peuvent être combinée dans le corps d‟une architecture
– Comportemental
– Flot de données
– Structurel
Le même circuit peut être décrit en utilisant n‟importe lequel des trois styles
Rq. Le même circuit peut être décrit en utilisant n‟importe lequel des trois
styles
ENSIAS Rabat Z. ALAOUI ISMAILI 20
Description comportementale
Une description comportementale fournit un algorithme qui modélise le
fonctionnement du circuit
Utilisation des algorithmes séquentielles
Une déclaration de processus contient un algorithme
- Elle commence par une étiquette (optionnel), le
mot clé “process” et une liste des signaux actifs
(sensivity list)
- La liste des signaux actifs indique quels signaux
provoqueront l‟exécution du processus
ENSIAS Rabat Z. ALAOUI ISMAILI 21
Process
Un PROCESS peut être sensible à une liste de signaux ou à un WAIT
Les PROCESS contiennent seulement des déclarations séquentielles qui sont exécutées dans l'ordre spécifié.
Syntaxe
[label]: PROCESS [(sensitive_signal_name {,sensitive_signal_name})]
[constant_declarations] Exemple
[variable_declarations] LIBRARY ieee;
BEGIN USE ieee.std_logic_1164.all;
ENTITY nor2 IS
[sequential_statements]
PORT (a,b : IN std_logic:='0';
END PROCESS [label]; qn : OUT std_logic);
END nor2;
ARCHITECTURE proc_behv OF nor2 IS
BEGIN
ex1: PROCESS(a,b) -- ce PROCESS est décrit avec une liste de sensibilité
BEGIN
qn <= a NOR b;
END PROCESS ex1;
ex2: PROCESS -- ce PROCESS n'a pas de liste de sensibilité
BEGIN
qn <= a NOR b;
WAIT ON a,b; -- WAIT permet d'attendre un événement sur a ou b
END PROCESS ex2;
END proc_behv;
ENSIAS Rabat Z. ALAOUI ISMAILI 22
Exemple
SENSE_PROC: PROCESS (CLK)
begin
if CLK'event and CLK='1' then
Q2 <= D2;
END IF;
END PROCESS SENSE_PROC;
WAIT_PROC: PROCESS
begin
WAIT UNTIL CLK'event and CLK='1';
Q1 <= D1;
END PROCESS WAIT_PROC;
ENSIAS Rabat Z. ALAOUI ISMAILI 23
Description flot de données
Utilisation d‟équations concurantes
Une description flot de données spécifie comment la donnée est transférée de
signal à signal sans utiliser d‟affectations séquentielles (comme dans la
description comportementale)
Cette description ne nécessite pas de déclaration de processus
Toutes les déclarations s‟exécutent en même temps (“concurrent signal
assignment”)
ENSIAS Rabat Z. ALAOUI ISMAILI 24
Descriptions structurelles
Création d‟un lien avec un modèle
Les composants sont instanciés et connectés.
Ils doivent être définis dans un package et compilés dans une
bibliothèque
Les bibliothèques sont attachées par une déclaration
xnor2 and and4 sont dans la
bibliothèque work.gatespkg.
ENSIAS Rabat Z. ALAOUI ISMAILI 25
Port Map
PORT MAP est utilisé pour associer les broches d'un COMPONENT
avec les signaux du montage.
Deux méthodes d'affectation sont possibles :
par l'association des noms ;
par l'association des positions (la plus courante).
Syntaxe
PORT MAP (pin_name => signal_name {, pin_name => signal_name});
PORT MAP (signal_name {, signal_name});
ENSIAS Rabat Z. ALAOUI ISMAILI 26
Component
COMPONENT permet d'écrire d'un programme sous la forme structurelle. En effet, il faut
déclarer et définir les composants de la fonction puis dans le corps de l'architecture, il
suffit de les connecter en suivant un schéma structurel.
Cette méthode d'écriture permet aussi la description hiérarchique.
Quatre blocs sont à distinguer dans une telle définition :
recensement de tous les composants du schéma. Ceci se fait par la syntaxe
COMPONENT ... END COMPONENT ;
affectation des liaisons du schéma aux broches des composants. On utilise PORT MAP.
Cette phase correspond à réaliser la NETLIST du schéma ;
attribution des circuits à leur ENTITY. Cette phase permet de contrôler le modèle
comportemental qui va déterminer du fonctionnement du composant. Cette phase est
réalisée avec CONFIGURATION ;
définition comportementale de chaque composant associé. Ici on procédera à une
simple structure d'écriture basée autour d'ENTITY et d'ARCHITECTURE.
ENSIAS Rabat Z. ALAOUI ISMAILI 27
2.5.2. Architecture comportementale
Le Code 2.4 donne le corps d‟architecture définissant un modèle comportemental du registre.
bhv à la déclaration
d‟entité de nom reg4
nom référence
architecture
Tous les objets déclarés dans l‟entité (ici les
signaux d‟interface) sont visibles dans
l‟architecture sans déclaration supplémentaire.
ENSIAS Rabat Z. ALAOUI ISMAILI 28
Rq: Le comportement du registre est défini à l‟aide d‟un processus unique délimité
par les mots-clés process et end process.
Le processus définit une séquence d‟instructions qui:
1. mémorisent conditionnellement l‟état des entrées du registre lorsque le signal en
et l‟horloge clk sont actifs (ici égaux à la valeur ‟1‟),
2. modifient les valeurs des signaux de sortie du registre q0, q1, q2 et q3 avec un délai
de 5 ns (clause after);
ce délai modélise le fait que le registre réel ne
réagira pas de manière instantanée,
3. mettent le processus en état de veille jusqu‟à un prochain événement sur l’un
quelconque des signaux d‟entrée (instruction wait).
Un événement sur l‟un des signaux d‟entrée du registre réactivera le processus qui
exécutera ses instructions en repartant de la première instruction après le motclé
begin.
ENSIAS Rabat Z. ALAOUI ISMAILI 29
Le processus déclare quatre variables locales :
d0_reg, d1_reg,
type bit
d2_reg et d3_reg
mémoriser l‟état
interne du registre
sont initialisées à la valeur ‟0‟ début de la simulation
(valeur par défaut)
Variables
conservent leurs valeurs d‟une
activation du processus à l‟autre
N.B. Une variable ne peut être déclarée et utilisée que dans le corps d‟un processus.
Rq: Le corps d‟architecture peut être stocké dans un fichier propre dont le nom suggéré
est reg4_bhv.vhd.
ENSIAS Rabat Z. ALAOUI ISMAILI 30
2.5.3. Architecture structurelle
La Figure 2.5 représente une vue structurelle du registre 4 bits composée de composants
(portes) de types latch et AND interconnectés.
Le Code 2.5 donne l‟architecture VHDL correspondante.
ENSIAS Rabat Z. ALAOUI ISMAILI 31
L‟architecture nommée str fait référence à la même déclaration d‟entité que le modèle
comportemental précédant, ce qui est normal vu que la vue externe du modèle reste la même.
ENSIAS Rabat Z. ALAOUI ISMAILI 32
L‟architecture reflète fidèlement la structure de la Figure 2.5.
Elle déclare dans un premier temps Elle ne lie pas encore ses
les composants nécessaires latch et instances à des modèles
and2 dont un certain nombre effectifs.
d‟instances seront “placées” dans le
modèle. Une déclaration de composant ne
constitue qu‟une définition virtuelle
de ce dont le modèle a besoin.
ses ports formels définis dans sa
(formal ports) déclaration
Chaque instance de définit les
composant associations
ports effectifs les signaux d‟interface
(actual ports) (signal local du registre)
ENSIAS Rabat Z. ALAOUI ISMAILI 33
Rq
Dans l‟exemple
les instances de association par nom
latches (named association)
1.
Utilise
l‟instance de la porte une association par position
and2 (positional association)
2. L‟étiquette obligatoire pour nommer chaque instance
bit0
(label) de manière unique.
3. L‟ordre de déclaration
peut être quelconque.
des instances
ENSIAS Rabat Z. ALAOUI ISMAILI 34
Rq
une étape supplémentaire de
Les modèles des composants utilisés
configuration sera nécessaire pour
ne sont pas définis à ce niveau
rendre le modèle structurel du
registre simulable.
Associer une entité de conception (paire entité/architecture)
à chaque instance de composant
Comme les noms des composants
déclarés et de leurs ports formels
la configuration se chargera de
peuvent être a priori quelconques
définir les associations nécessaires.
N.B
Le corps d‟architecture peut être stocké dans un fichier propre dont le nom suggéré est
reg4_str.vhd.
Il peut être compilé et le résultat de la compilation sera placé dans la bibliothèque de travail
WORK.
ENSIAS Rabat Z. ALAOUI ISMAILI 35
2.5.4. Environnement de test
L‟environnement de test (testbench) d‟un modèle VHDL peut être lui-même décrit
comme un modèle VHDL.
La Figure 2.6 illustre la structure d‟un tel environnement.
ENSIAS Rabat Z. ALAOUI ISMAILI 36
Le modèle à tester est instancié comme un composant d‟un modèle qui ne possède
pas d‟interactions avec le monde extérieur.
Le reste du modèle définit les stimulis à appliquer au composant testé et un
traitement éventuel des résultats obtenus aux sorties du composant.
Un environnement de test VHDL est usuellement un mélange de structure et de
comportement.
Le Code 2.6 donne le modèle VHDL de l‟environnement de test du modèle
du registre 4 bits.
ENSIAS Rabat Z. ALAOUI ISMAILI 37
entité
Analyse du code
L’horloge
stimulis
Remarques
ENSIAS Rabat Z. ALAOUI ISMAILI 38
La déclaration d‟entité se
limite à sa plus simple
expression puisque le
modèle de test est un
environnement fermé.
ENSIAS Rabat Z. ALAOUI ISMAILI 39
Le composant à tester est
déclaré puis instancié.
Pour l‟instant rien ne lie
l‟instance de composant
avec une entité de
conception particulière.
Il s‟agit encore de
définir une configuration
pour rendre
l‟environnement de test
simulable.
ENSIAS Rabat Z. ALAOUI ISMAILI 40
Le comportement du signal
d‟horloge clk est défini au
moyen d‟une affectation
concurrente de signal
Le signal clk a une valeur
initiale par défaut égale à
‟0‟, qui est la première
valeur du type énuméré
prédéfini
bit.
Le signal d‟horloge aura
une période de 40 ns.
ENSIAS Rabat Z. ALAOUI ISMAILI 41
Les autres stimulis sont
définis dans un processus
Plusieurs séquences de
stimulis délimitées par des
instructions wait sont
définies.
Lorsque tous les stimulis
ont été appliqués, la
dernière instruction wait
sans paramètre stoppe le
processus indéfiniment.
ENSIAS Rabat Z. ALAOUI ISMAILI 42
Le modèle ne contient pas d‟instructions particulières pour le traitement des résultats,
c‟est-à-dire des signaux q0, q1, q2 et q3. On se contente dans ce cas de visualiser les
formes d‟ondes dans l‟environnement de simulation.
Un environnement de test plus élaboré pourrait contenir des composants
supplémentaires pour la génération des stimulis et le traitement des signaux de sortie.
Comme la déclaration d‟entité est très simple, il est recommandé de maintenir la
déclaration d‟entité et le corps d‟architecture dans le même fichier dont le nom
suggéré est reg4_tb.vhd.
ENSIAS Rabat Z. ALAOUI ISMAILI 43
2.5.5. Déclaration de configuration
La déclaration de configuration définit la vue de plus haut niveau d‟un modèle.
Associer une instance de composant à un couple entité/architecture.
Elle définit les associations globales entre les instances de composants d‟une architecture et
les entités de conception disponibles dans une bibliothèque (WORK ou autre).
Le Code 2.7 donne la
déclaration de configuration de
l‟environnement de test du
registre 4 bits utilisant le
modèle comportemental du
registre (Code 2.4).
On suppose que l‟entité de conception reg4(bhv) a déjà été compilée sans erreur dans la
bibliothèque WORK.
ENSIAS Rabat Z. ALAOUI ISMAILI 44
nécessaire parce que les noms donnés aux ports
de la déclaration de composant dans
l‟environnement de test ne sont pas identiques à
ceux de la déclaration d‟entité du registre.
L‟association port map associe les noms
des ports de l‟entité (ports formels) aux
noms de ports correspondant de la
déclaration de composant (ports effectifs)
Cette association pourrait être omise
si les noms étaient identiques.
ENSIAS Rabat Z. ALAOUI ISMAILI 45
La Figure 2.7 montre les résultats de la simulation du testbench du Code 2.6 avec la
configuration du Code 2.7.
ENSIAS Rabat Z. ALAOUI ISMAILI 46
N.B. Le test de l‟architecture structurelle du registre requiert la définition d‟une autre
configuration sans qu‟il soit nécessaire de modifier le modèle de l‟environnement
de test.
Le Code 2.8 donne la nouvelle déclaration de configuration.
ENSIAS Rabat Z. ALAOUI ISMAILI 47
On suppose que les entités de conception des portes dlatch (Code 2.9) et and2 (Code
2.10) ont été préalablement compilées sans erreur dans la bibliothèque GATES.
ENSIAS Rabat Z. ALAOUI ISMAILI 48
Remarques
La déclaration de configuration comporte dans ce cas un niveau hiérarchique supplémentaire
pour associer les instances de portes logiques.
Comme les noms des ports de la déclaration d‟entité dlatch sont identiques à ceux de la
déclaration du composant du même nom dans l‟architecture str, la partie port map n‟est
pas nécessaire.
La déclaration de configuration est stockée dans un fichier dont le nom suggéré est
reg4_tb_cfg_str.vhd.
ENSIAS Rabat Z. ALAOUI ISMAILI 49
2.5.6. Récapitulation
La Figure 2.8 récapitule les liens entre les unités de conception, les composants et la déclaration
de configuration.
ENSIAS Rabat Z. ALAOUI ISMAILI 50
ENSIAS Rabat Z. ALAOUI ISMAILI 51
2.6. Concurrence et modélisation du temps
microprocesseur
exhibe un fonctionnement
Un système matériel essentiellement concurrent
l‟unité arithmétique et logique
chacune de ses parties les registres
remplissent leur tâches
les mémoires
activation de signaux de contrôle
décomposées
séquencement des opérations requises
Tâches concurrentes niveau du matériel
par le programme assembleur
exécuteront
indépendamment
les unes des autres
ENSIAS Rabat Z. ALAOUI ISMAILI 52
Un langage de description de matériel tel VHDL se distingue ainsi des langages de
programmation comme Ada ou C par le fait, entre autres, qu‟il inclut des instructions
pour décrire et simuler des comportement concurrents.
2.6.1. Processus
L‟instruction concurrente
de base en VHDL processus (process).
Tout modèle VHDL
peut se
décrire de manière
équivalente
Processus 1 Processus 4
Processus 2 Processus 3
communiquant l‟intermédiaire de
ENSIAS Rabat Z. ALAOUI ISMAILI 53
Encapsule une séquence
Un processus d‟instructions à exécuter dans
l‟ordre donné
L‟exécution
des instructions d‟un processus est
conditionnée à des événements
(event) sur des signaux
Un signal
N.B. est réputé avoir un événement si sa valeur à un instant donné subit un
changement.
ENSIAS Rabat Z. ALAOUI ISMAILI 54
contenir plusieurs
processus
Comment mettre
à jour les signaux??
modèle VHDL définir
A quel moment les
(le simulateur VHDL processus doivent être
doit pouvoir n‟utiliser activés??
qu‟un seul processeur)
Le comportement l‟ordre dans lequel les
les résultats de la indépendant
concurrent manière processus sont
simulation
doit être émulé exécutés
En d‟autres mots, il s‟agit de préserver le déterminisme
N.B. C‟est pour cela qu‟un cycle de simulation canonique fait partie de la définition du
langage.
ENSIAS Rabat Z. ALAOUI ISMAILI 55
VHDL
Données un processus
signaux (signal) variables (variable)
visibilité (scope) globale dans un visibilité locale dans un
modèle processus
Stocker des valeurs
Partager des données intermédiaires lors de
entre processus. l‟exécution des instructions
séquentielles d‟un processus.
N.B. Tous les processus d‟un modèle VHDL sont créés au début de la simulation et existent
jusqu‟à la fin de la simulation.
ENSIAS Rabat Z. ALAOUI ISMAILI 56
Le Code 2.13 donne l‟exemple simple d‟un modèle de demi-additionneur 1 bit à deux processus
nommés Sum et Carry.
Les deux processus sont sensibles à des événements sur le signal A ou sur le signal B, sans
priorité particulière.
ENSIAS Rabat Z. ALAOUI ISMAILI 57
N.B
L‟ordre d‟exécution des deux Une fois l‟évaluation des nouvelles valeurs des
processus peut être quelconque sans signaux S et CO effectuée, chaque processus se
que cela change les résultats de la met en veille et attend le prochain événement sur
simulation. A ou sur B.
La mise
en veille est exécutée par
l‟instruction wait
Une réactivation future des processus fera reprendre le flot d‟instructions séquentielles juste
après l‟instruction wait (dans notre exemple, chaque processus recommencera à s‟exécuter
après le mot-clé begin)
Un processus sans instruction wait est ainsi condamné à s‟exécuter en boucle infinie sans qu‟il
soit possible de voir quoique ce soit en simulation. C‟est donc une situation à éviter et qui est
détectée par le compilateur VHDL.
ENSIAS Rabat Z. ALAOUI ISMAILI 58
2.6.2. Synchronisation de processus
L‟instruction wait permet de définir la (les) condition(s) d‟activation d‟un processus. Elle
peut prendre plusieurs formes.
1. La forme:
active un processus dès qu‟un La liste des signaux forme une liste de
événement survient sur l‟un sensibilité (sensitivity list).
des signaux de la liste.
2. La forme:
active un processus dès Les signaux impliqués dans la
que la condition est vraie. condition forment une liste de
sensibilité.
N.B. Si la liste est vide, l‟instruction wait stoppe le processus de manière définitive.
ENSIAS Rabat Z. ALAOUI ISMAILI 59
active un processus après un
3. La forme:
temps de suspension spécifié par
le délai.
4. La forme générale:
est possible
Le processus est activé dès la première condition d‟activation (événement sur un
signal et condition vraie) ou après le temps écoulé.
N.B. Une instruction wait seule stoppe un processus de manière définitive.
Plusieurs instructions wait peuvent exister dans un processus.
ENSIAS Rabat Z. ALAOUI ISMAILI 60
Le Code 2.14 donne l‟exemple d‟un comportement asynchrone contrôlé par deux signaux
A et B.
ENSIAS Rabat Z. ALAOUI ISMAILI 61
2.6.3. Signaux
processus
Les signaux les objets nécessaires à
la communication
entités de conception
représentent
une abstraction de formes d‟ondes temporelles dont
les valeurs sont d‟un type donné.
Un signal possède une structure de donnée complexe appelée un pilote (driver) qui
Rq.
stocke la valeur courante du signal et éventuellement ses valeurs futures.
Le Code 2.15 illustre l‟affectation
d‟une forme d‟onde à un signal S
ENSIAS Rabat Z. ALAOUI ISMAILI 62
La forme d‟onde spécifie un certain nombre de transactions ordonnées dans le temps
qui constituent la forme d’onde projetée (projected waveform)
Tous les délais sont relatifs au temps auquel l‟instruction est exécutée.
La Figure 2.9 montre la forme d‟onde résultante de l‟affectation.
Etant donné l‟instruction wait initiale, l‟affectation se fera au temps NOW = 5 ns.
La fonction NOW est prédéfinie en VHDL et retourne le temps de simulation courant.
ENSIAS Rabat Z. ALAOUI ISMAILI 63
Remarques:
Une variable ne peut exister que dans un contexte séquentiel, elle est affectée
immédiatement. Elle n‟est pas visible à l‟extérieur d‟un processus
x := 1 + 2; -- x prend la valeur 3
Le signal est le seul objet qui peut être affecté soit de façon concurrente, soit
de façon séquentielle selon le contexte. Il est l‟agent de communication
entre processus.
L‟affectation du signal
est différé à cause de
son pilote.
le ou les couples valeur_future:
Lors de l‟affectation
heure_de_simulation sont placés dans le
séquentielle
pilote.
La valeur sera (ou dans quelques cas conflictuels, ne sera pas) effectivement passée au
signal au moment de la suspension du Process par une instruction WAIT
on peut être amené à écrire WAIT FOR 0 ns; pour forcer cette affectation à être
immédiate).
ENSIAS
ENSA deRabat
Tanger Z. ALAOUI ISMAILI 64
« C’est le pilote du signal qui est affecté et non le signal lui-même »
s <= 1 + 2 AFTER 10 ns; -- le pilote de s reçoit le couple de valeurs 3,10
Illustration 1: différence dans les affectations
-- à l‟heure H = 10 ns , aa prend la valeur 7 , bb prend
la valeur 9
-- entre 0 et 10 ns aa vaut 3 et bb vaut 2
-- à l‟heure H = 10 ns , aaa prend la valeur 0, bbb prend la
valeur 11
-- entre 0 et 10 ns aaa vaut 3 et bbb vaut 2
De deux affectations successives d‟un même signal, seule la deuxième compte.
Le pilote du signal constitue une mémoire associée au signal
ENSIAS
ENSA deRabat
Tanger Z. ALAOUI ISMAILI 65
Illustration 2: Mémorisation implicite du signal
ENSIAS
ENSA deRabat
Tanger Z. ALAOUI ISMAILI 66
N.B.
Le pilote définit une
source pour le signal
1. Un processus contenant plusieurs instructions d‟affectation de signal définit des pilotes
(ou des sources) distincts pour chaque signal affecté.
Un signal ne peut normalement pas
posséder plus d‟une source
L‟usage de signaux multi-sources est Ceci est possible en VHDL grâce à un type
2.
cependant nécessaire pour modéliser particulier de signal appelé signal résolu
des bus ou des fonctions ET et OU (resolved signal).
câblées!!!!
ENSA de Rabat
ENSIAS Tanger Z.
Z.ALAOUI
ALAOUIISMAILI
ISMAILI 67
67
même si l‟instruction d‟affectation ne
spécifie pas de clause de délai (clause
after).
Un signal ne prend jamais une L‟affectation définit une transaction qui sera
3.
nouvelle valeur exécutée une fois que le processus est
immédiatement suspendu par une instruction wait.
L‟exécution d‟une transaction définit un événement
induisant un changement de (event) sur le signal.
valeur du signal
N.B. Un événement est toujours le résultat d‟une transaction.
Une transaction ne cause pas forcément un événement
ENSIAS Rabat Z. ALAOUI ISMAILI 68
2.7. Types et Sous-types
Chaque objet doit être déclaré et
Le VHDL est un langage
appartenir à un type connu (ensemble
fortement typé
de valeurs possibles).
Pour illustrer ce paragraphe, nous prendrons en priorité les types prédéfinis de la
bibliothèque standard 1076 ou 1164.
2.7.1 Scalaires
Ils sont ordonnés (=, /=, <, <=, >, >=) et peuvent être restreints « RANGE
limite_basse TO limite_haute» ou « RANGE limite_haute DOWNTO limite_basse»
2.7.1.1 Enumérés
Ensemble de littéraux.
TYPE boolean IS ( false, true);
TYPE bit IS (.0., .1.); -- type énuméré de 2 caractères
TYPE type_etat IS (init, debut, fin);
TYPE couleur IS ( bleu, blanc, rouge);
ENSIAS Rabat Z. ALAOUI ISMAILI 69
2.7.1.2 Entiers
TYPE integer IS RANGE -2147483648 TO 2147483647;
SUBTYPE natural IS integer RANGE 0 TO integer´high;
TYPE pour_mon_compteur IS RANGE 0 TO 99;
2.7.1.3 Flottants
TYPE real IS RANGE -1.0E38 TO 1.0E38;
2.7.1.4 Physique
TYPE time IS RANGE -2147483647 TO 2147483647
UNITS
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
END UNITS;
ENSIAS Rabat Z. ALAOUI ISMAILI 70
2.7.2 Composites (Tableaux et enregistrement)
2.7.2.1 Tableaux
Les tableaux (ARRAY) peuvent être à une ou plusieurs dimensions
TYPE bit_vector IS ARRAY ( natural RANGE <> OF bit); --
TYPE string IS ARRAY ( positive RANGE <> OF character);
TYPE matrice IS ARRAY ( 1 TO 4, 0 TO 7) OF bit; -- matrice de bits à 2
dimensions 4X8
2.7.2.2 Enregistrements
Les enregistrements (RECORD) permettent de définir des collections de valeurs
elles-mêmes typées comme dans l´exemple suivant:
TYPE date IS RECORD
jour : natural RANGE 1 TO 31;
mois : string;
annee : integer RANGE 0 TO 4000;
END RECORD;
ENSIAS Rabat Z. ALAOUI ISMAILI 71
La déclaration CONSTANT date_de_naissance : date := (29, JUIN, 1963); est
parfaitement correcte.
On peut accéder à un élément de l´enregistrement en désignant son champ par
N.B. un point comme dans... date_de_naissance.jour ou date_de_naissance.mois
etc...
De manière similaire si un SIGNAL ou une VARIABLE est de
type RECORD, il est possible de faire des affectations partielles
d´un élément.
2.7.3 fichier
Les fichiers (FILE) sont très utilisés pour stocker des données telles que Mémoires
ROM, Données de test.
TYPE text IS FILE OF string;
ENSIAS Rabat Z. ALAOUI ISMAILI 72
2.7.4 Sous-Types
Un sous-type reste compatible avec son type d‟origine contrairement à un type
nouvellement créé.
SUBTYPE narural IS integer RANGE 0 TO integer‟high : natural reste compatible avec integer
TYPE nouvel_entier IS RANGE 0 TO 99: nouvel_entier est un type différent
2.7.5 Conversion de type
La conversion de type, <type>(<expression>), est prévue en VHDL mais avec la
restriction que les types doivent être en relation…
TYPE donnee_longue IS RANGE 0 TO 1000;
TYPE donnee_courte IS RANGE 0 TO 15;
SIGNAL data : donnee_longue;
SIGNAL donnee :donnee_courte;
data <= donnee_longue(donnee * 5); -- correct
On a 2 types différents à droite et à gauche de l´affectation mais le compilateur est
capable de faire la transformation (data et donnee sont des entiers).
ENSIAS Rabat Z. ALAOUI ISMAILI 73
Pour des types qui ne sont pas en relation, il est nécessaire de disposer de fonctions
Rq
de conversion. On en trouve un grand nombre dans les paquetages standards.
2.8. Structures de contrôle
2.8.1 IF...THEN...ELSIF...ELSE...END IF
2.8.2 CASE ... IS...WHEN…
ENSIAS Rabat Z. ALAOUI ISMAILI 74
2.9. ASSERT
L‟instruction ASSERT est la seule qui permet de générer des messages à l‟écran.
Elle n‟a donc pas de sens en synthèse (circuit) sinon pendant la phase de mise au
N.B.
point, par contre elle correspond exactement à la démarche du test par assertion.
On vérifie des propriétés du circuit par un ensemble d‟affirmation (vraies ou fausses).
ASSERT FALSE REPORT "Ceci n‟est qu‟un petit bonjour a l‟écran";
Ou bien
WAIT UNTIL h = „1‟;
ASSERT s = „1‟ REPORT "la sortie vaut „0‟ et ce n‟est pas normal " SEVERITY
WARNING;
ENSIAS Rabat Z. ALAOUI ISMAILI 75
2.9 Sous-programmes
Les sous-programmes permettent de regrouper une suite instructions séquentielles pour
décrire une seule fois un calcul particulier devant (ou non) se répéter.
Exemple:
conversion de type, partie de processus, fonction de vérification de timing,
fonction de résolution, générateur de stimuli etc…
Il existe deux types de sous-programmes
2.9.1 Procédures et fonctions
Les procédures peuvent agir par effet de bord (modification de l´environnement)
alors que les fonctions retournent un résultat typé.
Cette procédure définit un signal d´horloge qui est ensuite instanciée de façon
concurrente sur un signal C
ENSIAS Rabat Z. ALAOUI ISMAILI 76
Les fonctions retournent une valeur typée comme dans l´exemple suivant de fonction de
conversion d‟un bit_vector en entier qui n‟existe pas dans la bibliothèque standard 87
L´utilisation dans une affectation séquentielle ou concurrente de signal est possible.
Le passage des paramètres se fait soit par position (ordre prédéfini) soit par
dénomination) ordre quelconque.
Autre exemple:
La fonction de conversion d‟un entier en bit_vector serait :
ENSIAS Rabat Z. ALAOUI ISMAILI 77
• Ecrire une procédure qui permet de détecter le min et le max de quatre valeurs.
• Ecrire une fonction qui ajoute une valeur de 1.0 à une variable a.
2.10. Blocs
Le bloc (BLOCK) est élément de base de la structuration de la description. Il permet de
définir une hiérarchie.
• Ce que c‟est : Une sous unité d‟une entitée
C‟est un mélange de process et de component : un process avec des ports
d‟entrée et de sortie
• Rarement utilisés en pratique : alourdi le code. On préconise plutôt l‟utilisation des
components
ENSIAS
ENSA deRabat
Tanger Z. ALAOUI ISMAILI 78
2.10.1 Blocs avec Ports
ENSIAS Rabat Z. ALAOUI ISMAILI 79
VHDL supporte trois types de délais
délai delta modélise une affectation de
1.
(delta delay) signal à délai nul
quel que soit l‟ordre essentiel pour garantir des résultats de
d‟exécution des processus simulation corrects
délai inertiel modélise
2. temps de réaction
(inertial delay)
non nul
Le mode par défaut lorsque une clause Tout événement se passant
de délai (clause after) est spécifiée. plus rapidement que le délai inertiel est
filtré et est donc annulé.
délai de transport
3. modélise
(transport delay) réponse fréquentielle
infinie
toute impulsion, quelle que
soit sa durée, est transmise.
ENSIAS Rabat Z. ALAOUI ISMAILI 80
2.6.4. Initialisation et cycle de simulation
La simulation d‟un modèle VHDL débute par une phase d‟initialisation et est suivie par
l‟exécution répétitive d‟un cycle de simulation.
La phase d’initialisation est composée des pas suivants:
1) Affectation des valeurs par défaut ou des valeurs initiales à tous les signaux et les
variables.
2) Temps T := 0 ns.
3) Exécution de tous les processus jusqu‟à leur première instruction wait
Durant la phase d‟initialisation
par son type
1) Chaque signal et variable reçoit
une valeur initiale déterminée
l‟expression qui
accompagne sa déclaration
Le temps de simulation est Chaque processus est activé et ses instructions
2)
ensuite mis à zéro sont exécutées jusqu‟à la première instruction
wait rencontrée.
ENSIAS Rabat Z. ALAOUI ISMAILI 81
3) Chaque processus est finalement suspendu à l‟endroit de l‟instruction wait.
4) L‟exécution des instructions des processus génère usuellement des transactions dans
des pilotes de signaux.
5) Une affectation de signal à délai nul génère une transaction à traiter au temps de
simulation courant(délai delta).
6) Une affectation de signal à délai non nul génère une transaction à traiter à un temps futur.
Exemple
La valeur initiale par défaut d‟un objet de type T est définie comme étant la valeur
correspondant à T‟left. Exemples de valeurs initiales par défaut:
signal S1: bit; -- S1 = ’0’ à T = 0
signal S2: integer; -- S2 = -231-1 (32 bits) à T = 0
signal S3: bit_vector(0 to 7); -- S3 = "00000000" à T = 0
ENSIAS Rabat Z. ALAOUI ISMAILI 82
Le cycle de simulation est composé des pas suivants:
S1) Temps T := temps de la (des) prochaine(s) transaction(s).
S2) Mise à jour des signaux si événement.
S3) Exécution de tous les processus sensibles aux signaux mis à jour jusqu‟à leur
prochaine instruction wait.
S4) Si nouvelles transactions au temps courant, retour en S2 (cycle delta), sinon,
si T = time‟high ou si plus de transaction, fin de la simulation, sinon, retour en S1.
commence déterminer le temps de la (ou des)
Rq Le cycle de simulation transactions la (les) plus proche(s).
une éventuelle mise à jour
Toutes les transactions
de la valeur courante de se traduit prévues à ce temps
signaux.
sont alors appliquées
ENSIAS Rabat Z. ALAOUI ISMAILI 83
Tous les processus sensibles aux signaux qui ont subit un événement sont
N.B.
ensuite réactivés et leurs instructions exécutées jusqu‟à la prochaine instruction
wait.
Un signal ne prend mais toujours au début du cycle de
Rq. jamais sa nouvelle
simulation suivant
valeur immédiatement
Cette règle permet d‟obtenir les mêmes
résultats de simulation quel que soit l‟ordre
d‟exécution des processus.
ENSIAS Rabat Z. ALAOUI ISMAILI 84
2.6.5. Représentation du temps
Le temps en VHDL Valeur du type prédéfini time
2.6.6. Délai delta
Illustration du fonctionnement du délai delta
Considérons le circuit logique de la réalisant une fonction OU exclusif
(Figure 2.11).
Le Code 2.16 donne le modèle VHDL correspondant.
ENSIAS Rabat Z. ALAOUI ISMAILI 85
Ce modèle définit quatre On aura six pilotes créés que
Après élaboration l‟on note P_A, P_B, P1_C,
processus concurrents P1,
P2, P3 et P4, P2_D,P3_E et P4_Z.
- A T = 0 ns
A B C D E Z
0 0 1 1 1 0
ENSIAS Rabat Z. ALAOUI ISMAILI 86
Supposons que: Le cycle de simulation effectue
le signal A ‟1‟ à T = 10 ns. alors les actions suivantes à
T = 10 ns:
- Le signal A est mis à jour
- Processus sensibles à l‟événement sur A: P1 et P2.
- Délai delta ∂0:
Exécution du processus P1: une transaction (‟1‟ @∂1)
C <= ‟1‟ nand ’0’ dans P1_C.
(avec la valeur courante
de C)
Exécution du processus P2: une transaction (‟0‟ @∂1)
D <= ‟1‟ nand ’1’ dans P2_D.
- Nouveau cycle de simulation à T = 10 ns (délai delta ∂1)
- Mise à jour des signaux:
La transaction (‟1‟ @∂1) dans P1_C n‟aboutit pas à un événement.
La transaction (‟0‟ @∂1) dans P2_D aboutit à un événement D = ‟0‟.
ENSIAS Rabat Z. ALAOUI ISMAILI 87
- Processus sensible à l‟événement sur P2_D: P4.
Exécution du processus P4: Transaction (‟1‟ @∂2) dans
- Délai delta ∂1:
Z <= ‟0‟ nand ’1’ P4_Z.
- Mise à jour des signaux: Transaction (‟1‟ @∂2) un événement. Z = ‟1‟.
dans P4_Z
- Aucun processus sensible à un événement sur Z.
Le cycle de simulation ne redémarrera
L‟état du modèle est stable qu‟à l‟occasion d‟un événement sur l‟un
des signaux d‟entrée
ENSIAS Rabat Z. ALAOUI ISMAILI 88
La relation entre temps simulé et
délais delta est illustrée à la
Figure 2.12.
Rq
Les délais delta induisent
Les délais delta garantissent le
des itérations sans que le
déterminisme:
temps simulé avance
les valeurs des signaux à la fin d‟un cycle
d‟itérations delta ne dépendent pas de l‟ordre dans
lequel les processus sont exécutés
ENSIAS Rabat Z. ALAOUI ISMAILI 89
2.6.7. Délai inertiel
Le délai inertiel modélise le fait qu‟un système matériel réel ne peut pas changer d‟état
en un temps infiniment court.
En réalité, il faut plutôt appliquer des signaux pendant un temps
suffisamment long pour surmonter l‟inertie inhérente dûe au
mouvement des électrons.
Le délai inertiel est le mécanisme
par défaut en VHDL pour une affectation S <= valeur after délai;
de signal du type:
VHDL-93 le mot-clé inertial pour explicitement mentionner un délai inertiel
et permet de spécifier un temps de rejection plus petit que le délai inertiel:
La durée du temps de rejection doit être positive et plus petite ou égale au délai
inertiel.
ENSIAS Rabat Z. ALAOUI ISMAILI 90
Le Code 2.17 donne un extrait de modèle utilisant un délai inertiel pour définir le
comportement d‟un inverseur
La Figure 2.13 illustre les résultats de l‟affectation des signaux Y1 et Y2.
Le changement de valeur du signal A
à 5 ns est propagé sur Y1 et Y2 avec
un délai de 5 ns.
L‟impulsion sur A dès 20 ns et
d‟une durée de 3 ns n‟est pas
propagée sur Y1 car sa durée est
plus petite que le délai inertiel de 5
ns.
ENSIAS Rabat Z. ALAOUI ISMAILI 91
L‟impulsion sur A dès 20 ns et d‟une durée de 3 ns propagée sur Y2 car l‟affectation
spécifie un délai de rejection de 2 ns.
La deuxième impulsion sur A dès 34 ns et d‟une durée de 1,5 ns n‟est par contre
propagée ni sur Y1 ni sur Y2.
ENSIAS Rabat Z. ALAOUI ISMAILI 92
2.6.8. Délai transport
Le délai transport modélise un comportement idéal pour lequel toute impulsion quelle
que soit sa durée, est transmise
Le délai transport est spécifié dans une
affectation de signal sous la forme:
Le Code 2.18 donne un extrait de modèle utilisant un délai transport pour
définir le comportement d‟un inverseur.
Il montre aussi une formulation équivalente
utilisant un délai inertiel et une durée de
rejection nulle.
ENSIAS Rabat Z. ALAOUI ISMAILI 93
La Figure 2.14 illustre les résultats de l‟affectation des signaux Y1 et Y2.
Les transactions impliquées par des changements de valeurs sur le signal A dans un
délai plus petit que 5 ns sont simplement ajoutées au pilote du signal affecté.
ENSIAS Rabat Z. ALAOUI ISMAILI 94
2.6.9. Transactions multiples
Des transactions multiples sur un même signal peuvent exister si plusieurs affectations
sont définies dans le corps d‟un processus.
selon le type de délai
on obtient des contenus de pilotes
L‟ordre d‟affectation est
différents et éventuellement des formes
dans ce cas important
d‟ondes différentes
On distingue cinq cas
ENSIAS Rabat Z. ALAOUI ISMAILI 95
• Cas 1: Délai inertiel
La première transaction (‟1‟, 5 ns) est supprimée car la seconde transaction (‟0‟,
3 ns) est prévue avant.
• Cas 2: Délai inertiel
La première transaction (‟1‟, 3 ns) est supprimée car la seconde transaction (‟0‟, 5
ns) est prévue plus tard et avec une valeur différente.
ENSIAS Rabat Z. ALAOUI ISMAILI 96
• Cas 3: Délai inertiel
Les deux transactions (‟0‟, 3 ns) et (‟0‟, 5 ns) sont conservées. La seconde transaction
ne crée pas d‟événement.
• Cas 4: Délai transport
La première transaction (‟1‟, 5 ns) est supprimée car la seconde transaction (‟0‟, 3 ns)
est prévue avant.
ENSIAS Rabat Z. ALAOUI ISMAILI 97
• Cas 5: Délai transport
La seconde transaction (‟0‟, 5 ns) est ajoutée dans le pilote car elle est prévue après la
première transaction.
La Table 2.1 résume les différents cas de transactions multiples possibles.
ENSIAS Rabat Z. ALAOUI ISMAILI 98
2.7. La généricité
La généricité peut être vue comme un moyen d'extraire les invariants et les paramètres
d'un composant.
Les invariants d'un Tout ce qui peut être amené à
composant sont codés évoluer doit être envisagé en tant
dans l'architecture. que "paramètre".
Exemple : pour un registre
- le chargement du registre lors du front montant de
l'horloge
les invariants sont:
- la mise en basse impédance lors de la mise à 1 de la
sélection du composant
- la taille des données manipulées
les paramètres sont : - le temps de chargement du registre
- le temps de mise en basse impédance
- etc
C‟est un moyen de transmettre une information à un bloc
- Vu de l‟extérieur du bloc, la généricité == paramètre(s)
- Vu de l‟intérieur du bloc, paramètres == constantes
ENSIAS Rabat Z. ALAOUI ISMAILI 99
Intérêts de la généricité :
• description de composants généraux
• permettre la réutilisation des composants
- enrichissement progressif de la bibliothèque de travail
- description de la bibliothèque par des modèles génériques
• assure une plus grande rapidité de développement
Il est important de bien comprendre que plus les composants que vous décrirez seront
générique, plus vous serez capable de les réutiliser lors de prochaines conceptions.
ENSIAS Rabat Z. ALAOUI ISMAILI 100
Généralement, c’est l’entité qui est générique
l‟utilisation de générique dans la
spécification d'entité
Mais l'architecture doit
aussi être générique
l‟utilisation des attributs :
-de tableaux
- de types
- de signaux
ENSIAS Rabat Z. ALAOUI ISMAILI 101
Généricité des entités :
Dans de nombreux systèmes électroniques, on est amené à mettre en place des
composants ayant les mêmes caractéristiques fonctionnelles, mais travaillant sur des
données de tailles différent
Un registre dont le nombre de bascules est générique
Ici nous nous intéressons au registre que nous souhaitons décrire une fois pour toute
sans nous soucier de la taille des données (8, 16, 32, … bits).
ENSIAS Rabat Z. ALAOUI ISMAILI 102
Le premier travail consiste à faire la déclaration de l'entité...
Description de l'entité
Remarquons ici que le
generic est spécifié avec
une valeur par défaut
Cette indication permettra, dans le cas
ou une instance de cette entité ne
préciserait pas la valeur du generic, de
s'assurer que l'instance soit créée.
Le generic est ensuite utilisé comme un paramètre dans la déclaration des
Remarquons
ports d'entrées sorties (à ce niveau le generic est vue comme une constante).
ENSIAS Rabat Z. ALAOUI ISMAILI 103
Utilisation d'une entité générique :
Soit le système suivant : des registres sont connectés à des
bus dont les tailles sont différentes
Imaginons que nous ayons à décrire une
système à processeur dans lequel il existe
L'instanciation d'entité generic deux bus :
doit spécifier les valeurs de
chacun des "paramètres" generic. et une second pour
Un premier pour
transporter les adresses transporter les
données
Chacun de ces bus ayant des tailles différentes, il faut pouvoir disposer d'un mécanisme
permettant d'instancier 2 entités avec des valeurs de paramètres différentes.
ENSIAS Rabat Z. ALAOUI ISMAILI 104
Description de l'architecture du système
Remarquons dans ce listing les
instances des 2 registres.
Les paramètres generic sont
spécifiés par un mapping.
Le composant Regi est bien un
composant ayant pour "modèle" l'entité Il faut évidemment s'assurer que les
Regitre et la taille des signaux connectés à
données manipulées est égale à 16 bits. ce composant ont des tailles cohérentes
par rapport à la valeur du generic :
BusData est bien un
Std_Logic_Vector de taille 16.
ENSIAS Rabat Z. ALAOUI ISMAILI 105
Autre exemple : un ET à N entrées
Ici on s'intéresse à la spécification d'une entité ET logique ayant un nombre
d'entrées variable.
La difficulté réside dans le fait que, pour une
spécification d'entité, il faut nommer explicitement
tous les ports d'entrées sorties.
Or dans ce cas il n'est pas possible de nommer tous ces
ports puisque l'on en connaît pas le nombre
(cela dépendra des instances).
La solution pour décrire cette entité consiste alors à placer toutes les entrées de
l'entité ET logique dans un tableau dont la taille est liée au generic.
ENSIAS Rabat Z. ALAOUI ISMAILI 106
Autre exemple : additionneur structurelle générique :
construit à partir d‟un additionneur 1 bits
assemblage des N additionneurs 1 bits afin de réaliser l‟additionneur Complet
la valeur de N est inconnue avant l‟instanciation du composant
ENSIAS Rabat Z. ALAOUI ISMAILI 107
Lorsque l'on effectue la description d'une architecture d'une entité, on peut souhaiter
réaliser cette description de façon structurelle, c'est à dire au travers d'un schéma.
Si l'entité que l'on souhaite cela peut poser
spécifier est generic quelques difficultés.
L‟additionneur que l'on souhaite rendre generic par rapport à la taille des
données manipulées et qui soit décrit à partir d'une schéma de full_adder.
PB: Difficulté lié au fait que lors de l'écriture du code de l'entité, on ne connaît pas
le nombre de full_adder à mettre en place.
ce nombre dépend des instances, mais pas de l'entité
elle même
ENSIAS Rabat Z. ALAOUI ISMAILI 108
Le langage VHDL met à notre disposition une structure permettant de générer
automatiquement un schéma à partir d'une boucle
Il s'agit de la boucle generate
NB: Pour que ce type de description puisse être utilisé, il faut que le schéma
possède un motif (ou un pattern) qui se répète.
Dans ce cas, il suffit alors de décrire une seule fois le motif (motif général) et de
lier le nombre d'itérations de la boucle au generic.
Il faut en règle générale déclarer des tableaux de signaux et effectuer
l'instanciation à partir de l'élément i de ce tableau.
ENSIAS Rabat Z. ALAOUI ISMAILI 109
Notons enfin que, comme dans tout cas général, il y a des exceptions.
En effet, les extrémités de la boucle (correspondant aux extrémités de la chaîne
des full_adder), doivent absolument être connectés aux signaux externes que
sont Cin et Cout.
Ceci explique les deux affectations concurrentes qui sont réalisées hors de
la boucle generate.
On dispose de l‟entité Add :
L‟entité Additionneur générique s‟écrit :
ENSIAS Rabat Z. ALAOUI ISMAILI 110
Généricité par les attributs :
Il faut toujours s'assurer que l'architecture supporte la genericité exprimée dans la
spécification d'entité.
Ici il est impératif d'utiliser les attributs de façon à être certain que
quelque soit la valeur qui sera donnée au generic, le composant aura un
fonctionnement correct.
ENSIAS Rabat Z. ALAOUI ISMAILI 111
Autre exemple : le démultiplexeur
Ce composant est fonctionnellement immuable,
mais 2 choses, au
moins, peuvent varier
il s'agit de la taille des données
manipulées, mais aussi le nombre de
sorties de ce composant.
Il est important de s'efforcer de décrire ce composant une fois pour toute de
façon à pouvoir le réutiliser "les yeux fermés" en adaptant simplement ces 2
paramètres.
ENSIAS Rabat Z. ALAOUI ISMAILI 112
Description de l'entité
Dans une première approche, il semblerait que les seuls generic dont nous ayons besoin pour
cette entité soient NbBits et NbSorties.
Toutefois, il existe une petite difficulté pour spécifier alors la taille du signal de
commande de ce démultiplexeur.
En effet, la taille de la
commande est directement
liée au nombre de sorties, il
s'agit du logarithme à base
2 de NbSorties.
Ne pouvant faire appel à
une fonction dans la
spécification de l'entité, la
seule possibilité qui nous
est offerte consiste à mettre
en place un
generic supplémentaire.
ENSIAS Rabat Z. ALAOUI ISMAILI 113
2.8. Packages
• Les packages sont des librairies de code VHDL précompilées ou non
Analogie avec C/ C++ : #include “package.h”
• Les packages sont généralement déclarés au tous début des fichiers de code
source VHDL (avant les entités)
• Employés à plusieurs sauces, par exemple :
• Modularisation du code
• Simulation de composantes numériques externes
• Librairies nécessaires par les simulateurs employés
ENSIAS Rabat Z. ALAOUI ISMAILI 114
-- Package File Template
-- Purpose: This package defines supplemental types, subtypes,
-- constants, and functions
library IEEE;
use IEEE.STD_LOGIC_1164.all;
package <Package_Name> is
type <new_type> is
record
<type_name> : std_logic_vector( 7 downto 0);
<type_name> : std_logic;
end record;
-- Declare constants
constant <constant_name> : time := <time_unit> ns;
constant <constant_name> : integer := <value>;
-- Declare functions and procedure
function <function_name> (signal <signal_name> : in <type_declaration>) return <type_declaration>;
procedure <procedure_name> (<type_declaration> <constant_name> : in <type_declaration>);
end <Package_Name>;
ENSIAS Rabat Z. ALAOUI ISMAILI 115
package body <Package_Name> is
-- Example 1
function <function_name> (signal <signal_name> : in <type_declaration> ) return <type_declaration> is
variable <variable_name> : <type_declaration>;
begin
<variable_name> := <signal_name> xor <signal_name>);
return <variable_name>;
end <function_name>;
-- Example 2
function <function_name> (signal <signal_name> : in <type_declaration>;
signal <signal_name> : in <type_declaration> ) return <type_declaration> is
begin
if (<signal_name> = '1') then
return <signal_name>;
else
return 'Z';
end if;
end <function_name>;
-- Procedure Example
procedure <procedure_name> (<type_declaration> <constant_name> : in <type_declaration>) is
begin
end <procedure_name>;
end <Package_Name>;
ENSIAS Rabat Z. ALAOUI ISMAILI 116
Exemple:
-- Package File Template
--
-- Purpose: This package defines supplemental types, subtypes,
-- constants, and functions
library IEEE;
use IEEE.STD_LOGIC_1164.all;
-- fichier : composants.vhd
Package PACKAGE mesportes IS
COMPONENT et
PORT(e0,e1 : IN BIT;
. s : OUT BIT);
. END COMPONENT;
. COMPONENT ou
PORT(e0,e1 : IN BIT;
s : OUT BIT);
END COMPONENT;
COMPONENT inverseur
PORT(e : IN BIT;
s : OUT BIT);
END COMPONENT;
END mesportes;
ENSIAS Rabat Z. ALAOUI ISMAILI 117
ENTITY et IS
PORT(e0,e1 : IN BIT;
s : OUT BIT);
END et;
ARCHITECTURE aet OF et IS
BEGIN
s<=e0 AND e1;
. END aet;
. ENTITY ou IS
PORT(e0,e1 : IN BIT;
. s : OUT BIT);
Package END ou;
ARCHITECTURE aou OF ou IS
BEGIN
s<=e0 OR e1;
END aou;
ENTITY inverseur IS
PORT(e : IN BIT;
s : OUT BIT);
END inverseur;
s<= NOT e;
END ainv;
ENSIAS Rabat Z. ALAOUI ISMAILI 118
ENTITY Fct IS
PORT(e0,e1,e2 : IN BIT;
s : OUT BIT);
END Fct;
Utilisation: ARCHITECTURE truc OF Fct IS
SIGNAL e0e1,e2bar : BIT;
BEGIN
i1:et PORT MAP(e0,e1,e0e1);
i2:inverseur PORT MAP(e2,e2bar);
i3:ou PORT MAP(e0e1,e2bar,s);
END truc;
ENSIAS Rabat Z. ALAOUI ISMAILI 119
2.9. Attributs
Un attribut est une caractéristique associée à un type ou un objet qui pourra être évalué soit
au moment de la compilation soit dynamiquement au cours de la simulation.
Chaque attribut est référencé par son nom
Le préfixe doit être un type,
consistant en un préfixe, une apostrophe et
sous-type, tableau, ou bloc.
l´attribut lui-même.
Exemple montrant comment créer son propre attribut.
Déclaration
Spécification
Elle associe l´attribut à un ou plusieurs membres d´ une
«classe d´entité».
ENSIAS Rabat Z. ALAOUI ISMAILI 120
Attributs prédéfinis
Ils font partie du langage et on se reportera aux exemples présentés dans la documentation en
annexe.
• T’Left retourne .la limite la plus gauche du type préfixe. T1.Left vaut 1, T2.Left vaut 10,
S1.Left vaut 3, S2.Left vaut 4, S3.Left vaut 1.
• T’Right retourne la borne droite de définition. T1.Right retourne 10, T2.Right 1, S1.Right
5, S2.Right 3, S3.Right 2.
• T’High retourne la plus grande des deux limites du type ou sous-type préfixe. T1.High et
T2.High donnent 10, S1.High 5, S2.High 4, S3.High 2.
• T’low retourne la plus petite des deux limites du type ou sous-type préfixe. T1.Low et
T2.Low retournent 1, S1.low et S2.Low retournent 3 et S3.low retourne 1.
ENSIAS Rabat Z. ALAOUI ISMAILI 121
Conclusions
Conseils de méthode
Dans la mesure du possible, dans une description, on séparera les parties
clairement séquentielles et les parties clairement combinatoires.
Pour chaque bloc combinatoire, les instructions concurrentes sont en général
plus directement adaptées.
Pour chaque bloc séquentiel, les processus explicites sont en général plus simples à
écrire ou à lire. Attention aux mémorisations implicites du signal.
Utiliser au maximum les variables !
un ensemble d‟instructions
concurrentes
En application des
apparaîtra de processus
principes ci- dessus
concurrents
la liaison entre ces différents blocs se faisant de manière dynamique (par
les signaux) au moment de la simulation ou alors lors de la synthèse du
circuit global.
ENSIAS Rabat Z. ALAOUI ISMAILI 122
ENSIAS Rabat Z. ALAOUI ISMAILI 123