Vous êtes sur la page 1sur 138

1

Informatique industrielle
Synthèse VHDL et composants programmables

Pr. Mohamed Hamlich


Sige.ensam@gmail.com

ENSAM- Casablanca

Pr. Mohamed Hamlich


Introduction aux systèmes embarqué
Méthodologie de conception : Nécessité & Objectifs

 Nécessité d’une méthodologie


 Systèmes de grande complexité à intégrer
 Capacité d’intégration croissante
 Espace de recherche de solutions extrêmement vaste
 Temps de conception de plus en plus court (Pb de Time-to-Market)
 Objectifs
 Favoriser l’exploration de l’espace architectural
 Limiter les erreurs de conception (sûreté de fonctionnement)
 Utiliser les outils de CAO pour les tâches répétitives et laborieuses
 Rester indépendant le plus longtemps possible vis à vis de la technologie
 Prendre en compte les contraintes matérielles au plus tôt
Méthodologie de conception : Niveaux d’abstraction
Type Eléments de base Conception
Conception électrique
Composa
nts 1 2
Optimisation des caractéristiques
discrets électriques
1 2

Conception logique
SSI
Small Optimisation des équations logiques
Scale 2
2 2
Integratio 1 1 1
n
3 3 3

Conception numérique
MSI
Middle Full Optimisation des traitements
Registre Mux
Scale Adder
Integratio
n

Conception architecturale
LSI
Large UAL
Choix des fonctionnalités
Séquenceur
Scale
Integratio
n

Conception fonctionnelle
VLSI
Very Optimisation des implémentations
Large Asic matérielles et logicielles
Scale E/S P E Fpga SE S
Integratio
n
3) Le temps réel...

 Définition générale (CNRS 1988) :


 Peut être qualifiée de "temps-réel" (ou "temps contraint", ou encore "réactif")
toute application mettant en œuvre un système informatique dont le
fonctionnement est assujetti à l'évolution dynamique de l'environnement qui lui est
connecté et dont il doit contrôler le comportement. Exemple : le système de contrôle
des gouvernes d'un avion
rythme de l'interaction

données
Environnement
Système mesures
(ex : une chaîne de
informatique événements production, une
réaction chimique…)

temps de réponse imposé par la commandes


dynamique de l'environnement
 95% des microprocesseurs produits aujourd’hui sont utilisés
dans des systèmes embarqués tels que avions, trains,
voitures, appareils électroménagers, téléphones portables
et autres appareils de notre vie quotidienne. Une
défaillance de leur fonctionnement peut avoir des
conséquences graves. D’où le défi que posent à
l’informatique ces technologies «critiques».
 «Les systèmes embarqués doivent satisfaire non seulement
des exigences fonctionnelles concernant la correction du
calcul mais également des exigences extra-fonctionnelles.
Ces dernières portent sur l’utilisation optimale des ressources
(temps de calcul, mémoire, énergie) ainsi que sur
l’autonomie, la réactivité et la robustesse du système.»
Introduction aux systèmes embarqués
Système

Introduction et définitions : Système temps réel

Environnement

Restitution et
Acquisition Traitement
commande

Système « temps réel »

Système en interaction avec un environnement externe variable en fonction


du temps. Le système exécute des fonctions spécifiques et limitées .Le
système doit être exact logiquement (sorties en adéquation avec les
entrées),et exact temporellement (contraintes temporelles respectées)
19L
Système

Composants des système embarqués


20

• Composants hardware :
• Processeurs RISC CISC
• DSP
• FPGA
• Periph de communication, afficheurs, interfaces

• Software :
• système d’exploitation embarqué
• Logiciels spécifique, compilateur, interpreteurs.
Système

Architecture de processeur de Von Neuman

Le processeur et la mémoires sont connectés par bus.


La mémoire contient les instructions et les données.
La vitesse de calcul de l’ensemble est limitée par la mémoire qui est lente.

21
Système

Architecture de processeur Harvard

Les mémoires instruction et données sont séparées.


Le processeur peut accéder en même temps dans les deux plans mémoire.

22
RISC versus SISC

Caractéristique des architectures CISC et RISC

Caractéristiques RISC CISC

Nombre d'instructions <100 >200


Nombre de modes d'adressage 1à2 5 à 20

Nombre de formats d'instructions 1à2 3+

Nombre cycles/instruction #1 3 à 10

Accès à la mémoire load/store La plupart des instructions

Nombre de registres 32+ 2 à 16

Réalisation du microprocesseur câblé microprogrammé

23
Circuits logiques programmables

