Vous êtes sur la page 1sur 65

CIRCUITS NUMÉRIQUES

PROGRAMMABLES ET VHDL
Cours préparé par: AYAT yassine
Cycle licence : éducation sciences industrielles

AYAT YASSINE
PLAN DU COURS :

• Introduction
• Architecture classique du circuit numérique
• Classification des circuits numériques
• Technologie des élements programmable
• Rappel sur l’éléctronique numérique
• Programmation vhdl
AYAT YASSINE 2
INTRODUCTION
• Un circuit logique programmable, ou autrement dit un réseau logique
programmable, est un circuit intégré qui fonctionne de manière logique et qui
permet ça reprogrammation à volonté même après sa fabrication. Il n’y a pas
de programmation en logiciel (contrairement à un microprocesseur). On utilise
plutôt le terme « reconfiguration » plutôt que « reprogrammation » (car ses
connexions ou ses composants, sont à base des portes logiques et des bascules).
Le terme programmation est utilisé fréquemment, pour personnaliser les
réseaux logiques reconfigurables et modifiables.

AYAT YASSINE 3
RAPPELS SUR LES FONCTIONS LOGIQUE :

• L’outil mathématique qui permet de décrire les systèmes combinatoires est


l’Algèbre de Bool. Par la combinaison des trois fonctions de base que sont le
NON, OU, ET, on va pouvoir décrire chacune des sorties en fonction des
entrées.

AYAT YASSINE 4
FONCTION ET :
• La fonction ET est obtenue par la La fonction NON ET est obtenue en
multiplication des Entrées F= A • complémentant la fonction ET . La table de
vérité et le symbole associés à cette fonction
B . La table de vérité et le sont :
symbole associés à cette fonction
sont :

AYAT YASSINE 5
FONCTION OU(OR)
• La fonction OU est obtenue par la • La fonction NON OU est obtenue en complémentant
somme des entrées du système F = A la fonction OU F = . La table de vérité et le symbole
associés à cette fonction sont :
+ B. La table de vérité et le symbole
associés à cette fonction sont :

AYAT YASSINE 6
FONCTION OU EXCLUSIF (XOR)

• La fonction OU EXCLUSIF ne vaut 1 que si les deux entrées sont différentes. Elle s’écrit :
• F = A B = . La table de vérité et le symbole associés à cette fonction sont :

AYAT YASSINE 7
SYNTHÈSE D’UN CIRCUIT COMBINATOIRE

• L’objectif est de générer logigramme du circuit à partir de la fonction logique


correspondante
Représentation par la porte logique Non et la porte logique ET
• Exemple :

Il y a deux méthodes pour


représenter cette fonction
logique par logigramme

AYAT YASSINE 8
DÉTERMINATION D’UNE ÉQUATION
LOGIQUE

• Soit la table de vérité qui contient trois entrées a,b et c et deux sortie x et y

AYAT YASSINE 9
LOGIQUE COMBINATOIRE
Additionneur :
• Les additionneurs Un additionneur est un circuit capable de faire la somme de
deux nombres binaires A et B.
• Une addition met en œuvre deux sorties : La somme, généralement notée S, La
retenue, généralement notée R (ou C : carry)
• Comme en décimal, nous devons tenir compte de la retenue éventuelle, résultat
d’un calcul précèdent. La figure suivante montre la décomposition de l’addition de
deux nombres binaires de 4 bits.

AYAT YASSINE 10
Semi additionneur :
• C’est un additionneur 2 bits sans tenir compte de la retenue précédente.

AYAT YASSINE 11
L’additionneur complet (2bits)
• Il possède trois entrées A, B et Re et deux sorties S et RS : Re représente la
retenue de rang n-1 et Rs celle de rang n

AYAT YASSINE 12
LES MULTIPLEXEURS ET LES
DÉMULTIPLEXEURS
• Un multiplexeur (MUX) est un circuit logique qui possède entrées (D0, D1,
D2, D3,… ), n entrées de sélection (E0, E1, E2, … En-1) et une seule sortie
Y. Il est dit : MUX vers 1 ou MUX x 1.
• Sa fonction consiste d’effectuer l’aiguillage de l’une des entrées vers la sortie
en fonction du code d’adresse appliqué sur les entrées de sélection.

