Cours VHDL FPGA Chapitre 3
Cours VHDL FPGA Chapitre 3
Cours VHDL FPGA Chapitre 3
Le Langage VHDL
2
Introduction
Historique
3
Introduction
Pourquoi et où utilise-t-on le VHDL?
Flot de conception
4
Introduction
Pourquoi et où utilise-t-on le VHDL?
Flot de conception
5
Introduction
Qu’est ce que le VHDL?
6
Introduction
Qu’est ce que le VHDL?
7
Plan global du cours
z I. Introduction
z II. FPGA
z III. VHDL
z Introduction
z Règles d’écriture
z Unités de conception - Objets VHDL - Opérateurs
z Assignations concurrentes/séquentielles
z Assignations conditionnelles/sélectives
z Composant
z Machine à états
z Règles de conception
z Simulation
z Compléments (fonctions, procédures, packages, …)
15-09-14 G. Leroy - EILCO
8
Règles d’écriture
9
Règles d’écriture
z En général, les instructions se terminent par « ; »
z Règles de dénomination :
z 26 lettres de l’alphabet, les 10 chiffres et ‘_’
z Le premier caractère est une lettre
z Il ne peut y avoir 2 « _ » de suite
z L’identifieur ne peut se terminer par « _ »
10
Règles d’écriture
z Les valeurs explicites:
z Entier : 123 1_2_3
z Entier basé : base#valeur# 2#11# (Q3) 16#1F# (Q31)
z Valeurs physiques : toujours laisser un espace entre la valeur et l’unité
100 ps 2 ns 5V
z Caractère : entre apostrophe ‘a’ ‘@’
z Bit : entre apostrophe ‘0’ ‘1’ ‘Z’
z Chaîne de caractères : entre guillemets (attention là les minuscules et
majuscules sont significatives) "Bonjour "
z Bus : entre guillemets "01111001 "
z Booléen
15-09-14
: true false G. Leroy - EILCO
11
Mots réservés
http://amouf.chez.com/syntaxe.htm
15-09-14 G. Leroy - EILCO
12
Plan global du cours
z I. Introduction
z II. FPGA
z III. VHDL
z Introduction
z Règles d’écriture
z Unités de conception - Objets VHDL - Opérateurs
z Assignations concurrentes/séquentielles
z Assignations conditionnelle/sélective
z Composant
z Machine à états
z Règles de conception
z Simulation
z Compléments (fonctions, procédures, packages, …)
15-09-14 G. Leroy - EILCO
13
Unités de conception
Structure d’un fichier VHDL
14
Unités de conception
Library
z IEEE.STD_LOGIC_1164.all
z Permet de définir les types, opérateurs et fonctions de conversion
de base
z IEEE.numeric_std.all
z Définit les types signed et unsigned. Un vecteur représente alors
un nombre signé ou non signé représenté en C2
IEEE.numeric_std.all
16
Unités de conception
Entity
z Spécifications :
z Ports d’entrée et de sortie
z Type
- sortie (out)
- entrée/sortie (inout)
17
Unités de conception
Entity
a 8
8 Comparateur egal
b
18
Unités de conception
Architecture
z Toute architecture est associée à une entité
z Définition : L’architecture définit les fonctionnalités et les
relations temporelles. Elle décrit le comportement du
composant.
Zone de déclaration
Zone de définition
19
Unités de conception
Architecture
z Il peut y avoir plusieurs architectures associées à un
même composant
2 architectures d’un
même composant
20
Objets VHDL
z 5 sortes d’objets
z Les ports d’entrée/sortie (PORT)
z Les signaux (SIGNAL)
z Les constantes (CONSTANT)
z Les variables (VARIABLE) - - cf partie assignation séquentielle
z Les paramètres (GENERIC) - - cf partie compléments
21
Objets VHDL
Type
22
Objets VHDL
Type
z Types scalaires :
z Types énumérés : liste de valeurs
range to downto
23
Objets VHDL
Type
24
Objets VHDL
Type
z Std_logic :
25
Objets VHDL
Signal
26
Objets VHDL
Signal
z Initialisation rapide
Toto <=(others => ‘0’); est équivalent à Toto <= "000000…0 ";
27
Objets VHDL
Constant
28
Objets VHDL
Variable
29
Opérateurs
z Opérateurs logiques (sur booléens, bits et dérivés)
30
Opérateurs
z Opérateurs bits (sur vecteurs de bits et types numériques)
31
Plan global du cours
z I. Introduction
z II. FPGA
z III. VHDL
z Introduction
z Règles d’écriture
z Unités de conception - Objets VHDL - Opérateurs
z Assignations concurrentes/séquentielles
z Assignations conditionnelles/sélectives
z Composant
z Machine à états
z Règles de conception
z Simulation
z Compléments (fonctions, procédures, packages, …)
15-09-14 G. Leroy - EILCO
32
Assignations
concurrentes/sequentielles
z Instruction séquentielle : instruction à l’intérieur d’un
process
process.
33
Assignations concurrentes
z Toutes les déclarations sont exécutées simultanément et
en permanence
z L’ordre des déclarations dans le code source n’a pas
d’influence
z Les déclarations possibles sont :
z Assignation continue : <=
z Instantiation d’un composant : port map
z Assignation conditionnelle : when … else
z Assignation sélective : with … select … when … when
z Appel d’un process
z Instruction generate
cf. compléments
Appel
z15-09-14 d’une fonction G. Leroy - EILCO
34
Assignations séquentielles
z Ce mode concerne uniquement les function, procedure et
process
z Les process manipulent les variable et signal
z Au sein de ces descriptions, les déclarations sont exécutées de
manière séquentielle, l’une après l’autre
z L’ordre des déclarations est donc important
z Les déclarations possibles sont :
z Assignation continue : <= (signal) et := (variable)
z Assignation conditionnelle : if … then … elsif … then … else … end if;
z Assignation sélective : case … is … when … => … when … => … end case;
z Boucles : for … in … loop … end loop;
z Boucles : while ... loop … end loop;
z Instructions
15-09-14
next et exit G. Leroy - EILCO
35
Process
z Dans un process, l’interprétation des instructions est
séquentielle mais l’ensemble de leur réalisation est instantanée
(le temps extérieur est suspendu)
z Les signaux sont assignés en sortie du process
z Les variables sont assignée immédiatement
z Les variables ne sont pas visibles de l’extérieur
36
Process
z Lors d’affectations multiples, c’est la dernière qui est prise en
compte
z Un process n’est activé que lorsque les signaux de sa liste de
sensibilité ont subi un changement
z Absence de liste de sensibilité : le process est réactivé en
permanence
z Tous les process d’un design fonctionnent de manière
concurrente
37
Process
Exemples
38
Process
Exemples
39
Process
z Mise en œuvre de process synchronisé sur l’horloge
z If clk’event and clk=‘1’ then ou if rising_edge(clk)
z If clk’event and clk=‘0’ then ou if falling_edge(clk)
z Absence de liste de sensibilité et wait until (clk=‘1’) placé en tête de la
partie déclarative du process
40
Plan global du cours
z I. Introduction
z II. FPGA
z III. VHDL
z Introduction
z Règles d’écriture
z Unités de conception - Objets VHDL - Opérateurs
z Assignations concurrentes/séquentielles
z Assignations conditionnelles/sélectives
z Composant
z Machine à états
z Règles de conception
z Simulation
z Compléments (fonctions, procédures, packages, …)
15-09-14 G. Leroy - EILCO
41
Assignations conditionnelles
Assignation concurrente
z Forme générale :
signal <= valeur when condition else autrevaleur when autrecondition …;
z Une seule cible peut être assignée
42
Assignations conditionnelles
Assignation séquentielle
z Forme générale :
If condition then … elsif conditions then…else … end if;
43
Assignations sélectives
Assignation concurrente
z Forme générale :
With sélecteur select signal <= valeur when val_sel, valeur when val_sel2 …;
z Clause when others qui permet de préciser tous les cas non
définis
z Possibilité de regrouper plusieurs valeurs du sélecteur pour une
même assignation « | »
44
Assignations sélectives
Assignation séquentielle
z Forme générale :
Case sélecteur is when val_selec => instructions; … end case;
45
Assignations sélectives
If versus case
56
Machine à état
Exemple : détecteur de séquence
57
Machine à état
Exemple : détecteur de séquence
On représente une machine à état par un graphe d’état
Entrée ≠ ‘1’
P=0
E0
P=0 E2
Entrée = ‘3’
E3 P=1
15-09-14 G. Leroy - EILCO
58
Machine à état
Graphe d’état
Définition :
z Un diagramme ou graphe d’états permet d’avoir une
représentation graphique d’un système séquentiel.
z Il est constitué par l’énumération de tous les états possible
du système.
z Un seul de ces états peut être actif à la fois.
z A chaque état est associé la valeur de la (ou des)
grandeur(s) de sortie.
Transition Etat
1 2
s=1 s=0
15-09-14 G. Leroy - EILCO
Valeur de la (ou des) sortie(s)
59
Machine à état
Conception de circuits
60
Machine à état
Codage des états
z Codage binaire
Le numéro de l’état est codé en binaire
état 0 = "00", état 1 = "01", état 2 = "10", état 3 = "11"
z One-Hot-One
Chaque état correspond à 1 bit d’un même bus
état 0 Q state = "0001", état 1 Q state = "0010",
état 2 Q state = "0100", état 3 Q state = "1000"
z One-Hot-Zero
Même principe que One-Hot-One mais l’état 0 se code "0000"
15-09-14 G. Leroy - EILCO
61
Programmer un FPGA par FSM
z Avec le logiciel Xilinx, on peut décrire une FSM
z en utilisant une architecture de Moore ou de Mealy que
l’ont fait soit même
z schématiquement, en rentrant directement le graphe
d’état
z en la décrivant en VHDL
62
Description de FSM en VHDL
z Entité
63
Description de FSM en VHDL
Gestion de la valeur de la
sortie
64
Description de FSM en VHDL
Exemples
65
Description de FSM en VHDL
Exemples
Etats en One-Hot-One
66
Description de FSM en VHDL
Exemples : FSM à 2 process
Déclaration de deux
signaux d’état
67
Description de FSM en VHDL
Exemples : FSM à 2 process
Premier process pour définir l’état
suivant et les valeurs de sortie en
fonction de l’état courant
68
Description de FSM en VHDL
Exemples : FSM à 2 process
69
Description de FSM en VHDL
70
Description de FSM en VHDL
Problème de l’état initial
71
Description de FSM en VHDL
Problème de l’état initial
z Reset asynchrone
72
Description de FSM en VHDL
Problème de l’état initial
z Reset synchrone
73
Exercice
D = ‘1’ D = ‘0’
E3 S=0 E0
S=0
D = ‘0’
D = ‘1’
D = ‘1’
D = ‘0’ D = ‘1’
E2 S=1 S=1 E1
D = ‘0’
74
Exercice
75
Plan global du cours
z I. Introduction
z II. FPGA
z III. VHDL
z Introduction
z Règles d’écriture
z Unités de conception - Objets VHDL - Opérateurs
z Assignations concurrentes/séquentielles
z Assignations conditionnelles/sélectives
z Composant
z Machine à états
z Règles de conception
z Simulation
z Compléments (fonctions, procédures, packages, …)
15-09-14 G. Leroy - EILCO
76
Règles de conception
Timing
77
Règles de conception
Système combinatoire (asynchrone)
a0 b0
a1
a2 b1
a3
a4 b2
Niveaux délai
1 2 3
logiques
78
Règles de conception
Conception synchrone
79
Règles de conception
Conception synchrone
80
Règles de conception
Règles à suivre :
z 1 seule horloge
z Jamais de logique sur un signal d’horloge (utiliser enable)
z Si plusieurs domaines d’horloge, prévoir des FIFOs tampons
z Resynchroniser tous les signaux asynchrones pour éviter la
métastabilité (2 bascules D à la suite)
81
Règles de conception
Exemple de synchronisation d’un signal reset (actif asynchrone
mais inactif de manière synchrone)
82
Règles de conception
z Adopter une démarche qualité (dénomination,
hiérarchisation)
z Attention aux assignations incomplètes (mémorisation
implicite)
z Attention à l’utilisation des variables
z Penser à l’implantation (orienter le compilateur)
z Trouver le bon compromis entre ressources et vitesse en
choisissant le bon degré de parallélisme
15-09-14 G. Leroy - EILCO
83
Plan global du cours
z I. Introduction
z II. FPGA
z III. VHDL
z Introduction
z Règles d’écriture
z Unités de conception - Objets VHDL - Opérateurs
z Assignations concurrentes/séquentielles
z Assignations conditionnelles/sélectives
z Composant
z Machine à états
z Règles de conception
z Simulation
z Compléments (fonctions, procédures, packages, …)
15-09-14 G. Leroy - EILCO
84
Simulation
Simulation pour valider tout ou une partie du design
z Vérification manuelle sur chronogrammes
z Fastidieux voir impossible si design complex
z Taux de couverture?
z Vérification automatique :
z Efficace
z Mais, validité du modèle comportemental?
z Vitesse?
85
Simulation
z Vérification automatique
z Très efficace
86
Simulation
Type de simulation
z Simulation fonctionnelle :
z Le programme simule un circuit idéal sans temps
de propagation
z Permet de vérifier que les fonctions sont réalisées
correctement
z Simulation temporelle :
z Prise en compte des délais de propagation
z Permet de vérifier que contraintes temporelles sont
respectées (vitesse d’horloge)
15-09-14 G. Leroy - EILCO
87
Simulation
Ecriture d’un testbench
z Création graphique de chronogrammes
z Pour Quartus : fichier vector waveform .vwf
z Generate functionnal simulation netlist
z Lancement de la simulation
z Fastidieux, taux de couverture ?
88
Simulation
Ecriture d’un testbench en vhdl
z Possibilité d’utiliser des ressources vhdl non synthétisables
z Composition du fichier
z Library
z Entity (vide)
z Architecture
z Déclaration du composant à tester
z Définition des signaux et constantes
z Description du chronogramme des signaux
z Mapping du composant
15-09-14 G. Leroy - EILCO
89
Simulation
Ecriture d’un testbench en vhdl
90
Simulation
Ecriture d’un testbench en vhdl
La durée s’exprime avec un type physique : fs, ps, ns, us,…
z Affectation d’un signal
Signal <= valeur after durée, valeur after durée, … ;
91
Simulation
Ecriture d’un testbench en vhdl
z Utilisation d’attribut
z Signal’stable : vrai s’il n’y a pas d’événement pendant la
durée
z Signal’last_event : durée depuis le dernier événement
z Signal’last_value : avant dernière valeur
92
Simulation
Génération d’horloge
93
Simulation
Génération d’horloge
94
Simulation
Génération d’horloge
Autres possibilités :
95
Simulation
Assertions
z Permettent d’avoir des informations dynamiques sur la
simulation
assert test report message severity action
z Si le test est négatif, on affiche message avec arrêt ou
non de la simulation en fonction de action
now = temps de
simulation
96
Simulation
Assertions
97
Simulation
Assertions
z Il est possible d’afficher la valeur d’un signal ou d’une
constante type‘image(signal)
98
Plan global du cours
z I. Introduction
z II. FPGA
z III. VHDL
z Introduction
z Règles d’écriture
z Unités de conception - Objets VHDL - Opérateurs
z Assignations concurrentes/séquentielles
z Assignations conditionnelles/sélectives
z Composant
z Machine à états
z Règles de conception
z Simulation
z Compléments (fonctions, procédures, packages, …)
15-09-14 G. Leroy - EILCO
99
Paramètres génériques
100
Paramètres génériques
a, b et c ont 4 bits
de largeur
101
Sous-programmes
z Permettent de modulariser le code
z Permettent de regrouper des actions répétitives
z Permettent de réutiliser des fonctions
z Rendent les fichiers plus lisibles
z Permettent d’automatiser des actions (simulation)
z Fonction et procédure
102
Fonction
z Les paramètres d’une fonction sont uniquement en
entrée
z Une fonction ne retourne qu’une seule valeur
z Elle a un type, celui de la valeur retournée
z Elle doit être déclarée dans un package, une entity ou
une architecture
103
Fonction
z Syntaxe :
function nom (paramètre : type) return type is
Zone de déclaration
Begin
Zone d’instructions
return valeur;
end nom;
z Exemple :
104
Fonction
105
Procédure
z Les paramètres d’une procédure peuvent être en
entrée, en sortie ou les deux
z Une procédure peut retourner plusieurs valeurs
z Elle doit être déclarée dans un package, une entity ou
une architecture
106
Procédure
Signal, variable ou constant
z Syntaxe :
procedure nom (class paramètre : mode type) is
Zone de déclaration
in, out ou inout
Begin
Zone d’instructions
end nom;
z Exemple :
107
Procédure
Déclaration de la procédure cycle
108
Procédure
Déclaration de la procédure verif
109
Procédure
Utilisation de la procédure verif
110
Package
z Un package est une unité de compilation permettant
de regrouper constant, type, component, function et
procedure
Liste de ce qu’il y a
dans le package
Description de ce
que font les
fonctions ou les
procédures
112