GAL2024 - Décarbonation du secteur laitier : la filière s'engage
Cours VHLD.pptx
1. DEPARTEMENT DE GENIE ELECTRIQUE
1
Chargé de Cours : Abderahman Adoum OUMAR
Cours de VHDL (Very High Hardware description langage)
Niveau d’étude : II
Année académique: 2016-2017
3. Préambule :
•Horaire du cours : 25 heurs
- 10H de CM + 15H de TD .
•Moyen pédagogique :
- Support du cours ;
•Evaluation :
- Un DS écrit ;
- Examen écrit.
4. Objectif du module :
Ce cours est la suite thématique de l’électronique Numérique . il a pour
objectif de :
• Modéliser le composant de base de l’électronique numérique
◦- logique combinatoire
- logique séquentiel
• savoir utiliser un langage de programmation comme le VHDL
• A fin d’implémenter dans un environnement de carte programmable
5. Sommaire détaillé
PARTIE I: CONCEPTION DES CIRCUITS PROGRAMMABLES
PARTIE II: SYNTHESE DE LOGIQUE VHDL
PARTIE III: LES OBJECTS VHDL
5
7. Implantation des circuits numériques
• Avec des éléments discrets
• Avec des microprocesseurs, micro contrôleurs, DSP
• Avec des circuits à architecture programmable PAL, GAL,
FPGA Avec des circuits intégrés ASIC
PLD : Programmable Logic Device, CPLD : Complex PLD, PAL: Programmable Array Logic,
GAL: Generic Array Logic,
FPGA : Field Programmable Gate Array, ASIC : application-specific integrated circuit
7
8. Circuit avec des éléments discrets.
•Circuit figé
•Circuit imprimé difficile à modifier
•Intégration limitée
•Coût élevé
•Justifié pour de petits circuits
8
9. CIRCUITS A FONCTIONNEMENT PROGRAMMABLE
• A base de microprocesseurs, microcontrôleurs, DSP
• En modifiant le programme on modifie la fonction
• Plus souple que les circuits à éléments discrets
• Vitesse limitée (mais qui augmente sans cesse)
• Parallélisme compliqué (mais faisable)
• Intégration encore limitée
• Adapté à des opérations séquentielles
9
11. Circuit à architecture programmable
• Une quantité importante de portes logiques
• Des matrices d'interconnections programmables
• Modification du fonctionnement sur le circuit (ISP)
• Souplesse assurée
• Coût de fabrication faible (pour un nombre limité)
• Intégration forte
• Adapté à des applications gourmandes en logique
• Temps de développement dépend de l'application
• Compliqué pour implanter des algorithmes complexes
11
12. Les ASIC (Application Specific Integrated Circuit)
• Coût très bas mais pour de gros tirages
• Temps de développement important
• Pas de modifications une fois fabriqué
• Nécessitant un fondeur pour la fabrication
12
13. ASIC ou FPGA
13
ASIC
Haute performance
Basse consommation
Bas prix si gros tirage Coût de développement faible
Mise rapide sur le marché
Réconfigurablilité
FPGA
14. Evolution : méthodes de CAO
14
Conception physique
Conception structurelle TTL
Conception logique
Synthèse comportementale
Conception fonctionnelle RTL
(Transfert de régistres) Register Transfer Level
20. 20
Specifications
FPGA
• Cyclone II EP2C35F672C6 FPGA and
EPCS16 serial configuration device
I/O Devices
• Built-in USB Blaster for FPGA configuration
• 10/100 Ethernet, RS-232, Infrared port
• Video Out (VGA 10-bit DAC)
• Video In (NTSC/PAL/Multi-format)
• USB 2.0 (type A and type B)
• PS/2 mouse or keyboard port
• Line-in, Line-out, microphone-in
(24-bit audio CODEC)
• Expansion headers (76 signal pins)
Memory
• 8-MB SDRAM, 512-KB SRAM, 4-MB Flash
• SD memory card slot
Switches, LEDs, Displays, and Clocks
• 18 toggle switches
• 4 debounced pushbutton switches
• 18 red LEDs, 9 green LEDs
• Eight 7-segment displays
• 16 x 2 LCD display
• 27-MHz and 50-MHz oscillators, external SMA clock input
CARTE FPGA
24. VVHSIC
(Very High Speed Integradted Circuit)
HHardware
DDescription
LLanguage
24
PARTIE II: SYNTHESE DE LOGIQUE VHDL
25. II.1.Définition
VHDL sont les initiales de VHSIC Hardware Description
Langage, VHSIC étant celles de Very High Scale Integrated
Circuit. Autrement dit, VHDL signifie : langage de description
matériel s'appliquant aux circuits intégrés à très forte intégration.
25
26. II.2.Généralités
L'évolution des technologies induit une complexité croissante des circuits intégrés qui
ressemblent de plus en plus aux systèmes complets d'hier. Aujourd'hui, on intègre dans une
puce ce qui occupait une carte entière il y a quelques années. La simulation logique globale du
système au niveau "porte" n'est plus envisageable en termes de temps de simulation. C'est
donc tout naturellement que des simulateurs fonctionnels ont commencé à être utilisés en
microélectronique. Dans les années 70, une grande variété de langages et de simulateurs était
utilisée. Cette diversité avait pour conséquence une non portabilité des modèles et donc une
impossibilité d'échange entre les sociétés. Un des rôles de VHDL est de permettre l'échange de
descriptions entre concepteurs. Ainsi peuvent être mises en place des méthodologies de
26
27. modélisation et de description de bibliothèques en langage VHDL. L'effort de
standardisation d'un langage tel que VHDL était nécessaire par le fait qu'il ne
s'agissait pas de construire un seul simulateur VHDL (contrairement à la
quasi-totalité des autres langages), mais de permettre l'apparition d'une
multitude d'outils (desimulation, de vérification, de synthèse, ...) de
constructeurs différents utilisant la même norme. Ceci garantit une
bonne qualité (la concurrence) et l'indépendance de l'utilisateur visà vis
des constructeurs de ces outils.
27
28. II.3.Historique
Au début des années 80 la nécessité d’un langage non ambigu des systèmes matériels
pour intégration à grande échelle (plusieurs milliers , voire millions, de portes) . On peut
grâce à ce langage créer des fonctions électroniques avec une totale abstraction
matérielle. La normalisation pour permettre au code écrit d’être portable, c’est à dire
qu’une description écrite pour un circuit peut être facilement utilisée pour un autre
circuit. Indépendance vis-à-vis des fournisseurs.
La Norme définitive adoptée en 1987 : IEEE Std 1076 qui l’impose comme une nouvelle
norme internationale. La norme a été revue en 93, 2000 et 2002 Les premiers outils de
synthèse en 1995. Le VHDL permet le mariage du matériel avec le logiciel, c'est à dire que
VHDL ne fait pas de différence entre un logiciel (par exemple une fonction de test) et une
fonction électronique. Il peut de plus intégrer les stimulis, les retards et les fonctions
spéciales.
28
29. II.4.Les principales caractéristiques du langage VHDL
Un langage s’applique à plusieurs niveau de descriptions
Le langage VHDL couvre tous les niveaux partant des portes
logiques de base jusqu'aux systèmes complets (plusieurs
cartes, chacune comprenant plusieurs circuits). Il s'applique tout
aussi bien au niveau structurel qu'au niveau comportemental,
en passant par le niveau transferts de registres ou RTL
(Register Transfer Logic).
29
30. A-Description comportement
Le circuit est décrit sans tenir compte de la réalisation concrète sur un
composant donné (Elle ne comporte aucune horloge et les largeurs des
bus ne sont pas spécifiées.). On utilise les fonctions de haut niveau
d’abstraction de VHDL. Le code est donc portable, mais il dépend
entièrement du synthétiseur pour le résultat (si un tel synthétiseur
existait, ce qui n’est pas encore le cas). Ce style de description permet en
particulier de spécifier le circuit sous forme d’un algorithme.
30
31. B-Description par flot de données
Le circuit est décrit grâce à plusieurs couche de registres (bascules D) reliées
par de la logique combinatoire. On utilise généralement une liste
d'instructions concurrentes d'affectations de signaux du type "<signal> <=
<expression> " où <expression> peut représenter un simple signal, ou une
expression utilisant des opérateurs logiques, arithmétiques ou relationnels,
ou une expression conditionnelle. C’est la manière traditionnelle d’écrire du
VHDL et qui donne généralement les meilleurs résultats avec les
synthétiseurs commercialisés. Ce niveau de description est souvent appelé
"logiques à transfert de registres" ou RTL (Register Transfer Logic).
31
32. C-Description structurelle de niveau Bas
Le circuit est décrit par sa structure, sous forme d’une liste de composants instanciés et des
interconnexions les reliant. En fait, c’est l’équivalent littéral d’un schéma représentant
l’interconnexion de portes élémentaires issues d'une bibliothèque.
D-Description structurelle de niveau Haut
Le circuit est découpé en blocs fonctionnels de haut niveau qui sont reliés entre eux. Il s’agit
toujours d’un schéma, mais il représente des composants qui peuvent être écrit en
comportemental ou en RTL (mais aussi en structurel bas niveau). On retrouve en général ce
type de description dans le design supérieur d’une description hiérarchique (top level
design).
32
33. II.5.synthèse
La synthèse est définie comme une succession d'opérations permettant
à partir d'une description de circuit dans un domaine fonctionnel
(description comportementale) d'obtenir une description équivalente dans
le domaine physique (description structurelle). Le processus de synthèse
peut être défini comme une boîte noire ayant en entrée une description
abstraite en termes de langage de description matériel, et comme sortie
une description structurée en termes de dispositifs interconnectés (une
netlist)
33
34. II.5.1 Intérêt de la synthèse
Le premier intérêt de la synthèse est de permettre une description la plus abstraite possible
d'un circuit physique. Le concepteur a de moins en moins de détails à donner. Par exemple,
pour décrire un compteur, la description détaillée des signaux de contrôle explicitement
utilisés n'est pas indispensable. Seule la fonctionnalité de comptage et les contraintes de
synthèse (qui peuvent être des contraintes de temps, d’optimisation, de circuit cible, etc…)
doivent être indiquées. Le but de l'abstraction est de réduire et de condenser les descriptions
au départ et, par conséquent, de faciliter leur correction en cas d'erreurs. L'autre avantage de
l'abstraction est la portabilité.
34
35. II.6.Différence entre un langage de programmation et VHDL
VHDL n’est pas un langage de programmation comme le C, c’est un langage de description
matériel. Il est important de bien comprendre la différence entre les deux :
• un langage de programmation est destiné à être traduit en langage machine puis à être
exécuté par un microprocesseur.
• un langage de description matériel comme VHDL décrit une réalité matérielle, c’est-à-dire
le fonctionnement d’un système numérique. Il va être traduit (synthétisé) en un
ensemble de circuits logiques combinatoires et séquentiels qui vont être implémentés
dans un circuit intégré. Il n’y a aucun microprocesseur pour exécuter la description VHDL
dans un circuit intégré.
35
36. PARTI III Structure du VHDL(OBJECTIFS)
36
Il existe 5 catégories d’unité de conception:
Une unité de conception est une partie de programme qui peut être compilée
séparément. Cet aspect modulaire est la base de la structuration de la
description. Le support du programme est un fichier texte qui peut contenir une
ou plusieurs unités. Par défaut le résultat de compilation sera placé dans une
bibliothèque ayant comme nom logique WORK.
Pour la compilation de plusieurs unités, un certain ordre devra être respecter à
cause de leur dépendance éventuelle.
37. III.2 Structure du VHDL
• L’entité (mot clé entity)
Décrit un système vu extérieur (boîte noire)
• L’architecture (mot clé architecture)
Décrit l’intérieur (le fonctionnement) d’une boîte noire.
• La configuration (mot clé configuration):
choisir l’architecture d’un composant quand il y en a plusieurs.
• La déclaration de paquetage (mot clé package)
c’est une unité de conception permettant de regrouper des définitions de
types, de constantes ou des déclarations de sous- programmes.
• Le corps de paquetage (mot clé package body)
optionnel sert à instancier des constantes ou à décrire les sous-programmes.
37
38. III.2.Structure hiérarchique
38
Au niveau supérieur, on se contente de décrire les
Entrées et Sorties du module global
Au niveau intermédiaire, on se contente de décrire la
façon dont s’associent les fonctions A, B et C.
Au niveau inférieur, pour chaque fonction, on peut aller jusqu’à
décrire le fonctionnement des portes de base, NAND, XOR…
Dans un langage de programmation (C ou Pascal), les opérations décrites sont exécutées les unes
après les autres dans l’ordre précis décrit dans l’algorithme.
En VHDL, les différentes tâches décrites se déroulent simultanément.
39. III.3.Domaine concurrent et séquentiel
Description d’un système matériel
• description d’action concurrentes (ex. plusieurs blocs d’un circuit peuvent fonctionner en
parallèle
• description d’action en séquence (ex. automates)
Deux jeux d’instructions en VHDL
• Instructions concurrentes : elles s’exécutent en même temps
• Instructions séquentielles : elles s’exécutent les une après les autres
39
40. III.4.Classes d’objets
Quatre classes d’objets en VHDL :
• Les constantes
Comme les autres langages, elles ont une valeur fixe
• Les variables
Comme les autres langages, elles ont une valeur immédiatement modifiable par affectation
• Les signaux
Notion nouvelle, la valeur ne se modifie pas immédiatement :variable + notion temporelle
(valeurs datées)
• fichier (n’est pas abordé dans ce cours)
ensemble de valeurs qui peuvent être lues ou écrites
40
41. III.5. Types d’objets
Les objets d’un programme VHDL sont tous typés.
Avant toute utilisation d’une constante, d’une variable ou d’un signal, il faut les déclarer.
La déclaration des objets s’effectue uniquement dans la partie déclarative du programme.
41
46. III. 6. Programmer en VHDL
1. Définition de l’entité (boîte noire avec les ports d’entrée/sortie)
2. Définition de l’architecture interne de cette boîte noire
3. Déclaration des constantes, des signaux, des fonctions, des procédures, des blocs
hiérarchiques utilisés dans le programme
4. Corps du programme consistant
les instructions concurrentes
Les instructions séquentielles encapsulées dans des « process »
5- (Les commentaires sont précédés de deux tirés : -- exemple)
46
47. L’IEEE (Institut of Electrical and Electronics Engineers): les a normalisées et plus particulièrement la
bibliothèque IEEE1164.
47
Déclaration des bibliothèques
48. • L'entité définit les ports (vue externe) et leur mode (in, out, inout,
buffer)
• Paramétrer le modèle (paramètres génériques)
• Syntaxe:
entity nom_de_l_entite is
{generic(liste_des_parametres)}
{port(liste_des_port_avec_leutr_mode)}
end {nom_de_l_entite}
48
Entité
50. Rôle de l’entité
Son rôle est uniquement de décrire le câblage du module, vu de l'extérieur. Elle liste les signaux d'entrée
et de sortie de la structure et indique leur mode et nature . La liste des entrées et sorties est entre ( ) et
annoncée par le mot-clef: PORT
Le mode décrit le sens des signaux:
in signal d'entrée, unidirectionnel
out signal de sortie, unidirectionnel
inout signal d'entrée-sortie, bidirectionnel
buffer signal de sortie, unidirectionnel, mais réentrant
50
51. Rôle de l’entité
Le type décrit la nature des signaux, les types courants sont:
☯ bit peut prendre 2 valeurs, 0 ou 1
☯ bit_vector (N downto 0) définit un bus, l (l'indice de gauche étant toujours le Most
Significant Bit
ou bit_vector (0 to N) écriture déconseillée car 0 désignerait alors le poids fort. L'indice le
plus faible peut ne pas être 0.
☯ boolean peut prendre 2 valeurs FALSE et TRUE
☯ std_logic peut prendre les valeurs 0, 1, U (indéterminé) ou Z (haute impédance)
☯ integer entier, positif ou négatif, sur 32 bits
☯ character caractères a, b, c… A, B, C….1,2,3…..
51
54. Architecture
1. Définition de signaux et d'autres objets internes
2. Description du fonctionnement ou de la structure de l’entité à l’aide d’instructions concurrentes
son rôle est de décrire un fonctionnement possible de l'entité et cette description peut être
structurelle ou comportementale.
Syntaxe:
architecture nom_de_l_architecture of nom_de_l_entite is
{partie déclarative}
begin
{suite d’instructions concurrentes}
end nom_de_l_architecture;
54
55. III.7.Description structurelle
On va définir par instructions l'équivalent
littéral d'un schéma structurel, ce qui n'est
ni simple ni pratique, ni vraiment le but du
VHDL.
55
sel
selb
e1
e0
s1
s0
U0
U1
U2
U3
ARCHITECTURE modele2 OF multiplexeur IS
COMPONENT ET
PORT (a,b: IN BIT;
s: OUT BIT);
END COMPONENT;
COMPONENT OU
PORT (a,b: IN BIT;
s: OUT BIT);
END COMPONENT;
COMPONENT NOT
PORT (a: IN BIT;
s: OUT BIT);
END COMPONENT;
SIGNAL selb,s1,s0: BIT;
BEGIN
U0: ET PORT MAP (sel,e1,s1);
U1: ET PORT MAP (selb,e0,s0);
U2: NOT PORT MAP (sel,selb);
U3: OU PORT MAP (s1,s0,s);
END modele2;
56. Hiérarchisation
Conception d’un bloc et son utilisation dans un autre circuit: instanciation ou
instanciation multiple
1. Première étape: écrire l’entité et l’architecture du module
2. Deuxième étape: introduire ce module au circuit appelant (ce module s’appellera «
component »)
3. Troisième étape: instanciation du module
56
57. component AND_2
port (
a : in bit;
b : in bit;
s : out bit);
end component;
Déclaration:
Le mot clé component sert à déclarer le prototype d'interconnexion. La syntaxe est presque
identique à celle de l'entité :
57
Pour créer rapidement un composant, une opération copier/coller de l'entité en enlevant le littéral "IS" suffit.
58. entity AND_3 is
port(
e1 : in bit;
e2 : in bit;
e3 : in bit;
s : out bit);
end AND_3;
architecture arc of AND_3 is
signal z : bit;
component et
port (
a : in bit;
b : in bit;
s : out bit);
end component;
begin
inst1 : et port map (a=>e1,
b=>e2 , s=>z);
inst2 : et port map (z, e3, s);
end arc;
Dans cet exemple , 2 instances de composant "and2" sont appelées pour
créer une porte ET à 3
entrées.
L'association des ports du composants aux signaux de l'instance se fait à
l'aide de la
clause port map.
La syntaxe des associations est soit
1- par nom où chaque broche du composant est associée à un signal
: cas de inst_1
2- positionnelle où l'ordre des signaux correspond à l'ordre des
broches : cas de inst_2
Pour que ça marche, il faut avoir
créer le component et dans le
même répertoire, comme suit
Entity et is
port( a: in bit; b: in bit;
s: out bit);
End et;
Architecture aetb of et is
Begin
S<= a and b;
End aetb;
Déclaration et instanciation des composants
Instanciation : L'instanciation d'un composant se fait dans le corps de l'architecture de cette façon NOM_INSTANCE>:<NOM_COMPOSANT> port map (LISTE DES
CONNEXIONS);
58
59. Découpage de votre projet en fonctions: création de composants adéquats
Assemblage des composants créés pour structurer votre projet
MOT CLE: PORTMAP
Ma Référence :port map ( liste ordonnée de signaux) ;
ou
Ma Référence : port map ( port=> signal , port => signal ) ;
exemple: additionneur 4 bits.
etape 1: je crée un composant ADDITIONNEUR 1 bits
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY fa IS
PORT (
Ci, X, Y: IN STD_LOGIC;
S, Cout: OUT STD_LOGIC);
END fa;
ARCHITECTURE Dataflow OF fa IS
BEGIN
Cout <= (X AND Y) OR (Ci AND (X XOR Y));
S <= X XOR Y XOR Ci;
END Dataflow;
Instanciation (placement) de composants déjà crées
59
60. III.7.Description comportementale
Le comportement du module en cours de conception est
directement décrit à l'aide d'instructions séquentielles ou sous
forme de flux de données.
60
On veut créer le
multiplexeur ci-contre
S = E1 si Cde = 0
S = E2 si Cde =1
En-tête indiquant les bibliothèques IEE à utiliser
Library ieee;
Use ieee.std_logic_1164.all;
Entity mux_2 is
port (E1, E2, Cde: in bit;
S: out bit);
End mux_2
Architecture arch1_mux_2 of mux_2 is
Begin
S<=E1 when CDE=‘0’else E2;
End arch1_mux_2;
Déclaration d’identité
Déclaration d’architecture
<= est obtenu avec < et = et signifie « prend la valeur »
Noter qu’un état logique est entre ‘apostrophes’
61. On constate que l'on n'a pas cherché à indiquer le type de porte nécessaire pour que le
fonctionnement se réalise. Seul le flux de données est cité.
61
library ieee;
use ieee.std_logic_1164.all;
entity mux_2 is
port (E1,E2,Cde: in bit;
S:out bit);
end mux_2;
architecture arch2_mux_2 of mux_2 is
begin
S<=(E1 and (not(Cde))) or (E2 and Cde);
end arch2_mux_2;
Une autre architecture du même multiplexeur est donnée
ci-dessous, toujours sous forme comportementale (noter
que l'entité ne change absolument pas)
62. Ces deux séquences d’instructions sont
équivalentes. Il existe un lien permanent
entre A,B et C.
.
A := B;
B := C;
B := C;
A := B;
Ces deux séquences d’instructions ne sont
pas équivalentes
A <= B;
B <= C;
B <= C;
A <= B;
Domaine concurrent Domaine séquentiel
Il existe une instruction concurrente particulière appelée process (processus) qui comporte à
l’intérieur des instructions séquentielles. A l’intérieur du process, l’ordre d’écriture des instructions
est important
L’ordre d’écriture des instructions concurrentes n’est pas important
architecture nom de l'architecture of nom de la spécification d'entité is
déclarations;
begin
instructions concurrentes;
end {nom de l'architecture};
III.8 Séquentiel / concurrent
Rappel du contenu d’une architecture
62
63. III.9.Instructions concurrentes
Il existe 7 instructions concurrentes en VHDL:
- affectation simple de signal
- affection conditionnelle de signal
- affectation sélective de signal
- instanciation de composant
- instruction GENERATE
- instruction PROCESS
- appel de procédure
Peuvent disposer d'un label. Ce label optionnel peut permettre de localiser
rapidement toutes les actions parallèles d'une structure et donc d'améliorer la
lisibilité d'un programme VHDL.
Sont essentiellement utilisées au niveau du corps de l’architecture
63
64. III.10.Fonctionnement concurrent
En langage VHDL, les instructions d'une architecture sont évaluées (ce qui signifie "testées et exécutées") en
permanence et simultanément. Ce type de fonctionnement est appelé parallèle ou concurrent et correspond au cas de
l'électronique combinatoire.
64
On distingue 3 types d'instructions concurrentes:
1- Equations logiques classiques où on utilise l'assignation inconditionnelle <=
library ieee;
use ieee.std_logic_1164.all;
entity demi_add is
port (A,B: in bit;
S1,S2:out bit);
end demi_add;
architecture arch1_exemple_2 of demi_add is
Begin
S2<= A and B;
S1<= A or B;
end arch1_exemple_2;
65. Fonctionnement concurrent
2- Instructions conditionnelles du type when….. else.
65
library ieee;
use ieee.std_logic_1164.all;
entity mux_4 is
port (A,B,C:in bit;
SEL:in bit_vector(1 downto 0);
S:out bit);
end mux_4;
architecture arch1_mux_4 of mux_4 is
begin
S<= A when (SEL="00") else
B when (SEL="01") else
C when (SEL="10") else '0';
end arch1_mux_4
66. Assignation conditionnelle
Structure WHEN/ELSE
signal <= signal1 when expresion_boolénne else
………
signal1xx when expresion_boolénne else
signal par défaut;
---- Solution 1: with WHEN/ELSE -------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY encoder IS
PORT ( x: IN STD_LOGIC_VECTOR (3 DOWNTO 0);
y: OUT STD_LOGIC_VECTOR (1 DOWNTO 0));
END encoder;
ARCHITECTURE encoder1 OF encoder IS
BEGIN
y <= "00" WHEN x="0001" ELSE
"01" WHEN x="0010" ELSE
"10" WHEN x="0100" ELSE
"11" WHEN x="1000" ELSE
"ZZZ";
END encoder1;
Exemple d’application:
encodeur clavier pour PIC
Intérêt: réduire le nombre d’entrée du PIC
Fonctionnement concurrent
66
67. with expression select
signal1 <= signal1when valeur 1,
signal2 when valeur2,
------
signal par défaut when others
;
Le multiplexeur: on aiguille une enrée vers la
sortie en fonction d’un numéro d’aiguillage
MUX
1 voie parmi 4
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_arith.all;
Entity combi3 is
port(
c: in integer range 0 to 3;
e: in std_logic_vector(3
downto 0);
s:out std_logic);
End combi3;
Architecture archi1 of combi3 is
Begin
With c select
s<=e(0) when 0,
e(1) when 1,
e(2) when 2,
e(3) when 3;
End archi1;
Assignation sélective
Fonctionnement concurrent
67
68. Exemple: décodeur 7 segments
68
Utilisation d’une table (LUT Look-Up Table: table de correspondance) pour décrire le système
Cette table se comporte un peu comme une table de vérité, et désigne sa sortie en fonction de ses entrées et du contenu
de la table. Le gain de vitesse peut être significatif, car rechercher une valeur en mémoire est souvent plus rapide
qu'effectuer un calcul important.
Carte DE2:
Anode commune
Segment actif à ‘0’
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity decod7seg is
port(
iDigit: IN std_logic_vector (3 downto
0);
oSeg: OUT std_logic_vector (6 downto
0));
end decod7seg;
architecture arch_dec_7seg_v1 of decod7seg is
-- definition d'un nouveau type tableau de 16 elements de 7 bits
type ROM is array(15 downto 0) of std_logic_vector(6 downto 0);
--initialisaion du tableau
-- tableau vu comme une memoire(LUT)
signal LUT:ROM:=(
"1000000","1111001","0100100","0110000","0011001","0010
010","0000010",
"1111000","0000000","0011000","0001000","0000011","1000
110","0100001",
"0000110","0001110");
begin
-- pour indexer tableau il faut un entier
-- fonction de conversion conv_integer dan IEEE.std_logic_unsigned.all
oSeg<=LUT(conv_integer(iDigit));
end arch_dec_7seg_v1;
Il faut
69. • En VHDL, une zone séquentielle existe dans laquelle une suite d'instructions
s’exécutent les unes après les autres.
• Cette zone se trouve dans les process, fonctions et procédures.
En langage VHDL, pour décrire un fonctionnement séquentiel, il faut faire appel à
un "processus" (process), soit un groupe bien délimité d'instructions, qui répond à 3
critères.
⌦ le processus s'exécute à chaque changement d'état d'un des signaux
auquel il est sensible. On définit derrière le mot process (la liste des
signaux auquel le processus est sensible)
⌦ les instructions du processus s'exécutent séquentiellement.
⌦ les modifications que subissent alors les signaux ne sont effectives
qu'à la fin du processus.
69
III.11.Fonctionnement séquentiel.
70. • Process est une instruction concurrente complexe à écrire dans une architecture.
• Process définit une zone séquentielle.
• Les différents process d'une architecture s'exécutent tous en parallèle.
• Syntaxe de process :
label : -- optionnel
process (liste de sensibilité)
{partie déclarative}
begin
suite d’instructions séquentielles
end process;
• Un process s'exécute quand un des signaux de la liste de sensibilité change de
valeur.
Fonctionnement séquentiel.
70
71. Un exemple
library ieee;
use ieee.std_logic_1164.all;
entity mux_2 is
port (E1,E2,Cde: in bit;
S:out bit);
end mux_2;
architecture arch3_mux_2 of mux_2 is
begin
process (Cde,E1,E2)
begin
if (Cde='0') then
S <= E1;
else S <= E2;
end if;
end process;
end arch3_mux_2;
En plaçant E1 et E2 dans la liste de
sensibilité du processus, on obtient un
fonctionnement équivalent au
combinatoire
Fonctionnement séquentiel.
71
72. Syntaxe de l'instruction processus
[Label1:] process (Liste_De_Sensibilité)
-- ↑ Signaux_activant_le_processus
--zone de déclaration
begin
--Zone pour instructions
-- séquentielles ....
end process;
un process
• s’active lorsqu’un des signaux de sa liste de
sensibilité (ses entrées) change de valeur,
• et se rendort lorsque toutes les instructions
séquentielles ont été évaluées une fois (end process)
L’exécution des instructions à l’intérieur d’un process
est séquentielle
• Le temps simulé est stoppé durant l’exécution d’un
process, donc
• les affectations aux signaux ne prennent effet
qu’après l’endormissement du process (fin de
l’exécution de l’algorithme)
72
74. Instructions séquentielles
Elles s'écrivent uniquement dans une zone séquentielle
• instruction d'attente (wait)
• instruction d'affectation (temporisée)
• instruction conditionnelle (if)
• instruction case
• instruction de boucle
74
75. Bibliographie
◦ Certaines illustrations et exemples proviennent de cours ou d’ouvrages présents ci-dessous
◦ Introduction à la Synthèse logique Philippe LECARDONNEL & Philippe LETENNEUR
◦ Le langage de description VHDL T. BLOTIN
◦ VHDl J.maillefert
◦ Circuit Design with VHDL Volnei A. Pedroni
◦ Un lien bien utile pour l’étudiant GEII
◦ http://perso.orange.fr/xcotton/electron/coursetdocs.htm
75