AYAT YASSINE 13
LES DÉMULTIPLEXEURS
• Un démultiplexeur (DEMUX) est un circuit logique qui possède une seule
entrée B, n entrées de sélection (E0, E1, E2, … En-1) et sorties (S0, S1, S2,
… ,…,S -1). Il est dit : DEMUX 1 vers ou DEMUX 1 x
• Il effectue la fonction inverse d’un multiplexeur, il transmet la donnée
d’entrée vers une des sorties selon le mot écrit aux entrées de sélection, il
fonctionne comme un commutateur.

AYAT YASSINE 14
EXERCICE
• Déterminer la fonction L et S et les logigramme :

AYAT YASSINE 15
AYAT YASSINE 16
BRÛLEUR À FIOUL B:

• Le chauffage des pièces d’un appartement est réalisé à l’aide d’un brûleur à fioul B. Le brûleur
fonctionne dans les conditions suivantes :
• Si on appuie sur un bouton marche m
• Si la température des pièces est inférieure à 20°C : détection par un thermostat th.
• Si la température de l’eau du circuit est inférieure à 50°C : détection par une sonde thermique
e.
• Travail demandé :
Etablir la table de vérité du brûleur: déterminer l’équation de bruleur à fioul B et logigramme

AYAT YASSINE 17
INTRODUCTION AU CIRCUITS LOGIQUE
PROGRAMMÉS:
• Il y a quelques années la réalisation d’un montage en
électronique numérique impliquait l’utilisation d’un nombre
important de circuits intégrés logiques. Ceci avait pour
conséquences un prix de revient élevé, une mise en œuvre
complexe et un circuit imprimé de taille importante.

• Dans les 1980s, on utilisait des puces de la série 7400 pour créer
les circuits numériques. Pour réaliser une fonction logique.

• Le circuit de la figure 1 montre un exemple de réalisation d’une


simple fonction de trois variables logique qui nécessite trois
circuit logique de la série 74, imaginons alors la réalisation
d’une fonction de 100 variables logiques

AYAT YASSINE 18
• Le développement des mémoires utilisées en informatique fut à l’origine des
premiers circuits logiques programmables (PLD : programmable logic device).
• Ce type de produit peut intégrer dans un seul circuit plusieurs fonctions
logiques programmables par l’utilisateur.
• Sa mise en œuvre se fait très facilement à l’aide:
• d’un programmateur,
• d’un micro-ordinateur et
• d’un logiciel adapté.
• Un, réseau logique programmable ou circuit logique programmable, est un
circuit intégré logique qui peut être reprogrammé après sa fabrication. Il est
composé de nombreuses cellules logiques élémentaires librement assemblables.

AYAT YASSINE 19
CE TYPE DE COMPOSANT ÉLECTRONIQUE EST
COMMUNÉMENT DÉSIGNÉ PAR LES SIGLES
ANGLAIS :
• FPGA (field-programmable gate array, réseau de portes programmables),
• PLD (programmable logic device, circuit logique programmable),
• EPLD (erasable programmable logic device, circuit logique programmable et
effaçable),
• CPLD (complex programmable logic device, circuit logique programmable
complexe),
• PAL (programmable array logic, réseau logique programmable),
AYAT YASSINE 20
STRUCTURE DE BASE D’UN PLD
• La plupart des PLDs simple (de base) suivent la structure suivante :
• Un ensemble d’opérateurs « ET » sur lesquels viennent se connecter les variables d’entrée et
leurs compléments.
• Un ensemble d’opérateurs « OU » sur lesquels les sorties des opérateurs « ET » sont
connectées.
• Une éventuelle structure de sortie (Portes inverseuses, logique 3 états, registres...).
• Les deux premiers ensembles forment chacun ce qu’on appelle une matrice. Les
interconnexions de ces matrices doivent être programmables. C’est la raison pour laquelle
elles sont assurées par des fusibles qui sont « grillés » lors de la programmation. Lorsqu’un
PLD est vierge toutes les connexions sont assurées. Un exemple de cette représentation est
donné par la figure 3

