Description Materiel
Description Materiel
Il peut généralement :
Décrire le fonctionnement du circuit,
Décrire sa structure,
Servir à vérifier sa fonctionnalité par simulation ou preuve formelle.
Jusqu’aux années 80, les schémas étaient le principal moyen de décrire les circuits et systèmes
numériques.
Les langages de description de matériel (HDL) ont été développés et introduits dans les années
1980 pour spécifier les équations logiques à utiliser dans les PLD.
Ils avaient pour but de modéliser, donc de simuler, mais aussi de concevoir, des outils informatiques
permettant de traduire automatiquement une description textuelle en dessins de transistors. 2
HDL (Hardware Description Language) ?
Les classes de langages dont la seule caractéristique est de décrire un circuit par une
hiérarchie de blocs interconnectés est appelée une netlist.
Les HDL peuvent être utilisés pour décrire des systèmes numériques de haut niveau et
très détaillés au bas niveau (portes logiques).
3
HDL
o Composant élémentaire
(porte logique)
o Circuits intégrés
(microprocesseur)
Niveau
d'abstraction o Cartes
(unité centrale)
o Systèmes
(calculateur)
o Processus 4
(système de navigation)
Le but des HDLs ?
Le but des HDL est double :
➢ la simulation ➢ la synthèse
L'un des objectifs des HDL est d'aboutir à une représentation La synthèse est l’opération qui consiste, à partir du
exécutable d'un circuit, soit sous forme autonome, soit à fichier texte, à produire une netlist contenant le
l'aide d'un programme externe appelé simulateur. Cette schéma électrique destiné aux outils de placement-
forme exécutable comporte: routage (fichier binaire).
❖ une description du circuit à simuler, En n'utilisant qu'un sous-ensemble d'un HDL, un
programme spécial appelé synthétiseur peut Générer
❖ un générateur de stimuli (vecteurs de test),
du hardware depuis HDL
❖ un dispositif implémentant la sémantique du langage et
Le sous-ensemble du langage utilisé à ce propos est
l'écoulement du temps (résultats).
alors dit synthétisable.
Il existe deux types de simulateurs:
La synthèse nécessite un processus complexe afin
1/ à temps discret, généralement pour le numérique, d’optimiser un arrangement entre le temps et
2/ à temps continu pour l'analogique. l’espace.
Le langage de description VHDL est ensuite devenu une norme IEEE en 1987. Révisée en 1993 puis en 2002
pour supprimer quelques ambiguïtés et améliorer la portabilité du langage, cette norme est vite devenue un
standard en matière d'outils de description de fonctions logiques.
A ce jour, on utilise le langage VHDL pour :
concevoir des ASIC,
programmer des composants programmables du type SPLD, CPLD et FPGA,
8
concevoir des modèles de simulations numériques ou des bancs de tests.
Le but du VHDL ?
Le but d'un langage de description matériel tel que le VHDL est de faciliter le développement d'un
circuit numérique en fournissant une méthode rigoureuse de description du fonctionnement et de
l'architecture du circuit désirée.
L'étape suivante consiste à synthétiser cette description matérielle pour obtenir un composant
réalisant les fonctions désirées, à l'aide d'éléments logiques concrets (portes logiques, bascules ou
registres). Ceux-ci seront implémentés, selon la technologie utilisée, soit directement en transistors
(dans le cas d'un ASIC), ou en se basant sur les éléments programmables des FPGA.
Le VHDL ayant une double fonction (simulation et synthèse), une partie seulement du VHDL est
synthétisable, l'autre existant uniquement pour faciliter la simulation (écriture de modèles
comportementaux et de test benches).
9
Avantage du VHDL
❖ La portabilité.
❖ De plus, le VHDL :
peut être simulé,
peut être traduit en schéma de portes logiques.
10
Environnement du VHDL
• Plateforme : PC/Station
✓ Éditeurs de texte,
✓ Compilateur
✓ Synthèse
✓ Simulateurs
✓ Interfaces graphiques (courbes stimulis & résultats)
• Notion de projets
✓ Un analyseur (transformation du code VHDL en éléments logiques de base)
✓ Un Place & Route (placement et connection des éléments logiques dans le composant).
✓ paquetages propriétaires
Outils VHDL
• VIVADO
• Xillinx ISE
• Altera Quartus
• Lattice ISP Lever
• Altium Designer
• etc...
12
SPARTRAN 3E réf XC3S500E -FG320
13
NEXYS 3: SPARTRAN 6 réf XC6LX16-CS324
14
NEXYS 3: SPARTRAN 6 réf XC6LX16-CS324
15
ALTERA: DE2-115
16
Développement du VHDL
L'analyse d'un modèle VHDL peut s'effectuer sur des parties du code ou
"unités de compilation". Il existe 5 types d'unités de compilation :
• Entité
Syntaxe:
entity mon_circuit is
port (les signaux d’entrée : in (type des signaux);
les signaux de sortie: out (type des signaux));
end mon_circuit;
20
Les unités de compilation VHDL
• Architecture
Signaux d’entrée
? Signaux de sortie
Syntaxe:
Library ieee ;
Use ieee.std_logic_1164.all ;
Entity porte_et is
Port (A, B: in std_logic;
O: out std_logic);
end porte_et ;
• La configuration:
Syntaxe :
configuration configuration_name of entity_name is for architecture_name
• Les identificateurs:
28
LA SÉMANTIQUE DU LANGAGE VHDL
• Règles à respecter:
✓ Ils commencent par une lettre,
✓ Ils contiennent des lettres, des chiffres et des traits bas (_),
✓ Ils ne doivent pas contenir deux traits bas consécutifs (_ _),
✓ Ils ne doivent ni commencer, ni finir par un trait bas,
✓ Un identificateur ne doit pas excéder une ligne de programme,
✓ La différence minuscule majuscule n'est pas significative,
✓ Ils doivent être différents des mots clés.
• Les commentaires:
✓ -- 2 traits consécutifs indiquent que le reste de la ligne est du commentaire.
✓ Ils sont liés à la ligne
✓ Ils sont nécessaires à la compréhension du modèle mais totalement ignorés
par le compilateur.
29
LA SÉMANTIQUE DU LANGAGE VHDL
Le langage VHDL exploite 4 objets différents:
31
LA SÉMANTIQUE DU LANGAGE VHDL
Les types énumérés:
32
LA SÉMANTIQUE DU LANGAGE VHDL
Les types énumérés:
• Types STD_LOGIC et STD_LOGIC_VECTOR: ces types sont inclus
dans la bibliothèque IEEE 1164,
✓ STD_LOGIC : 9 valeurs décrivant tous les états d’un signal logique
‘U’ : non initialisé**
‘X’ : niveau inconnu, forçage fort** (**) Utile pour la simulation
‘0’ : niveau 0, forçage fort (*) Utile pour la synthèse
‘1’ : niveau 1, forçage fort
‘Z’ : haute impédance *
‘W’ : niveau inconnu, forçage faible**
‘L’ : niveau 0, forçage faible
‘H’ : niveau 1, forçage faible
‘-’ : quelconque (don’t care) *
✓ STD_LOGIC_VECTOR : vecteur de STD_LOGIC
• Pour utiliser ces types il faudra inclure les directives suivantes dans le code
source.
library ieee; 33
use ieee.std_logic_1164.all;
LA SÉMANTIQUE DU LANGAGE VHDL
Les types énumérés:
✓ Type SEVERITY_LEVEL:
Ce type est employé avec une fonction spécifique aux
programmes de tests et permet de caractériser le niveau de
gravité programmable lors d'incidents de simulation. Les
variables de ce type peuvent prendre les valeurs suivantes :
NOTE, WARNING, ERROR, FAILURE. 34
LA SÉMANTIQUE DU LANGAGE VHDL
36
LA SÉMANTIQUE DU LANGAGE VHDL
37
LA SÉMANTIQUE DU LANGAGE VHDL
Les types utilisateurs:
✓ Enregistrement : RECORD:
Lorsque des informations de toute nature doivent être réunies,
VHDL permet la création d'un type spécifique qui autorisera la
manipulation de toutes ces données sous un même identificateur,
appelé enregistrement. On utilise alors le mot clé record.
✓ Types vectoriels:
Les types utilisateurs qui viennent d'être décrits sont des
scalaires. On peut aussi créer des types vectoriels dont on fixe le
nombre d'éléments dans la déclaration du type ou lors de la
déclaration de l'instance. Ces types reposent sur le mot clé array.
38
LA SÉMANTIQUE DU LANGAGE VHDL
Les opérateurs:
❖ Opérateurs d'affectation:
Le VHDL utilise deux opérateurs d'affectations:
➢ Affectation à un signal: pour réaliser une affectation à un
signal, on utilise l'opérateur <= EXEMPLE S <= not A;
➢ Affectation à une variable: l'affectation à une variable
exploite l'opérateur := EXEMPLE i := i + 1
❖ Opérateurs relationnels:
Ils sont valables avec des signaux et des variables scalaires et
vectoriels.
=, /= (différent), <, <=, >, >= EXEMPLE IF A>B THEN …
la différence entre l'opérateur relationnel <= et l'opérateur
d'affectation <= est effectuée par le compilateur en fonction de 39
40
LA SÉMANTIQUE DU LANGAGE VHDL
Les opérateurs:
❖ Opérateurs arithmétiques:
Ils sont définis pour les types entiers et réels.
+ , -, *, / (division entière), ** (exponentiation), mod (modulo),
rem (reste de la division), abs (valeur absolue).
❖ Opérateur de concaténation:
L'opérateur de concaténation & permet de manipuler des
tableaux de tout type et de différentes tailles pour en réaliser
l'association sous un autre label de dimension plus i.
A <= "1100";
B <= "0011"; 41
❑ Propriétés:
❑ Propriétés:
❑ Instanciation de composants
Création d'un composant dont le modèle est défini ailleurs (hiérarchie).
❑ Process
Ne contient que des instructions séquentielles
Un process "vit" toujours ➠ cyclique
Doit être controlé par sa liste de sensibilité ou des synchronisations
internes (wait).
process ( liste de sensibilité) process process (A,B)
Déclarations Déclarations begin
if a = b then o <= ‘0’ ;
begin begin else o <=‘1’;
instructions séquentielles wait on (liste de signaux) end if;
........ instructions séquentielles end process;
Affectation simple:
Signal <= forme d'onde { délai }; Exemple S<= ‘1’; / S<= A; / S<= A xor b;
Affectation conditionnelle:
Exemple
Entity vecteur is Architecture when_else of vecteur is
Port (A: in std_logic_vector (3 downto 0); begin
S: out std_logic_vector (1 downto 0)); S<= ''11'' when A=''0101'' else
end vecteur; ''01'' when A=''0110'' else 47
Exemple
Architecture with_select of vecteur is
begin
with A select
S<= ''11'' when ''0101'',
''01'' when ''0110'',
''10'' when ''1101'',
''00'' when others;
end with_select;
LES INSTRUCTIONS
Instructions concurrentes:
❑ L'appel de procédures:
Dans le cas d'un appel concurrent les paramètres sont des signaux ou des constantes
sensible à un événement sur les paramètres d'entrée.
❑ Les assertions
Surveille une condition et génère un message si la condition est fausse
On y associe un niveau d'erreur qui peut être pris en compte par le simulateur
Le niveau de gravité peut être défini comme le niveau note, warning, error or failure suivant le résultat de la simulation.
instructions concurrentes
end generate {label} ;
LES INSTRUCTIONS
Instructions séquentielles:
❑ Propriétés:
Instructions séquentielles:
Remarque : on peut affecter un signal à un autre mais pas une sortie à une autre
LES INSTRUCTIONS
Instructions séquentielles:
❑ structure de test : if….then…..else
if condition booléenne then .....;
else ......;
end if;
Exemple
Architecture if_then of vecteur is
begin
process (A)
begin
if A=''0101'' then S<= ''11'' ;
else if A=''0110'' then S<= ''01'' ;
else if A=''1101'' then S<= ''10'' ;
end if;
end if;
end if;
end process;
end if_then;
LES INSTRUCTIONS
Instructions séquentielles:
❑ structure de choix : case
case expression is
when valeur1 => ........; Exemple
when valeur2 => ........; Architecture case_is of vecteur is
begin
when valeur3 => ........; process (A)
when others => .........; begin
case A is
end case; when ''0101'' => S<= ''11'' ;
when ''0110'' => S<= ''01'' ;
when ''1101'' => S<= ''10'' ;
when others => S<= ''00'' ;
end case;
end process;
end case_is; 55
LES INSTRUCTIONS
Instructions séquentielles:
❑ structure de boucle: LOOP Exemples
Instructions séquentielles:
❑ WAIT
❑ Next:
next [ etiquette ] [ when condition ] ;
❑ Exit:
exit [ etiquette ] [ when condition ] ;
▪ Valeurs dynamiques
▪ Ils portent :
✓ sur les types scalaires
✓ sur les tableaux
✓ sur des signaux
clk'event
clk'event and clk = '1'
❖ Renvoie la valeur booléenne true si le signal clk,
de type bit, vaut 1 après un changement de
valeur, ce qui revient à tester la présence d’une
transition montante de ce signal.
66
PROGRAMMATION MODULAIRE
Les fonctions
Une fonction retourne au programme appelant une valeur unique,
elle a donc un type.
➢ Déclaration :
function nom [ ( liste de paramètres formels ) ]
return nom_de_type ;
➢ Corps de la fonction :
function nom [ ( liste de paramètres formels ) ]
return nom_de_type is
[ déclarations ]
begin
67
instructions séquentielles
end [ nom ] ;
PROGRAMMATION MODULAIRE
Exemple
➢ Declaration :
Function bit_count (a: std_logic_vector(3 downto 0))
return integer;
➢ Corps de la fonction :
Function bit_count (a: std_logic_vector(3 downto 0))
return integer is
variable count:std_logic:='0';
begin
for i in 0 to 3 loop
if a(i)='1'then
count:= count+1;
end if;
end loop;
return count; 68
end bit_count;
PROGRAMMATION MODULAIRE
Les fonctions
Le corps d’une fonction ne peut pas contenir d’instruction wait,
les variables locales, déclarées dans la fonction, cessent d’exister
dès que la fonction se termine.
➢ Utilisation :
➢ Déclaration :
procedure nom [ ( liste de paramètres formels ) ];
➢ Corps de la fonction :
procedure nom [ ( liste de paramètres formels ) ] is
[ déclarations ]
begin
instructions séquentielles 70
end [ nom ] ;
PROGRAMMATION MODULAIRE
Les procédures
Dans la liste des paramètres formels, la nature des arguments doit
être précisée :
➢ Utilisation :
➢ Corps de la fonction :
Procedure parity2 (a:in std_logic_vector;signal p:out
std_logic) is
variable b:std_logic:='0';
begin
for i in a'range loop
b:= b xor a(i);
end loop;
p <= b;
end parity2; 72
PROGRAMMATION MODULAIRE
Les paquetages
Un paquetage permet de rassembler des déclarations et des sous
programmes, utilisés fréquemment dans une application, dans un
module qui peut être compilé à part, et rendu visible par
l’application au moyen de la clause use.
Les paquetages standard ou dite prédéfinis.
Un compilateur VHDL est toujours assorti d’une librairie, décrite
par des paquetages, qui offre à l’utilisateur des outils variés.
Les paquetages créés par l’utilisateur.
L’utilisateur peut créer ses propres paquetages. Cette possibilité
permet d’assurer la cohérence des déclarations dans une
application complexe, évite d’avoir à répéter un grand nombre de
fois ces mêmes déclarations et donne la possibilité de créer une
librairie de fonctions et procédures adaptée aux besoins des
73
utilisateurs.
PROGRAMMATION MODULAIRE
Les librairies
Une librairie est une collection de modules VHDL qui ont déjà
été compilés. Ces modules peuvent être des paquetages, des entités
ou des architectures.
Une librairie par défaut, work, est systématiquement associée à
l’environnement de travail de l’utilisateur. Ce dernier peut ouvrir
ses propres librairies par la clause library :
-- Fonction:
permet de donner l'heure courante de simulation.
❑ function now return time;
❖ La description comportementale.
❖ La description structurelle.
77
LES NIVEAUX DE DESCRIPTION
La description en flot de données
✓ Utiliser des instructions concurrentes d’assignation de signal.
✓ Description de la manière dont les données circulent de signal
en signal, ou d’une entrée vers une sortie
✓ Trois types d’instructions :
étiquette : … <= …
étiquette : … <= … when … else …
étiquette : with … select … <= … when …
quelconque. Mais la liste doit suivre l’ordre des E/S déclaré auparavant
LES NIVEAUX DE DESCRIPTION
La description structurelle
❑ Par définition, un composant est aussi un système
logique (un sous-système) ; à ce titre, il doit aussi être
décrit par un couple (entity, architecture) dans lequel
sont définis ses entrées-sorties et son comportement.
❑ Le corps d’architecture du composant (le
comportement) est décrit selon un ou plusieurs
Descriptions ; par exemple, un composant peut faire
appel à d’autres composants.
❑ Un composant peut être rangé dans une bibliothèque.
82
LES NIVEAUX DE DESCRIPTION
Exemple
83
SIMULATIONS
Recommandée
➢ Méthodique
87
SIMULATIONS
Simulation par fichier de test (testbench)
❑ On veut simuler un composant nommé A :
❑ Créer un composant B sans entrées-sorties(fichier test).
❑ Déclarer le composant A à simuler.
❑ Déclarer des signaux internes
✓ Autant de signaux que les entrées-sorties du composant
❑ Instancier le composant A : placer le composant A dans le
composant B puis le connecter aux signaux internes. 88
SIMULATIONS
Simulation par testbench
❑ En VHDL :
Les entrées : lecture seulement
Les sorties : écriture seulement
❑ Compilation
❑ Chargement dans le simulateur
❑ Choix des signaux à observer
❑ Lancement de la simulation
❑ Résultat sur la fenêtre des courbes 89
SIMULATIONS
Fichiers de test ?
❑ Écrit à la main
90
SIMULATIONS
Le code VHDL d'un banc de test
❑ Structure du fichier pour le système à tester
Entité (Entrés,sorties)
Architecture
Déclarations
Instructions
❑ Structure du fichier pour le banc de test:
Entité (ni entrée, ni sortie)
Architecture
Déclaration de composant du système à tester
Déclaration des signaux de test
91
Instruction d'instanciation
Instructions de génération de stimuli (entrées )
SIMULATIONS
Code du système à tester (une porte xor)
Library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
Entity porte_xor is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
x : out STD_LOGIC);
end porte_xor;
ENTITY TEST_PORTEXOR IS
END TEST_PORTEXOR;
❖ Remarques préliminaires
✓ Un processus destiné à la génération de stimuli n’a pas de liste de
sensibilité.
✓ Un processus est cyclique (durée de vie = durée de simulation);
arrivé à son mot clé final end process, il se ré-exécute toujours,
sauf si auparavant il est endormi avec une instruction d’attente
inconditionnelle (wait).
✓ Un processus contient des instructions d’affectation de valeur et
obligatoirement des instructions de contrôle de type wait.
exemple: (wait for 20 ns;)
95
SIMULATIONS
❑L’instruction séquentielle d’attente conditionnelle : wait for