ASIC

CUSTOM SEMI-CUSTOM

Circuits Circuits Circuits Circuits


sur mesure précaractérisés prédiffusés configurables

Full Standard Sea of Gate


FPGA CPLD PAL
Custom ASIC cell
gate array

SRAM Antifuse
ASIC : Application Specific Integrated Circuit
FPGA : Field Programmable Gate Array
PLD
CPLD : Complex Programmable Logic Device
PAL : Programmable Array Logic
GAL : Generic Array Logic = PAL
SRAM : Static Random Access Memory
Les différentes familles de circuits logiques programmables
1) Quelques définitions

 EEPROM ou E2PROM (Electrical Erasable Programmable Read-Only Memory)


:Mémoire programmable à lecture seule, effaçable électriquement.
 EPLD (Erasable Programmable Logic Device):Circuits logiques
reprogrammables.
 FPGA (Field Programmable Gate Array):Réseau de portes programmables
 GAL (Generic Array Logic):Circuits logiques PAL reprogrammables à
technologie CMOS.
 ISP (In System Programmable):Circuit que l’on peut programmer (et donc
effacer) même lorsqu’il est en place sur l’application.
 PAL (Programmable Array Logic):Circuits logiques programmables dans
lesquels seules les fonctions ET sont programmables, les fonctions OU ne le
sont pas.
 PLD (Programmable Logic Device):Famille des circuits programmables qui
comprend les PAL,GAL,EPLD et FPGA.
Les différentes familles de PLD

TYPE Nombre de portes Matrice ET Matrice OU Effaçable


intégrées

PROM 2 000 à 500 000 Fixe Programmabl Non


e

PAL 10 à 100 Programmabl Fixe Non


e

GAL 10 à 100 Programmabl Fixe Electriquement


e

EPLD 100 à 3000 Programmabl Fixe Aux U-V


e Electriquement

FPGA 3000 à 6.000.000 Programmabl Programmabl Electriquement


e e
Les PAL

 L’invention des PAL date d’une vingtaine d’année, ce


sont les ingénieurs de la société MMI rachetée par
AMD qui ont eut l’idée d’utiliser la technologie des
fusibles.
 Ce sont des composants programmables une seule
fois.
Structure de base d’un PLD

•Ils possèdent des


b a
matrices « ET »
1 1 1 1

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).
>1 >1

•Cette opération est bien Q0 Q1

sûr effectuée en utilisant


Structure de base avec les normes des
constructeurs
.

b a b a

: Fusible intact : Fusible intact

Q0 Q1 Q0  a. b  a. b Q0 Q1 Q1  a.b  a.b
Q0  Q1  a.b.a.b  a.b.a.b  a.b.a.b  a.b.a.b  0

PLD ayant ses fusibles intacts PLD


programmé
Configuration des entrées/sorties

•Certaines broches de
ces circuits peuvent être
utilisées aussi bien en Porte trois états permettant
entrée qu’en sortie grâce de déconnecter la broche
de la matrice "ET"
à un système de logique
3 états. I/O

•La commande de cette


dernière est configurée
au moment de la
programmation.

•La structure de sortie


permet aussi de
réinjecter les sorties en
REFERENCE DES PAL

Les diverses possibilités de ces circuits et leur standardisation ont conduit les
constructeurs à définir une nomenclature permettant de décoder assez facilement la
référence des PALs.
PAL : PAL
Lettre(s) Code(s) Structure de sortie
(CE) : CE pour version CMOS
XX : Nombre d’entrées
AB : Structure de sortie L Combinatoire active bas

YY : Nombre de sorties
H Combinatoire active haut
C : Consommation
ZZ : Vitesse C Combinatoire complémentaire
DEF : Type de boîtier
R Registre synchrone (D)

RA Registre asynchrone

X Registre OU exclusif

V Versatile
Remarques :
· Le nombre d’entrées varie entre 10 et 22.
· Le nombre de sorties varie entre 1 et 10.
· La puissance est indiquée par une lettre code.
· La vitesse indique le temps de propagation en nS.
· Les versions versatiles ont une cellule de sortie
programmable permettant d’obtenir n’importe quel autre type
de structure de sortie (L, H, R ...).
· Les versions CMOS (CE) sont effaçables électriquement.
Les fusibles sont remplacés par des transistors de type MOS
FET. Ce ne sont ni plus ni moins que des « GALs ».

