Telechargé par Yassine Ayat

2 Rappel VHDL

publicité
See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/341406833
Rappel sur le langage VHDL (pour les masters II SEM)
Presentation · May 2020
DOI: 10.13140/RG.2.2.21655.60326
CITATIONS
READS
0
407
1 author:
Hamza Atoui
Badji Mokhtar - Annaba University
88 PUBLICATIONS 45 CITATIONS
SEE PROFILE
All content following this page was uploaded by Hamza Atoui on 15 May 2020.
The user has requested enhancement of the downloaded file.
Rappel sur le langage VHDL
Formation Systèmes Embarqués &
Mobilité (SEM) Master 2
Par : ATOUI Hamza
Plan
•
•
•
•
•
•
Un langage HDL?
Pourquoi un langage HDL?
Avantages d’un langage HDL.
Rôles d’un langage HDL.
VHDL?
VHDL aide mémoire (pour synthèse).
Un langage HDL?
• Un langage de description matériel (HARDWARE
DESCRIPTION LANGUAGE) est un langage qui
permet de modéliser et simuler un système
électronique (numérique, analogique ou mixte).
Pourquoi un langage HDL?
• Pourquoi ne pas utiliser un langage informatique
standard comme C/C++, Pascal ou ADA ?
• Les langages informatiques ne sont pas adaptés
pour la modélisation et la simulation des
systèmes électroniques à cause de plusieurs
choses:
–
–
–
–
Types de données et signaux.
L’exécution parallèle.
Les délais de propagation.
Etc.
Avantages d’un langage HDL
Indépendant des technologies.
Réutilisation des conceptions déjà existantes.
Conception hiérarchique.
Utilisation des bibliothèques .
Moyen d’échange entre les différents outils de
conception.
• Améliore la qualité.
• Diminue le coût de conception.
• Diminue le délai de mise en marche TTM (Time To
Market) [Dans le commerce, le délai de mise sur le
marché est le temps qui s'écoule entre la conception
d'un produit et sa mise en vente].
•
•
•
•
•
Rôles d’un langage HDL
VHDL?
• VHDL : VHSIC Hardware Description Language.
– VHSIC : Very High-Speed Integrated Circuit.
• Autres langages HDL:
– VERILOG (concurrent numéro 1 de VHDL).
– ABEL.
– AHDL.
– SystemC.
VHDL aide mémoire (pour synthèse)
• Prenant cet exemple: la description de la
porte logique AND.
x
z
y
Que remarquez-vous ?
VHDL aide mémoire (pour synthèse)
• On a la vu de l’extérieur et de l’intérieur:
– De l’extérieur: deux entrées « x » et « y » et une sortie
« z ».
– De l’intérieur: la relation entre la sortie et les entrées
(comportement), c’est l’opérateur logique AND.
• Une description en VHDL se base sur :
– De décrire la vu de l’extérieur (ENTITY).
– De décrire les différentes relations équations et flot de
données entres les sorties et les entrées du circuit à
décrire (ARCHITECTURE).
VHDL aide mémoire (pour synthèse)
• Comme n’importe quel langage, le descripteur
respecte obligatoirement la syntaxe imposée
par les inventeurs de ce langage!!!
• Une description en VHDL utilise l’organisation
suivante:
1. Inclusion des bibliothèques et des paquetages.
2. L’entité (la vu de l’extérieur).
3. L’architecture (la vu de l’intérieur).
VHDL aide mémoire (pour synthèse)
• La description suivante présente la description de la
porte AND de l’exemple:
Que remarquez-vous ?
VHDL aide mémoire (pour synthèse)
Inclusion des bibliothèques et des paquetages
L’entité
Bibliothèque IEEE
Nom de circuit et le fichier
VHDL
Paquetage
STD_LOGIC_1164
Type de signal
Identifiants des
signaux
mode de signal
L’architecture
Nom de l’architecture
L’équation entre les
signaux de notre circuit
VHDL aide mémoire (pour synthèse)
• Pour les bibliothèques, la plus célèbre
est la bibliothèque IEEE avec les deux
paquetages STD_LOGIC_1164 et
NUMERIC_STD.
• les modes possibles sont:
– IN: pour les entrées.
– OUT: pour les sorties.
– INOUT: pour les signaux bidirectionnels.
– BUFFER: pour les signaux en sortie
réentrants.
VHDL aide mémoire (pour synthèse)
• Le type le plus utilisé est le STD_LOGIC pour les
scalaires et STD_LOGIC_VECTOR pour les vecteurs
(tableaux).
• Concernant l’architecture, le descripteur a le choix
entre une description de haut niveau et portable
(comportementale et/ou structurelle hiérarchique)
ou une description de bas niveau (structurelle) à
des limites de portabilité dû au composant cible.
VHDL aide mémoire (pour synthèse)
• Les signaux dans une description VHDL présentent des
grandeurs physiques dans le circuit à décrire.
• Il existe deux catégories de signaux:
– Les signaux externes: comme les signaux de l’entité.
– Les signaux internes: sont des signaux déclarés à l’intérieur
d’une architecture.
• Les signaux en VHDL sont systématiquement fortement
typés, donc nécessite un contrôle strict et impose des
fonctions de conversion ou de surcharge des
opérateurs pour passer d’un type à un autre.
VHDL aide mémoire (pour synthèse)
• Types logiques scalaires:
– BIT {‘0’, ‘1’}
– BOOLEAN {TRUE, FALSE}
– STD_LOGIC {‘0’, ‘1’, ‘Z’, ‘U’, ‘X’, ‘H’, ‘L’, ‘W’, ‘-’}.
• Types logiques vectoriels:
– STD_LOGIC_VECTOR: c’est un tableau de STD_LOGIC.
• STD_LOGIC_VECTOR(3 DOWNTO 0)
• STD_LOGIC_VECTOR(0 TO 3)
• Le poids fort est toujours à gauche
v(3) v(2) v(1) v(0)
v(0) v(1) v(2) v(3)
VHDL aide mémoire (pour synthèse)
• Types arithmétiques vectoriels:
– SIGNED/UNSIGNED: se sont des tableaux de STD_LOGIC comme
STD_LOGIC_VECTOR pour effectuer des opérations arithmétiques sur
des représentations signées/non signées dans le paquetage
NUMERIC_STD.
• Types mathématiques:
–
–
–
–
INTEGER : entier signé sur 32 bits.
NATURAL : entier positif.
POSITIVE : entier positif non nul.
REAL : réel en virgule flottante simple précision IEEE-754.
• Types caractères:
– CHAR.
– STRING.
VHDL aide mémoire (pour synthèse)
• Exemples de déclaration des signaux:
– Signaux externes: comme les signaux du PORT de l’ENTITY.
– Signaux internes:
Que remarquez-vous ?
VHDL aide mémoire (pour synthèse)
• Attention: les identificateurs sont toujours commencer
par une lettre.
• Le VHDL n’est pas sensible à la casse (ne différencie pas
entre les caractères minuscules et les majuscules).
• Vous pouvez définir des constantes comme la
déclaration des signaux internes avec une valeur
initiale.
VHDL aide mémoire (pour synthèse)
• Opérateurs en VHDL:
– Opérateur d’affectation <= : x <= expression.
– Opérateurs logiques : and, or, not, xor, xnor, nand, nor.
– Opérateurs arithmétiques (pour INTEGER,
SIGNED/UNSIGNED): +, -, *, /, mod, rem.
– Opérateur de concaténation : &.
– Opérateurs relationnels (pour INTEGER,
SIGNED/UNSIGNED): <, >, <=, >=, =, /=.
VHDL aide mémoire (pour synthèse)
• Exemples sur les opérateurs:
Est-ce qu’on peut permuter l’instruction descriptive ‘8’ avec l’instruction ’10’ ?
VHDL aide mémoire (pour synthèse)
• Absolution oui, par ce
que les instructions
entre le BEGIN et le
END de l’architecture
passent en parallèle,
et prend le mon de
l’espace du domaine
concurrent.
• N.B : dans le domaine
concurrent, l’ordre des
instructions a aucun
effet ou importance.
VHDL aide mémoire (pour synthèse)
• Exemple: décrire en VHDL le circuit logique
d’un MUX 4-TO-1.
Structure interne de circuit
OUTPUT
Symbole de circuit
VHDL aide mémoire (pour synthèse)
• Avant de décrire, on a combien de signal interne
dans la structure interne de circuit ?
S0
S1
S2
S3
S4
S5
S6
S7
S8
S9
OUTPUT
VHDL aide mémoire (pour synthèse)
Que remarquez-vous ?
VHDL aide mémoire (pour synthèse)
• C’est lourd!!! C’est fastidieux!!!
• Est-ce qu’il y a un autre moyen pour décrire le
comportement de circuit sans passer par la structure
interne (niveau portes logiques)???
• Absolution, oui! Comme n’importe quel langage, le
VHDL compris l’affectation sélective et conditionnelle
comme SWITCH et IF du langage C.
VHDL aide mémoire (pour synthèse)
• En VHDL, l’affectation sélective et
conditionnelle se fait à travers :
– L’affectation sélective : with … select …
– L’affectation conditionnelle : when … else …
• Retour à l’exemple de MUX
VHDL aide mémoire (pour synthèse)
• Par affectation sélective :
Que remarquez-vous ?
VHDL aide mémoire (pour synthèse)
• Par affectation conditionnelle :
Que remarquez-vous ?
VHDL aide mémoire (pour synthèse)
• Très élégant! très agréable!
• L’affectation sélective ou conditionnelle convient à
l’algorithmique!
• Attention, il faut traiter tout les cas, sinon le
synthétiseur (compilateur) arrive à créer des
cellules mémoires de type D-LATCH.
VHDL aide mémoire (pour synthèse)
• A vous, faire la description en VHDL des
circuits suivants:
– Un décodeur 2-TO-4
– Un décodeur 2-TO-4 avec l’entrée ENABLE.
– Un encodeur 4-TO-2 avec la sortie VALID.
VHDL aide mémoire (pour synthèse)
• Pour augmenter plus l’élégance
du VHDL, les inventeurs de ce
langage proposent l’aspect
séquentiel à l’intérieur du
domaine concurrent par
l’introduction de la notion de
processus (PROCESS).
• Toute instruction à l’intérieur
d’un processus se passe en
séquentiel :
VHDL aide mémoire (pour synthèse)
• Comme le domaine concurrent, le domaine
séquentiel utilise des affectation simples, sélectives,
conditionnelles et même des boucles.
• La syntaxe d’un processus :
[nom_du_process:] process (liste_de_sensibilité)
-- déclaration des variables internes du processus
-- déclaration des constantes
begin
actions;
end process [nom_du_process];
VHDL aide mémoire (pour synthèse)
• La liste de sensibilité présente l’entrée
d’excitation (exécution) du processus, si aucune
liste, le processus s’exécute infiniment.
• La notion de variable interne d’un processus
présente un signal temporaire affecté par
l’opérateur « := » immédiatement par rapport au
signal interne d’une architecture qui s’affecte au
moment de la sortie du processus.
• La but principal d’une variable est d’augmenter la
lisibilité de la description séquentielle.
VHDL aide mémoire (pour synthèse)
• L’affectation simple:
– Signal par « <= ».
– Variable par « := ».
• L’affectation conditionnelle:
if conditions then
action;
end if;
if conditions then
action1;
else
action2;
end if;
if conditions then
action1;
elsif conditions then
action2;
else
action3;
end if;
VHDL aide mémoire (pour synthèse)
• L’affectation sélective:
case signal_variable is
when val1
when vald to valf
when val2|val3|val4
when others
end case;
=> action1;
=> action2;
=> action3;
=> action4;
VHDL aide mémoire (pour synthèse)
• Les boucles (structures répétitives):
for index in valeur_début to valeur_finale loop
actions;
end loop;
while conditions loop
actions;
end loop;
La structure WHILE, c’est difficile de synthétiser mais
on utilise souvent pour la simulation!
VHDL aide mémoire (pour synthèse)
• Retour à l’exemple de MUX:
• Avant d’aller vers la description par un
processus, il faut d’abord déterminer la liste
de sensibilité.
– Pour les circuits logiques combinatoires, la liste de
sensibilité se compose par toutes les entrées.
– Pour les circuits logiques séquentiels est une autre
histoire, on va étudier plus tard.
VHDL aide mémoire (pour synthèse)
• Donc, notre liste est {IN0, IN1, IN2, IN3, SL0, SL1}
VHDL aide mémoire (pour synthèse)
• Jusqu’à présent, on a étudié les circuits logiques
combinatoires, dont les sorties dépend seulement des
entrées.
• un circuit logique séquentiel est un système dont les sorties
dépend des entrées et son état interne (l’effet mémoire). les
circuits séquentiels sont deux catégories:
– Synchrones : le changement d’état du système se fait au moment
de l’évènement de signal d’horloge.
– Asynchrones : le changement d’état du système de fait soit par un
évènement de signal d’horloge ou les entrées de forçage.
VHDL aide mémoire (pour synthèse)
• Exemples de circuits séquentiels de base :
– La bascule SR.
– La bascule D-LATCH.
– La bascule DFF (Flip-Flop).
– La bascule DFF avec les entrées de forçage (CLEAR et/ou
PRESET).
• Comment décrire en VHDL un tel système ???
• Pour les bascules Flip-Flop comment détecter la
présence d’un franc (rising/falling) sur le signal
d’horloge ???
VHDL aide mémoire (pour synthèse)
• Pour décrire efficacement un circuit logique séquentiel en
VHDL, tout simplement, on utilise la notion du domaine
séquentiel par processus (PROCESS).
• N.B : on peut faire la description en VHDL des circuits
séquentiels par le domaine concurrent, mais ce genre de
description reste dure et déconseillée.
• La détection de présence d’un franc sur un signal se fait par
ses attributs d’évolution (dédié au synthèse).
– nom_signal'event : retourne TRUE s’il y a un changement d’état.
– nom_signal'last_value : retourne la dernière valeur d’un signal
avant le dernier changement d’état.
VHDL aide mémoire (pour synthèse)
• L’équation de détection d’un RISING_EDGE:
clk'event and clk'last_value = '0' and clk = '1'
• L’équation de détection d’un FALLING_EDGE:
clk'event and clk'last_value = '1' and clk = '0'
VHDL aide mémoire (pour synthèse)
• Ou tout simplement par l’invocation des fonctions
suivantes:
– rising_edge(signal) : retourne TRUE au moment de
détection d’un RISING_EDGE.
– falling_edge(signal) : retourne TRUE au moment de
détection d’un FALLING_EDGE.
VHDL aide mémoire (pour synthèse)
• Décrire en VHDL les circuits séquentiels suivants:
– La bascule D-LATCH sur niveau bas puis sur niveau haut.
– La bascule DFF sur rising_edge.
– La bascule DFF avec les entrées de forçage CLEAR et
PRESET sur rising_adge.
– La bascule DFF avec l’entrée ENABLE sur rising_edge.
– La bascule DFF avec ENABLE et CLEAR/PRESET synchrone
sur rising_edge.
VHDL aide mémoire (pour synthèse)
VHDL aide mémoire (pour synthèse)
VHDL aide mémoire (pour synthèse)
VHDL aide mémoire (pour synthèse)
VHDL aide mémoire (pour synthèse)
VHDL aide mémoire (pour synthèse)
• A vous, faire la description en VHDL du circuit suivant:
VHDL aide mémoire (pour synthèse)
• A vous, faire la description en VHDL du circuit suivant:
VHDL aide mémoire (pour synthèse)
• Jusqu’à présent, on a vu la description
comportementale d’un circuit logique! Quelle est
l’histoire d’une description structurelle? Et
comment faire?
VHDL aide mémoire (pour synthèse)
• Pour assembler des blocks fonctionnels également
décrits en VHDL ou dans un autre langage.
• Pour utiliser des ressources internes des
composants (CPLD, FPGA…) ou des primitives d’un
constructeur (XILINX, ALTERA…) à travers des
bibliothèques.
• Pour écrire des fichiers de test (TESTBENCH)
VHDL aide mémoire (pour synthèse)
• Exemple d’une description structurelle:
Signal interne
Structure d’un MUX 2-TO-1
Structure d’une bascule D
VHDL aide mémoire (pour synthèse)
VHDL aide mémoire (pour synthèse)
Mot clés pour appeler une structure
Instances des composants DFF et MUX21
Signaux de DFF
Connecter à
VHDL aide mémoire (pour synthèse)
VHDL aide mémoire (pour synthèse)
• Positionnement du problème : le type
STD_LOGIC_VECTOR est un simple vecteur de
STD_LOGIC mais présente aucune information
sur la donnée dedans, est-ce qu’elle est signée au
non? Comment faire des flots de données
(chemin de données) en utilisant des opérations
arithmétiques comme l’addition la
soustraction…?
• Exemple : la conception des compteurs nécessite
l’utilisation de l’opérateur + ou – !
VHDL aide mémoire (pour synthèse)
• Pour la simulation, le type INTEGER fait l’affaire
mais pour la synthèse, la bibliothèque IEEE à travers
le paquetage NUMERIC_STD propose les types
SIGNED et UNSIGNED.
• Le type SIGNED/UNSIGNED est un vecteur de
STD_LOGIC mais dont l’information est caractérisée
comme son nom l’indique.
VHDL aide mémoire (pour synthèse)
• Le paquetage NUMERIC_STD propose les possibilités
suivantes:
–
–
–
–
UNSIGNED
SIGNED +
UNSIGNED
SIGNED +
+ UNSIGNED
SIGNED
+ NATURAL
INTEGER




UNSIGNED
SIGNED
UNSIGNED
SIGNED
• Avec les fonctions de conversions suivantes:
–
–
–
–
TO_INTEGER(UNSIGNED)
TO_INTEGER(SIGNED)
TO_UNSIGNED(NATURAL, SIZE)
TO_SIGNED(INTEGER, SIZE)




NATURAL
INTEGER
UNSIGNED
SIGNED
VHDL aide mémoire (pour synthèse)
• Conversions explicites de types :
– STD_LOGIC_VECTOR(UNSIGNED)  STD_LOGIC_VECTOR
– STD_LOGIC_VECTOR(SIGNED)  STD_LOGIC_VECTOR
– UNSIGNED(STD_LOGIC_VECTOR)  UNSIGNED
– SIGNED(STD_LOGIC_VECTOR)  SIGNED
VHDL aide mémoire (pour synthèse)
• Faire la description en VHDL du compteur suivant :
– Le comptage se fait sur 4 bits.
– Tous les signaux sont de type STD_LOGIC.
CLK
x
↑
↑
x
RST
1
0
0
0
EN
x
1
1
0
L
x
1
0
x
INIT(INPUT)
XXXX
XXXX
XXXX
XXXX
CNT (OUTPUT)
0000 (RESET)
XXXX (LOAD)
Increment by 1
Unchanged
VHDL aide mémoire (pour synthèse)
• Synoptique du compteur (symbole):
INIT
4
EN
RST
CLK
Compteur
4
CNT
L
VHDL aide mémoire (pour synthèse)
VHDL aide mémoire (pour synthèse)
VHDL aide mémoire (pour synthèse)
• Les circuits mémoires sont indispensables dans les
systèmes à µP/µC et les SoC, leur description en VHDL
se basent sur la déclaration d’un nouveau type qui
s’appelle matrice « array ».
• la syntaxe de déclarer d’un nouveau type array :
– type NOM_TYPE is array(V1 to V2) of subtype;
– type NOM_TYPE is array(V2 downto V1) of subtype;
• N.B : les deux syntaxes au-dessus se sont les plus
utilisées
VHDL aide mémoire (pour synthèse)
• Description d’un circuit ROM 8x2 (8 emplacements
à 2bits chacun).
ADDR
3
Bus d’adresse
ROM
8x2bits
DB
2
Bus de données
VHDL aide mémoire (pour synthèse)
VHDL aide mémoire (pour synthèse)
• Description d’un circuit RAM 8x4 à base de D-LATCH
ADDR
3
RAM
8x4bits
DB_IN
DB_OUT
4
4
WE
VHDL aide
mémoire (pour
synthèse)
VHDL aide mémoire (pour synthèse)
• Description d’un circuit RAM 8x4 à base de DFF
ADDR
3
RAM
8x4bits
DB_IN
DB_OUT
4
4
CLK
WE
VHDL aide
mémoire (pour
synthèse)
VHDL aide mémoire (pour synthèse)
• Et pour clôturer cet aide mémoire en VHDL, on va
maintenant aborder le sujet de description des
machines à états finis FSM de Moore.
Entrées
Circuit
combinatoire
d’entrée
Registre
Etat
suivant
CLR
Etat en
cours
Circuit
combinatoir
e de sortie
Sorties
CLK
Sorties = F(Etat en cours)
Etat suivant = G(Etat en cours, Entrées)
VHDL aide mémoire (pour synthèse)
• D’après la synoptique , la FSM de Moore se
compose par:
– Soit 3 processus:
• Processus de registre,
• Processus de la logique de sortie,
• Processus de la logique de l’état suivant.
– Soit 2 processus:
• Processus de registre avec la logique de l’état suivant,
• Processus de la logique de sortie.
VHDL aide mémoire (pour synthèse)
• Exemple : détecteur de séquence qu’on a vu dans le
rappel de la logique combinatoire/séquentielle.
View publication stats
Téléchargement