AYAT YASSINE 21
STRUCTURE DE BASE AVEC NORME DES
CONSTRUCTEURS

• La figure représente la structure interne d’un PLD ayant ses


fusibles intacts. Les équations logiques de Q0 et Q1 sont :

• Si on veut obtenir les fonctions

• on « grillera » des fusibles defaçon à obtenir le schéma suivant


:
AYAT YASSINE 22
CLASSIFICATION DES RÉSEAUX LOGIQUES
• Selon le type des deux matrices on peut distinguer plusieurs familles de PLD
qui sont différenciées par leur structure interne. Le tableau suivant présente
certaines de ces familles.

REMARQUES : · Certaines de ces familles possèdent en plus des matrices « ET » et « OU », de la


logique séquentielle (Bascules « D », « JK »...) placée après les entrées ou avant les sorties du PLD. ·
Les « PROMs » sont des circuits utilisés en informatique pour mémoriser de façon définitive des
données : ce sont des « Mémoires mortes ». Il existe des versions effaçables comme les UVPROM (aux
U-V) et les EEPROM (électriquement).
AYAT YASSINE 23
LES FAMILLE DES PLD SIMPLE SPLD
LES PROM
• Les premiers circuits programmables apparus sur le marché
sont les PROM bipolaires à fusibles. Cette mémoire est
l'association d'un réseau de ET fixes, réalisant le décodage
d'adresse, et d'un réseau de OU programmables, réalisant le
plan mémoire proprement dit. On peut facilement
comprendre que, outre le stockage de données qui est sa
fonction première, cette mémoire puisse être utilisée en tant
que circuit logique. La figure ci-dessous représente la
structure logique d'une PROM bipolaire à fusibles.

AYAT YASSINE 24
LES PROM

• Les sorties des porte NAND fournissent tous les min-termes pour ce circuit 16
mintermes
• Ce circuit peut être utilisé soit pour implémenter des circuits combinatoires en
utilisant des fonctions sous sa première formes canonique mais elle n’est plus
utilisée pour cela aujourd’hui, elle est à la base de la famille de PLA, des PAL et
des EPLD, soit on l’utilise pour mémorisation des données avec ‘DCBA’ comme
BUS d’adress de 4 bits e et Q3Q2QQ0 BUS de 4 bits de données, c’est-à-dire on
peut réaliser une mémoire de 16 mots de quatre bits.

AYAT YASSINE 25
PLA

• Le premier PLD était le PLA (programmable logic array)


• Utilise le concept qu’un circuit peut être réalisé en forme SOP SOM OF PRODUCT somme de
produits
• Une rangée ET pour les termes de produit
• Une rangée OU pour les fonctions SOP Toutes les entrées sont fournies en forme normale et inversé
en utilisant des tampons.
• On peut réaliser n’importe quelle fonction SOP des entrées du PLA Les PLAs sont efficaces en
capacité logique dans un circuit intégré, et pour cela sont inclus dans des puces plus larges, comme
les microprocesseurs

AYAT YASSINE 26
PLA
• Pour le PLA Les deux matrices sont programmables

AYAT YASSINE 27
LES « PALS » (PROGRAMMABLE ARRAY
LOGIC)
• Ce sont les premiers circuits programmables à être
utilisés pour réaliser des fonctions logiques.
• Le constructeur AMD a développé ce type de circuit dans
les années 1978. Ils possèdent des matrices« ET »
programmables et des matrices « OU » fixes.
• La fusion des fusibles est obtenue en appliquant à leurs
bornes une tension de 11,5 V pendant 10 à 50 µS (leur
tension de fonctionnement est environ de 5V).
• Cette opération est bien sûr effectuée en utilisant un
programmateur adapté. La structure de base de ce PLD
est présentée par le schéma suivant.
AYAT YASSINE 28
LES G.A.L.
• GAL (Généric Array Logic) L’inconvénient majeur des PAL est qu’ils ne sont
programmables qu’une seule fois. Ce qui a ramené la firme LATTICE a
pensé de remplacer les fusibles irréversibles des PAL par des transistors
MOS FET qui peuvent être régénérés. Ceci a donné naissance aux GAL «
Réseau Logique Générique ». Ces circuits peuvent donc être reprogrammés à
volonté,