Exemple : PAL 16 L 8 H 15 PC
PAL : PAL
: Nombre d’entrées :
: Structure de sortie :
: Nombre de sorties :
: Consommation :
: Vitesse :
: Type de boîtier :
Structures de base des PAL
Brochage du PAL Brochage du PAL
16R6 - 16L6 -
PAL22V10 : Sortie (VERSATILE)
PAL22V10

ZOOM Complet
b) Les GAL

 Les GAL sont des PAL à technologie CMOS, c’est à


dire programmables et surtout effaçables
électriquement.
 On retrouve les mêmes références qu’en PAL.
 Protection contre la duplication.
 Les GAL sont dotés d’un bit de sécurité qui peut
être activé lors de la programmation empêchant
ainsi toute lecture du contenu du circuit. Ce bit est
remis à zéro seulement en effaçant complètement
le GAL.
 Il est constitué d’un ensemble de huit octets, appelé
signature électronique, pouvant contenir des
informations diverses sur le produit.
c) Les EPLD

Généralités
 L’introduction des EPLD telle que l’a voulue ALTERA
visait deux buts :

 Densité d’intégration supérieure aux PAL

 Fonctionner à une vitesse au moins égale aux PAL


bipolaires
EPLD : Description Fonctionnelle

Les EPLD de la famille MAX possèdent une architecture


comportant les éléments suivants :
 Logic array blocks (LABs)

 Macrocellules

 Réseau d’interconnections Programmables (PIA)

 I/O control blocks

Les séries MAX incluent des entrées dédiées telles que


des (horloges,clear,..) pour chaque macrocellule.
Exemple de EPLD : le MACH 4

Le MACH 4 est un EPLD


programmable in situ (ISP)
par l'intermédiaire d'un bus
J-TAG.
Il dispose de 32 entrées /
sortie, de matrices « ET »
programmables, de matrices
"OU" fixes, d'une matrice
centrale d'interconnexion,
d'une circuiterie d'horloge et
de 32 ou 64 macrocellules.
L'architecture interne du
MACH 4-32/32 est
équivalente à 4 PALCE 22V10
interconnectés.
d) LES FPGA (field programmable gate arrays)

L'architecture, retenue par Xilinx, se présente sous


forme de deux couches :

 une couche appelée circuit configurable,


 une couche réseau mémoire SRAM.
LES FPGA

 La couche dite 'circuit configurable' est constituée d'une matrice de


blocs logiques configurables CLB permettant de réaliser des fonctions
combinatoires et des fonctions séquentielles.
 Tout autour de ces blocs logiques configurables, nous trouvons des blocs
entrées/sorties IOB dont le rôle est de gérer les entrées-sorties
réalisant l'interface avec les modules extérieurs . La programmation du
circuit FPGA appelé aussi LCA (logic cells arrays) consistera par le
biais de l'application d'un potentiel adéquat sur la grille de certains
transistors à effet de champ à interconnecter les éléments des CLB et
des IOB afin de réaliser les fonctions souhaitées et d'assurer la
propagation des signaux.
 Ces potentiels sont mémorisés dans le réseau mémoire SRAM.
Les composants logiques programmables :

Architectures globales

Figure 1 : Structure of a CPLD


Les MACROCELL = P-TERM
(PAL-Like)
Architecture îlots de calculs

Élément configurable :
• élément logique
• élément de mémorisation
EC • élément arithmétique
• entrée/sortie

Réseau de routage :
• lignes horizontales
• lignes verticales

Matrice de connexions

BC MC
Bloc de connexions
Architecture hiérarchique
Architecture hiérarchique

Réseau de routage de
niveau 2

Élément Hiérarchique de
niveau 2

Réseau de routage de Réseau de routage de


niveau 1 niveau 3

Élément Hiérarchique de Élément Hiérarchique de


niveau 1 niveau 3
• éléments logiques
• éléments de mémorisation
• ...
Architecture logarithmique

Architecture hiérarchique dans laquelle chaque


niveau i correspond à une matrice de 42i cellules de
bases.
Chacun de ces niveaux possède des ressources de
longueur 42i-1.

Exemple typique: le circuit Xc6200 de Xilinx


Architecture logarithmique

Cellule logique
Cell Cell Cell Cell de base Cell Cell Cell Cell

Cell Cell Cell Cell Cell Cell Cell Cell


Matrice de 16
cellules
Cell Cell Cell Cell Cell Cell Cell Cell

Lignes de
Cell Cell Cell Cell longueur Cell Cell Cell Cell
4 cellules

4*4 4*4 4*4 4*4 16*16 16*16 16*16 16*16


Lignes de
longueur
4*4 4*4 4*4 4*4 16 cellules 16*16 16*16 16*16 16*16