AYAT YASSINE 29
LES C.P.L.D.S (COMPLEX PROGRAMMABLE
LOGIC DEVICE)

• CPLD (Complex PLD) Les CPLD


peuvent être vu comme une intégration
de plusieurs PLD simples (SPLD) dans
une structure à deux dimensions, ils
sont composés de blocs logiques
répartis autour d’une matrice
d’interconnexion PI (Programmable
Interconnect).
AYAT YASSINE 30
• Le choix d’un PLD dépendra dont :
• La densité d’intégration
• De la rapidité de fonctionnement (paramètre directement lié à l’impédance intrinsèque
des éléments programmables)
• De la facilité de mise en œuvre (programmation, reprogrammation…)
• De la possibilité de maintien de l’information

AYAT YASSINE 31
AYAT YASSINE 32
FPGA
• Les FPGA (Field Programmable Gate Arrays ou "réseaux logiques programmables") sont des composants
entièrement reconfigurables ce qui permet de les reprogrammer à volonté afin d'accélérer notablement
certaines phases de calculs.
• L'avantage de ce genre de circuit est sa grande souplesse qui permet de les réutiliser à volonté dans des
algorithmes différents en un temps très court.
• Le progrès de ces technologies permet de faire des composants toujours plus rapides et à plus haute
intégration, ce qui permet de programmer des applications importantes. Cette technologie permet
d’implanter un grand nombre d’applications et offre une solution d’implantation matérielle à faible coût
pour des compagnies de taille modeste pour qui, le coût de développement d’un circuit intégré spécifique
implique un trop lourd investissement.

AYAT YASSINE 33
FPGA
• les FPGA à la différence des CPLD sont assimilables à des A.S.I.C. programmables par
l’utilisateur.
• La puissance de ces circuits est telle qu’ils peuvent être composés de plusieurs milliers voir
millions de portes logiques et de bascules. Les dernières générations de FPGA intègrent même de
la mémoire vive (RAM). Les deux plus grands constructeurs de FPGA sont XILINX et ALTERA.
• Ils sont composés de blocs logiques élémentaires (plusieurs milliers de portes) qui peuvent être
interconnectés.
• Critère de choix : vitesse de fonctionnement plus élevées pour les CPLD

AYAT YASSINE 34
La structure des LUT est caractérisée par une table de vérité ainsi qu’une mémoire pour router
les différentes interconnexions entre les entrées et sorties des circuits FPGA. Dans la figure
suivante nous allons voir deux type de circuit FPGA à deux dimension et à mer de porte.

AYAT YASSINE 35
Le FPGA est présenté pour la 1er fois par XILINX avec des structures :
• blocs logiques configurables.
• blocs d’I/O configurables.
• des interconnexions entre bloc configurables.

Architecture des circuits FPGA


Un FPGA est un réseau (matrice) de blocs
combinatoires et séquentiels (CLB).
• Des blocs d’entrée/sortie (IOB) sont associés
aux broches du circuit.
• Les CLB et IOB sont interconnectés entre
eux par des dispositifs variés.
• Les matrices s’organisent de 8x8 à 128x120.

AYAT YASSINE 36
Les Interconnexions :
Il existe trois type d’interconnections entre les différents blocs des circuits FPGA
o Interconnexion directe : entre les différents blocs logiques.
o Interconnexions par le biais d’une matrice.
o Interconnexion par les grandes lignes relient tous les CLB dans les extrémités des circuits FPG

AYAT YASSINE 37
STRUCTURE INTERNE FPGA
• CLB contiennent suffisamment de logique pour
créer une petite machine d'état, comme illustré à la
Fig.

• Le bloc contient de la RAM pour créer des


fonctions logiques combinatoires arbitraires,
également appelées table de transcodage
combinatoire (LUT)

• Il contient également des bascules pour les éléments