4*4 4*4 4*4 4*4 16*16 16*16 16*16 16*16

Lignes de
4*4 4*4 4*4 4*4 longueur 16*16 16*16 16*16 16*16
64 cellules
Les éléments logiques

Les éléments logiques configurables sont les


briques de bases de tous les FPGA, ils sont
majoritairement réalisés autour de LUT, Look Up
Table, de chaîne de propagation rapide de la retenue
et de bascule D.

On rencontre toutefois des cellules logiques


rudimentaires à base de multiplexeurs
Les Look Up Tables

Ce sont de petits éléments de mémorisation, qui


reflètent la table de vérité d’une fonction logique.
In 0 In 1 In 2 In 3
LUT = Table de scrutation
LUT 4 entrées = RAM 2octets
SRAM

SRAM

In 0
SRAM
In 1
LUT 4 Out
In 2 SRAM
In 3
SRAM

SRAM
Out
Les Look Up Tables

In 0 In 1 In 2 In 3

1111 0

1110 1

1101 1

1100 0

1011 0

1010 1
Out
Les Look Up Tables

In 0 = 0 In 1 In 2 In 3

1111 0

1110 1

1101 1

1100 0

1011 0

1010 1
Out
Les Look Up Tables

In 0 =0 In 1 In 2 In 3

1111 0

1110 1

1101 1

1100 0

1011 0

1010 1
Out
Les Look Up Tables

In 0 =0 In 1 = 1 In 2 In 3

1111 0

1110 1

1101 1

1100 0

1011 0

1010 1
Out
Les Look Up Tables

In 0 =0 In 1 = 1 In 2 In 3

1111 0

1110 1

1101 1

1100 0

1011 0

1010 1
Out
Les Look Up Tables

In 0 =0 In 1 = 1 In 2 =1 In 3 = 1

1111 0

1110 1

1101 1

1100 0

1011 0

1010 1 Out= 1 = In3 • In2 • In1 • Ino


Les cœurs de processeurs

Aujourd’hui les systèmes numériques font de plus


en plus appel conjointement à des ressources
logicielles micro-programmées (µP, µC, DSP) et des
ressources matérielles re-configurables (FPGA)
D’où l’idée de mettre sur un même puce un cœur de
microprocesseur et un cœur de logique configurable,
les deux étant optimisés technologiquement

Le cœur de processeur peut prendre environ 10% de


la surface totale de la puce
FPGA : Principaux fabriquants

•XILINX
• ACTEL
• ALTERA
• LATTICE VANTIS
• CYPRESS
• AMD

57
FPGA Composants

58
Software

Système d’exploitation embarqué


59

 Le système d’exploitation fait le lien entre le logiciel et le matériel . Il permet


d’accéder aux ressources, de gérer les fichiers et d’effectuer des tests
 Un système d'exploitation temps réel, en anglais RTOS pour real-time operating
system est un système d'exploitation multitâche destiné aux applications temps réel.
Ces applications comprennent les systèmes embarqués (thermostats
programmables, contrôleurs électroménagers, téléphones mobiles), des robots
industriels, les vaisseaux spatiaux, les systèmes de contrôle commande industriel, et
le matériel de recherche scientifique.

 Un RTOS facilite la création d'un système temps réel, mais ne garantit pas que le
résultat final, respecte les contraintes temps réel, ce qui exige le développement
correct du logiciel. Un RTOS n'a pas nécessairement pour but d'être performant et
rapide, mais un RTOS fournit des services et des primitives qui, si elles sont utilisées
correctement, peuvent garantir les délais souhaités.

 Un RTOS utilise des ordonnanceurs spécialisées afin de fournir aux développeurs


des systèmes temps réel les outils et les primitives nécessaires pour produire un
comportement temps réel souhaité dans le système final.
LES MACHINES SYNCHRONES À NOMBRE FINIS D’ÉTATS
 Une machine à états (M.A.E.) en anglais Finite State
Machine (F.S.M.) est un système dynamique, qui peut se
trouver, à chaque instant, dans une position parmi un
nombre fini de positions possibles. Elle parcourt des cycles,
en changeant éventuellement d’état lors des transitions
actives de l’horloge.
 L’architecture générale d’une machine à état est présentée
ci-dessous.
HORLOGE, REGISTRE D’ÉTAT ET TRANSITIONS

 Le registre d’état, piloté par son horloge, constitue le coeur


d’une machine à états.Les autres blocs fonctionnels sont à
son service.
 Il est constitué de n bascules synchrones. Son contenu