de stockage cadencés, ainsi que des multiplexeurs
afin d'acheminer la logique dans le bloc et vers et
depuis des ressources externes. Les multiplexeurs
permettent également la sélection de polarité et la
réinitialisation et la sélection d'entrée claire.
AYAT YASSINE 38
Structure des IOB (INPUT/OUTPUT BLOCKS)
• Les Ports d’entrées/sortie des circuits FPGA sont totalement programmables, et :
• Le seuil d’entrée est soit TTL ou CMOS.
• Le slew-rate est programmable (La vitesse de balayage ou Slew rate représente la vitesse de
variation maximale que peut reproduire un amplificateur).
• Le buffer de sortie est programmable en haute impédance
• Les entrées et sorties sont directes ou mémorisées
• L’inverseur est aussi programmable.

AYAT YASSINE 39
LES INTERCONNEXIONS PROGRAMMABLES
DANS LES FPGA
CLB exécute l'opération logique donnée
au module. L'interconnexion entre les
blocs CLB et I/O est réalisée à l'aide de
canaux de routage horizontaux, de canaux
de routage verticaux et de PSM
(multiplexeurs programmables).
Canaux de routage Les canaux de routage
sont présentés soit sous formes de 8 pour
les interconnexions en matrices soit sous
forme de doublé pour les interconnexions
directes soit sous forme de 3 pour les
grandes lignes comme le montre la figure
AYAT YASSINE
suivante 40
VHDL : VHSIC HARDWARE DESCRIPTION
LANGUAGE
Le programme VHSIC ( Very High Speed Integrated Circuits), impulsé par le département de la défense des
Etats-Unis dans les années 1970-1980, a donné naissance à un langage : VHSICHDL, connu sous le nom de
VHDL .
Le langage de description VHDL est ensuite devenu une norme IEEE en 1987. Révisée en 1993 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 PLD, CPLD et FPGA,
 Concevoir des modèles de simulations numériques ou des bancs de tests.

AYAT YASSINE 41
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).
• 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)
AYAT YASSINE 42
STRUCTURE D’UNE
DESCRIPTION
VHDL SIMPLE.

• Une description VHDL est


composée de 2 parties
indissociables à savoir :
• L’entité (ENTITY), elle définit les
entrées et sorties.
• L’architecture (ARCHITECTURE),
elle contient les instructions VHDL
permettant de réaliser le
fonctionnement attendu.

AYAT YASSINE 43
DÉCLARATION DES BIBLIOTHÈQUES
• Toute description VHDL utilisée pour la synthèse a besoin de bibliothèques.
L’IEEE (Institut of Electrical and Electronics Engineers) les a normalisées et
plus particulièrement la bibliothèque IEEE1164. Elles contiennent les
définitions des types de signaux électroniques, des fonctions et sous
programmes permettant de réaliser des opérations arithmétiques et
Library ieee;
logiques,...
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
-- cette dernière bibliothèque est souvent utilisée pour l’écriture de
compteurs
La directive Use permet de sélectionner les bibliothèques à utiliser.
AYAT YASSINE 44
DÉCLARATION DE L’ENTITÉ ET DES
ENTRÉES / SORTIES (I/O).
• Elle permet de définir le NOM de la description VHDL ainsi que les entrées
et sorties utilisées, l’instruction qui les définit c’est port :

Remarque : Après la
dernière définition de
signal de l’instruction
port il ne faut jamais
mettre de point virgule.

AYAT YASSINE 45
L’INSTRUCTION PORT

• Syntaxe: NOM_DU_SIGNAL : sens type; 1110

Exemple: A3 A2 A1 A0
2^3 2^2 2^1 2^0
CLOCK: in std_logic;
MSB: 1
BUS : out std_logic_vector (3 downto 0); LSB
On doit définir pour chaque signal : le NOM_DU_SIGNAL, le sens et le type.

AYAT YASSINE 46
LE NOM_DU_SIGNAL.
• Il est composé de caractères, le premier caractère doit être une lettre, sa
longueur est quelconque, mais elle ne doit pas dépasser une ligne de code.
VHDL n’est pas sensible à la « casse », c’est à dire qu’il ne fait pas la
distinction entre les majuscules et les minuscules

LE SENS DU SIGNAL

- in : pour un signal en entrée.


- out : pour un signal en sortie.
- inout : pour un signal en entrée sortie
- buffer : pour un signal en sortie mais utilisé comme entrée dans la description.

AYAT YASSINE 47
LE TYPE.
• Le TYPE utilisé pour les signaux d’entrées / sorties est :
• le std_logic pour un signal.
• le std_logic_vector pour un bus composé de plusieurs signaux
Par exemple un bus bidirectionnel de 5 bits s’écrira :
LATCH : inout std_logic_vector (4 downto 0) ;
Où LATCH(4) correspond au MSB et LATCH(0) correspond au LSB.

Les valeurs que peuvent prendre un signal de type std_logic sont :


- ‘0’ ou ‘L’ : pour un niveau bas.
- ‘1’ ou ‘H’ : pour un niveau haut.
- ‘Z’ : pour état haute impédance.
- ‘-‘ : Quelconque, c’est à dire n’importe quelle valeur.
AYAT YASSINE 48
EXEMPLES DE DESCRIPTION D’ENTITÉS:

AYAT YASSINE 49
DÉCLARATION DE L’ARCHITECTURE
CORRESPONDANTE À L’ENTITÉ : DESCRIPTION
DU FONCTIONNEMENT.
• L’architecture décrit le fonctionnement souhaité pour un circuit ou
une partie du circuit.
• En effet le fonctionnement d’un circuit est généralement décrit par
plusieurs modules VHDL. Il faut comprendre par module le couple
ENTITE/ARCHITECTURE. Dans le cas de simples PLDs on
trouve souvent un seul module.
• L’architecture établit à travers les instructions les relations entre les
entrées et les sorties. On peut avoir un fonctionnement purement
combinatoire, séquentiel voire les deux séquentiel et combinatoire.

AYAT YASSINE 50
Les opérateurs
L’affectation simple : <=
Dans une description VHDL, c’est certainement l’opérateur le plus utilisé. En effet il permet de modifier
l’état d’un signal en fonction d’autres signaux et/ou d’autres opérateurs.
Exemple avec des portes logiques : S1 <= E2 and E1 ;
Les valeurs numériques que l’on peut affecter à un signal sont les suivantes :
Les bases numériques utilisées pour les bus peuvent ê
- ‘1’ ou ‘H’ pour un niveau haut avec un signal de 1 bit.
BINAIRE, exemple : BUS <= "1001" ; -- BUS = 9 en
- ‘0’ ou ‘L’ pour un niveau bas avec un signal de 1 bit. HEXA, exemple : BUS <= X"9" ;
-- BUS = 9 en décimal OCTAL,
- ‘Z’ pour un état haute impédance avec un signal de 1 bit.
exemple :
- ‘-’ pour un état quelconque, c’est à dire ‘0’ ou ‘1’. BUS <= O"11" ; -- BUS = 9 en décimal
- Cette valeur est très utilisée avec les instructions : when … else et with …. Select ….
- Pour les signaux composés de plusieurs bits on utilise les guillemets " … " ,
- voir les exemples ci dessous : - Les bases numériques utilisées pour les b
AYAT YASSINE 51
• Opérateur de concaténation : &.
• Cet opérateur permet de joindre des
signaux entre eux .
• Exemple :
-- Soit A et B de type 3 bits et S1 de type 8 bits
-- A = "001" et B ="110"
S1 <= A & B & "01" ;
-- S1 prendra la valeur suivante après cette
affectation -- S1 = "001110 01"

AYAT YASSINE 52
OPÉRATEURS ARITHMÉTIQUES.
Remarque N°1 : Pour pouvoir utiliser les opérateurs ci-
dessus il faut rajouter les bibliothèques suivantes au
début du fichier VHDL:
Use ieee.numeric_std.all ;
Use ieee.std_logic_arith.all ;

Exemples :
S1 <= A – 3 ; -- S1 = A – 3 -- On soustrait 3 à la valeur de l’entrée / signal A
S1 <= S1 + 1 ; -- On incrémente de 1 le signal S1

Remarque N°2 : Attention l’utilisation de S1 <= A * B ;-- S1 = A multiplié par B : A et B sont codés sur 4
ces opérateurs avec des signaux comportant bits S2 <= A / B ;-- S2 = A divisé par B : A et B sont codés sur 4
un nombre de bits important peut générer de bits
grandes structures électroniques.