représente l’état actuel de la machine. Il s’agit d’un
nombre codé en binaire sur n bits. L’entrée du registre
d’état constitue l’état futur, celui qui sera chargé lors de la
prochaine transition active de l’horloge. Le registre d’état
est la mémoire de la machine.
 La taille du registre d’état fixe le nombre d’états
accessibles. Si n est le nombre de bascules, le nombre
d’états N = 2^n .

 Le rôle de l’horloge est de fixer les instants où les


transitions entre états sont prises en compte. Entre deux
fronts consécutifs de l’horloge, la machine est figée en
position mémoire.
LES DIFFÉRENTES ARCHITECTURES

 La figure 2 présente l’architecture générale d’une machine


à états. Suivant la façon dont les sorties dépendent des
états et des commandes, on distingue deux types de
machines à états : les machines de Moore et les machines
de Mealy.
 Dans les premières les sorties ne dépendent que de l’état
actuel (la liaison en trait interrompue est absente),
 pour les secondes les sorties dépendent de l’état actuel et
des entrées (la liaison en trait
 interrompu est présente).
LE DIAGRAMME DE TRANSITION

 On associe à chaque valeur possible du registre d’état, une case.


 L’évolution du système est représentée par des flèches
représentant les transitions.
 Pour qu’une transition soit activée il faut que les trois conditions
suivantes soient vérifiées :
 1. Le système se trouve dans l’état «source » considéré
 2. La condition de réalisation sur les entrées est vraie
 3. Un front actif de l’horloge survient
 Pour les machines de Moore les sorties évoluent après
l’activation de la transition.
 Les valeurs des sorties seront représentées dans les cases du
diagramme.
 Pour les machines de Mealy les sorties évoluent après
l’évolution des entrées.
 Les valeurs des sorties seront représentées sur les flèches
du diagramme.
EXEMPLES
SYNTHÈSE D’UN SÉQUENCEUR

On désire réaliser une fonction dont la sortie S recopie


l’état logique présent sur son entrée E si celle-ci est
restée stable après 2 coups d’horloge successifs.
 L’entrée RAZ a été rajoutée afin que l’état initial du
système soit défini. De façon plus générale, un système
séquentiel doit toujours être initialisé, de plus cette
initialisation doit être asynchrone.
TRACÉ DES CHRONOGRAMMES
REPRÉSENTATION DU DIAGRAMME DE TRANSITION
2) L'approche Synchrone
 Notion fondamentale : Événements au lieu de temps.

 Au lieu de: On se voie dans une heure et dix minutes,

 On se voie dans dix kilomètres et une douche.

 L'hypothèse synchrone:

 Tous les calculs sont finis avant qu'un nouveau flot de

données arrive
 Cela peut être vu au niveau du modèle comme

 Les calculs sont instantanés

 Approche utilisée dans plusieurs langages.


3) Les langages Synchrones : principes généraux

- LUSTRE pour la programmation de processus opérant


majoritairement sur des flots semi-continus

 ESTEREL pour la programmation de processus opérant


majoritairement sur des événements

 SIGNAL pour la programmation de processus opérant


majoritairement sur des flots semi-continus
 VHDL langage de description de matériel, de simulation et
conception des architectures
4) VHDL :
LE LANGAGE DE DESCRIPTION DES CIRCUITS
NUMÉRIQUES COMPLEXES

VHDL signifie VHSIC (Very High Speed Integrated Circuit)


Hardware Description Language.
- C'est un langage de description des systèmes à très grande
vitesse de conception
- Un langage moderne, lisible, puissant et général mais
complexe
- Une norme de l’IEEE (Institute of Electrical and Electronics
Engineers)
- Un standard reconnu par tous les vendeurs d’outils CAO et
par le département de la défense américaine (DOD)
INTERET DE VHDL POUR LA CONCEPTION

 Le langage de description de matériel VHDL sert à faire:


 - de la spécification (description et simulation) de
systèmes
 - de la conception de systèmes
 Lorsque le projet est complexe, la décomposition en
entités permet de considérer séparément chaque sous-
ensemble.
 Il est à la fois possible de procéder par raffinements
successifs et par abstractions.
 La réutilisation de composants déjà conçus fait partie de
l'esprit de VHDL.
Utilisation de VHDL pour la simulation

 Le langage VHDL a été développé pour permettre les


vérifications du comportement des descriptions.
 VHDL permet une simulation plus générale que les
simulateurs propriétaires.
Utilisation de VHDL pour la synthèse

 Ainsi, il apparaît que le même langage peut servir à la