AYAT YASSINE 53
OPÉRATEURS RELATIONNELS.
Ils permettent de modifier l’état d’un signal ou de signaux suivant le résultat
d’un test ou d’une condition. En logique combinatoire ils sont souvent utilisés
avec les instructions :
- when … else …
- - with …. Select …. Voir ci-dessous.

AYAT YASSINE 54
LES INSTRUCTIONS DU MODE « CONCURRENT ».
• Affectation conditionnelle : Cette instruction modifie l’état d’un signal
suivant le résultat d’une condition logique entre un ou des signaux, valeurs,
constantes. SIGNAL <= expression when condition
[else expression when condition]
[else expression];
Remarque : l’instruction [else expression] if <condition> then
n’est pas obligatoire mais elle fortement elsif <condition> then
conseillée, elle permet de définir la valeur du else
SIGNAL dans le cas où la condition n’est end if;
pas remplie.
Exemple N°1 :

-- S1 prend la valeur de E2 quand E1=’1’ sinon S1 prend la -- valeur ‘0’

S1 <= E2 when ( E1= ‘1’) else ‘0’;

AYAT YASSINE 55
• Exemple N°2 :
-- Structure évoluée d’un multiplexeur 4 vers 1
S2 <= E1 when (SEL="00" ) else
E2 when (SEL="01" ) else
E3 when (SEL="10" ) else
E4 when (SEL="11" )
else ‘0’;
AYAT YASSINE 56
AFFECTATION SÉLECTIVE :
• Cette instruction permet d’affecter différentes valeurs à un signal, selon les
valeurs prises par un signal dit de sélection.
with SIGNAL_DE_SELECTION select
SIGNAL <= expression when valeur_de_selection,
[expression when valeur_de_selection,]
[expression when others];

Remarque: l’instruction [expression when others] n’est pas obligatoire mais fortement
conseillée, elle permet de définir la valeur du SIGNAL dans le cas où la condition n’est pas
remplie.
Exemple N°1 :
-- Multiplexeur 4 vers 1
with SEL select
S2 <= E1 when "00",
E2 when "01",
E3 when "10",
E4 when "11",
AYAT YASSINE '0' when others; 57
LES INSTRUCTIONS DU MODE SÉQUENTIEL
• Définition d’un PROCESS.
Un process est une partie de la description d’un circuit dans laquelle les instructions sont
exécutées séquentiellement c’est à dire les unes à la suite des autres.
Il permet d’effectuer des opérations sur les signaux en utilisant les instructions standard de la
programmation structurée comme dans les systèmes à microprocesseurs. L’exécution d’un
process est déclenchée par un ou des changements d’états de signaux logiques.
Le nom de ces signaux est défini dans la liste de sensibilité lors de la déclaration du process.

[Nom_du_proces:]process(Liste_de_sensibilité_nom_des_signaux)
Begin
-- instructions du process
end process [Nom_du_process] ;

Remarque: Le nom du process entre crochet est facultatif, mais


il peut être très utile pour repérer un process parmi d’autres lors
AYAT YASSINE de simulations. 58
RÈGLES DE FONCTIONNEMENT D’UN
PROCESS :

1) L’exécution d’un process a lieu à chaque changement d’état d’un signal de la liste
de sensibilité.
2) Les instructions du process s’exécutent séquentiellement.
3) Les changements d’état des signaux par les instructions du process sont pris en
compte à la fin du process.

AYAT YASSINE 59
LES DEUX PRINCIPALES STRUCTURES
UTILISÉES DANS UN PROCESS.

Remarque: ne pas confondre


=> (implique) et <= (affecte).