fois pour la simulation et pour la synthèse. VHDL répond à
cette particularité.
 Les modèles à suivre doivent être les plus proches
possibles de l'architecture cible. Aussi faut-il éviter une
architecture trop algorithmique au sens de la
programmation pour le logiciel.
 Ainsi le style de modélisation avec VHDL dépend-il, en
plus de l'objectif visé, de la méthodologie suivie pour la
conception.
ENCAPSULAtION EN UNITES DE CONCEPTION

 Une description matérielle, qu'elle concerne une carte


électronique ou un circuit intégré, est constituée d'un
ensemble de modèles et d'algorithmes utilisés par ces
modèles.
 Un modèle peut être imaginé en deux parties : une vue
externe qui montre ses connexions avec les modèles les
plus simples et une vue internes qui décrit sa réalisation
sous forme d'interconnexions d'autres modèles plus simples
ou sous forme d'algorithmes.
 La vue externe se nomme entité, et sa vue interne est
appelée architecture. Une même entité peut avoir plusieurs
architectures associées.
 Ceci permet d'exprimer le plus souvent divers algorithmes
ou divers degrés de raffinement de la vue interne.
Description d’une entité : Entité (ENTITY)

 La spécification d'entité (entity): est la description d'un


système vu comme boîte noire. La syntaxe d'une
spécification d'entité est la suivante:
 entity nom_de la spécification_d_entite is
 port ( liste des entrées-sorties)
 .... ...... ....... ....... ..
 port ( )
 end nom_de la spécification_d_entite
Exemple

 l’entité d’une bascule à verrouillage se décrit comme suit :


 · Une entrée (D);
 · Une commande (CK);
 · Deux sortie (Q,QB);
Description d’une architecture

 A l'intérieur d'une architecture, le circuit est décrit sous forme


d'instructions concurrentes. Toutes ces instructions s'exécutent
de manière concurrente et communiquent entre elles par
l'intermédiaire de signaux.
 Les instructions forment un noyau puissant de description de
matériel, puisque le matériel est fondamentalement
concurrent. Cette exécution peut être décrite comme un
ensemble de composants interconnectés (au niveau
structurel), un ensemble d'affectations de signaux (au niveau
flux de données) et un ensemble d'instructions séquentielles
(au niveau comportemental).
 ARCHITECTURE nom_de_l_architecture OF nom_de la
spécification_d_entite IS
 -----
 .... Parie déclaration
 -----
 Begin
 -----
 ..... Instruction concurentes
 -----
 end nom_de_l_architecture
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
logiques,...
 Library ieee;
 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.
 L’instruction port .
 Syntaxe: NOM_DU_SIGNAL : sens type;
 Exemple: CLOCK: in std_logic;
 BUS : out std_logic_vector (7 downto 0);
 On doit définir pour chaque signal : le NOM_DU_SIGNAL,
le sens et le type.
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.
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.
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 modulesVHDL.
 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.
 FONCTIONS LOGIQUES DE BASE
Exemples :

 -- Opérateurs logiques de base


 entity PORTES is
 port (A,B :in std_logic;
 Y1,Y2,Y3,Y4,Y5,Y6,Y7:out std_logic);
 end PORTES;
 architecture DESCRIPTION of PORTES is
 begin
 Y1 <= A and B;
 Y2 <= A or B;
 Y3 <= A xor B;
 Y4 <= not A;
 Y5 <= A nand B;
 Y6 <= A nor B;
 Y7 <= not(A xor B);
 end DESCRIPTION;
 Décodeurs 7 segments
 entity DEC7SEG4 is
 port (DEC :in std_logic_vector(3 downto 0);
 SEG:out std_logic_vector(0 downto 6));
 end DEC7SEG4;

 architecture DESCRIPTION of DEC7SEG4 is


 begin
 SEG <= "1111110" when DEC = 0
 else "0110000" when DEC = 1
 else "1101101" when DEC = 2
 else "1111001" when DEC = 3
 else "0110011" when DEC = 4
 else "1011011" when DEC = 5
 else "1011111" when DEC = 6
 else "1110000" when DEC = 7
 else "1111111" when DEC = 8
 else "1111011" when DEC = 9
 else "-------";
 end DESCRIPTION;
 Les instructions de base (mode « concurrent »), logique
combinatoire:
 Qu’est ce que le mode « concurrent » ? Pour une
description VHDL toutes les instructions sont évaluées et
affectent les signaux de sortie en même temps. L’ordre
dans lequel elles sont écrites n’a aucune importance. En
effet la description génère des structures électroniques,
c’est la grande différence entre une description VHDL et
un langage informatique classique.
 Dans un système à microprocesseur, les instructions sont
exécutées les unes à la suite des autres.
 Exemple : Pour le décodeur 1 parmi 4, l’ordre dans lequel seront
écrites les instructions n’a aucune importance.

 architecture DESCRIPTION of DECOD1_4 is


 begin
 D0 <= (not(IN1) and not(IN0)); -- première instruction
 D1 <= (not(IN1) and IN0); -- deuxième instruction
 D2 <= (IN1 and not(IN0)); -- troisième instruction
 D3 <= (IN1 and IN0); -- quatrième instruction
 end DESCRIPTION;
 L’architecture ci dessous est équivalente :
 architecture DESCRIPTION of DECOD1_4 is
 begin
 D1 <= (not(IN1) and IN0); -- deuxième instruction
 D2 <= (IN1 and not(IN0)); -- troisième instruction
 D0 <= (not(IN1) AND not(IN0)); -- première instruction
 D3 <= (IN1 AND IN0); -- quatrième instruction
 L’instruction définissant l’état de D0 à été déplacée à la
troisième ligne, la synthèse de cette architecture est
équivalente à la première.
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 :
 - ‘1’ ou ‘H’ pour un niveau haut avec un signal de 1 bit.
 - ‘0’ ou ‘L’ pour un niveau bas avec un signal de 1 bit.
 - ‘Z’ pour un état haute impédance avec un signal de 1 bit.
 - ‘-’ pour un état quelconque, c’est à dire ‘0’ ou ‘1’. 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 " … "
 - Les bases numériques utilisées pour les bus peuvent être :
 BINAIRE, exemple : BUS <= "1001" ; -- BUS = 9 en décimal
 HEXA, exemple : BUS <= X"9" ; -- BUS = 9 en décimal
 OCTAL, exemple : BUS <= O"11" ; -- BUS = 9 en décimal
 Remarque : La base décimale ne peut pas être utilisée lors de
l’affectation de signaux. On peut seulement l’utiliser avec certains
opérateurs, comme + et – pour réaliser des compteurs (voir le chapitre
sur les compteurs).
 Exemple:
 Library ieee;
 Use ieee.std_logic_1164.all;

entity AFFEC is
 port (

 E1,E2 : in std_logic;

 BUS1,BUS2,BUS3 : out std_logic_vector(3 downto 0);

 S1,S2,S3,S4 : out std_logic);

 end AFFEC;

 architecture DESCRIPTION of AFFEC is

 begin

 S1 <= '1'; -- S1 = 1

 S2 <= '0'; -- S2 = 0

 S3 <= E1; -- S3 = E1

 S4 <= '1' when (E2 ='1') else 'Z'; -- S4 = 1 si E1=1 sinon S4

 -- prend la valeur haute impédance

 BUS1 <= "1000"; -- BUS1 = "1000"

 BUS2 <= E1 & E2 & "10"; -- BUS2 = E1 & E2 & 10

 BUS3 <= x"A"; -- valeur en HEXA -> BUS3 = 10(déc)


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
 Exemples :
 S1 <= A sll 2 ; -- S1 = A décalé de 2 bits à gauche.
 S2 <= A rol 3 ; -- S2 = A avec une rotation de 3 bits à gauche

 S3 <= not (R); -- S3 = R


 Remarque : Pour réaliser des décalages logiques en synthèse
logique, il est préférable d’utiliser les instructions suivantes :
 Décalage à droite :
 -- Si A est de type std_logic_vector(7 downto 0)
 S1 <= ‘0’ & A(7 downto 1); -- décalage d’un bit à droite
 S1 <= "000" & A(7 downto 3); -- décalage de trois bits à droite
 Décalage à gauche :
 -- Si A est de type std_logic_vector(7 downto 0)
 S1 <= A(6 downto 0) & ‘0’; -- décalage d’un bit à gauche
 S1 <= A(4 downto 0) & "000"; -- décalage de trois bits à gauche
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 ces opérateurs avec des
signaux comportant un nombre de bits important peut générer de
grandes structures électroniques.
Opérateurs relationnels.
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] n’est pas obligatoire mais elle fortement
conseillée, elle permet de définir la valeur du SIGNAL dans le cas où la condition
n’est pas remplie.
 on peut mettre en cascade cette instruction voir l’exemple N°2 ci-dessous
 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’;
 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’;
 Schéma correspondant après synthèse:
 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",
 '0' when others;
 Remarque: when others est nécessaire car il faut toujours définir les autres cas du