AYAT YASSINE 60
EXEMPLES DE PROCESS : EXEMPLE N°1 :
Déclaration d’une bascule D. Commentaires
- Seul le signal CLK fait partie de la liste de
Library ieee;
Use ieee.std_logic_1164.all; sensibilité. D’après les règles de fonctionnement
Use ieee.numeric_std.all; énoncées précédemment, seul un changement
Use ieee.std_logic_unsigned.all; d’état du signal CLK va déclencher le process et
-- par conséquent évaluer les instructions de celui-
entity BASCULED is ci.
- L’instruction if (CLK'event and CLK='1') then
port ( D,CLK : in std_logic;
S : out std_logic); permet de détecter un front montant du signal
end BASCULED; CLK. La détection de front est réalisée par
-- l’attribut event appliqué à l’horloge CLK. Si on
architecture DESCRIPTION of BASCULED is veut un déclenchement sur un front descendant,
begin il faut écrire l’instruction suivante : if
PRO_BASCULED : process (CLK) (CLK'event and CLK='0'). - Les bibliothèques
begin IEEE possèdent deux instructions permettant de
if (CLK'event and CLK ='1') then détecter les fronts montants ) rising_edge(CLK)
S <= D; ou descendants falling_edge(CLK).
- - Si la condition est remplie alors le signal de
end if;
end process PRO_BASCULED; sortie S sera affecté avec la valeur du signal
endAYAT YASSINE
DESCRIPTION; d’entrée D. 61
VARIABLES – EXEMPLE VHDL
• Les variables en VHDL agissent de la même manière que les variables en C.
Leur valeur est valide à l'emplacement exact dans le code où la variable est
modifiée.
Règles de Variables : VAR_CASE : process (i_clk)
•Les variables ne peuvent être utilisées qu'à   variable v_Choices :
l'intérieur des processus std_logic_vector(1 downto 0);
•Toute variable créée dans un processus ne begin
peut pas être utilisée dans un autre  
processus   v_Choices := i_select_1 & i_select_2;
•Les variables doivent être définies après -- concatenation
le process  mais avant le begin    
•Les variables sont affectées à l'aide   case v_Choices is
du symbole d'affectation :=     when "00" =>
•Les variables affectées prennent       o_data <= "0001"; when "01" =>
immédiatement la valeur de l'affectation       o_data <= "0010";
  -- ETC
AYAT YASSINE 62
SIGNALS VS. VARIABLES:

• Les variables ne peuvent être utilisées qu'à l'intérieur des processus, les
signaux peuvent être utilisés à l'intérieur ou à l'extérieur des processus.
• Les variables sont affectées à l'aide du symbole d'affectation := . Les
signaux sont affectés à l'aide du symbole d'affectation <= .
• Les variables affectées prennent immédiatement la valeur de
l'affectation. Les signaux dépendent s'il s'agit d'un code combinatoire ou
séquentiel pour savoir quand le signal prend la valeur de l'affectation.

AYAT YASSINE 63
INSTRUCTION SELECT – EXEMPLE VHDL
• Les instructions select sont utilisées pour assigner des signaux
with a select b <=
en VHDL. Ils ne peuvent être utilisés que dans du code "1000" when "00",
combinatoire en dehors d'un processus . Une affectation de "0100" when "01",
signal sélectionnée est une manière claire d'affecter un signal "0010" when "10",
en fonction d'une liste spécifique de combinaisons pour un "0001" when "11";
signal d'entrée. 

AYAT YASSINE 64
WHEN / ELSE ASSIGNMENT 
La construction d'une affectation de signal conditionnelle est un peu plus générale.
Pour chaque option, vous devez donner une condition. Cela signifie que vous pouvez écrire n'importe quelle
expression booléenne comme condition, ce qui vous donne plus de liberté que la vérification de l'égalité.
Bien que cette construction vous donne plus de liberté, il y a aussi un peu plus de redondance.
Nous avons dû écrire le contrôle d'égalité ( a =) sur chaque ligne. Si vous utilisez un signal avec un nom
long, cela rendra votre code plus volumineux. De plus, le séparateur utilisé dans l'affectation du signal
sélectionné était une virgule. Dans l'affectation conditionnelle du signal, vous avez besoin du mot- elseclé.
Plus de code pour la même fonctionnalité. Nom officiel de cette affectation VHDL quand/sinon est
l'affectation conditionnelle du signal

b <= "1000" when a = "00"


else "0100" when a = "01"
else "0010" when a = "10"
else "0001" when a = "11";
AYAT YASSINE 65

Vous aimerez peut-être aussi