signal de sélection pour prendre en compte toutes les valeurs possibles de celui-ci.
 Schéma correspondant après synthèse:
 En conclusion, les descriptions précédentes donnent le même schéma, ce
qui est rassurant. L’étude des deux instructions montre toute la
puissance du langage VHDL pour décrire un circuit électronique, en
effet si on avait été obligé d’écrire les équations avec des opérateurs
de base pour chaque sortie, on aurait eu les instructions suivantes :
 S2 <= (E1 and not(SEL(1)) and not(SEL(0))) or (E2 and not SEL(1) and
(SEL(0)) or (E3 and SEL(1) and not(SEL(0))) or (E4 and SEL(1) and SEL(0));
 L’équation logique ci-dessus donne aussi le même schéma, mais elle est
peu compréhensible,c’est pourquoi on préfère des descriptions de plus
haut niveau en utilisant les instructions VHDL évoluées.
Processus (process)
 Une architecture en VHDL est un ensemble de processus
exécutés en parallèle (en concurrence)
 L’ordre relatif des processus à l’intérieur d’une architecture
n’a pas d’importance
 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.
 Un process représente une zone à l’intérieur de laquelle
on peut écrire du code séquentiel pour représenter un
comportement concurrent.
 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_process :] 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 de phases de
mise au point ou de simulations.
 Il existe deux types de processus:
 • le processus implicite ou phrase concurrente
 • le processus explicite
 Un processus explicite est un ensemble de phrases
exécutées séquentiellement: à l’intérieur d’un processus
l’ordre des phrases a donc une importance
 Un processus ne peut pas être déclaré à l’intérieur d’un
autre processus
 Les phrases séquentielles d’un processus s’exécutent en boucle infinie
 L’exécution de la boucle s’arrête seulement lors d’un wait on sur une
liste de signaux: l’exécution redémarre lorsque l’un des signaux de la
liste change de valeur
 La plupart des outils de synthèse n’acceptent qu’un wait par processus,
placé au début ou à la fin du processus
 Un wait on à la fin d’un processus peut être remplacé par une liste de
sensibilité, placée juste après le mot clé process.
 La liste de sensibilité est incompatible avec un wait: c’est l’un ou l’autre
 Tout signal dont le changement de valeur a une influence
sur le processus doit apparaître dans la liste de sensibilité.
 Dans le cas contraire, la simulation pourrait donner des
résultats faux puisqu’elle ne serait pas enclenchée.
 Pour éviter des erreurs, on peut mettre dans la liste de
sensibilité tous les signaux testés ou apparaissant à droite
d’une affectation, à l’intérieur du processus
 L’évaluation des signaux à l’intérieur d’un processus se fait
séquentiellement, mais l’affectation des nouvelles valeurs
se fait au même moment: pendant le wait
Les deux principales structures utilisées dans
un process.
Exemple N°1 : Déclaration d’une bascule D.
 Library ieee;
 Use ieee.std_logic_1164.all;
 Use ieee.numeric_std.all;
 Use ieee.std_logic_unsigned.all;
 entity BASCULED is
 port (
 D,CLK : in std_logic;
 S : out std_logic);
 end BASCULED;
 architecture DESCRIPTION of BASCULED is
 begin
 PRO_BASCULED : process (CLK)
 begin
 if (CLK'event and CLK ='1') then
 S <= D;
 end if;
 end process PRO_BASCULED;
 Commentaires
 - Seul le signal CLK fait partie de la liste de sensibilité.
D’après les règles de fonctionnement énoncées
précédemment, seul un changement d’état du signal CLK va
déclencher le process et par conséquent évaluer les
instructions de celui-ci.
 - L’instruction if (CLK'event and CLK='1') then permet de
détecter un front montant du signal CLK. La détection de
front est réalisée par l’attribut event appliqué à l’horloge
CLK.
 Si on veut un déclenchement sur un front descendant, il faut
écrire l’instruction suivante : if (CLK'event and CLK='0').
 - Si la condition est remplie alors le signal de sortie S sera
affecté avec la valeur du signal d’entrée D.
 Exemple 2:
 entity toto is
 port (a: in std_logic;
 b: out std_logic);
 end toto;
 architecture basic of toto is
 signal c: std_logic;
 begin
 process (a)
 begin
 c <= a;
 if c='1'
 then b <= a;
 else b <= '0';
 end if;
 end process;

Vous aimerez peut-être aussi