Vous êtes sur la page 1sur 70

Université Hassan 1er

Faculté des Sciences et Techniques


Settat

Département: Génie mécanique et Génie Electrique

conception VHDL pour FPGA


Filière : ISESE/S4

Pr : Karim TAHIRY

Année universitaire : 2022/2023

Plan du cours
 Logique programmable

 Les Circuits logiques programmables


✓ Réseau de logique programmable - PLA
✓ Circuit PAL
✓ Circuit GAL
✓ Circuit logique programmable complexe CPLD
✓ Field Programmable Gate Array – FPGA

 Langage VHDL
✓ Eléments fondamentaux du langage VHDL
✓ La déclaration d’entité et architecture
✓ Instructions concurrentes et séquentielles
✓ Machine à états finis

 NIOS II
✓ Développement des applications

1
Les circuits intégrés à application
spécifique

ASIC : Application Specific Integrated Circuits intégrés qui ne sont pas


Circuit : normalement considérés des ASIC:

 Circuit intégré à application spécifique.  microprocesseurs et processeurs DSP;

 En général conçu sur mesure pour répondre  mémoires DRAM et SRAM;


à un besoin précis dans un produit.
 composantes logiques discrètes dans un
 Circuit très efficace en termes de puissance, boîtier: portes logiques, multiplexeurs, …
taille ou taux de traitement.
 ASSP (Application-Specific Standard
Product): circuits à usage spécifique,
comme un décodeur vidéo ou un circuit
UART.

Technologies d’ASIC: logique fixe et


logique programmable

 En logique fixe, le circuit


Technologies de circuits intégrés à application spécifique (ASIC) implémenté sur la puce est fixe
Logique fixe Logique programmable
et sa fonction ne peut pas être
Mémoire morte
modifiée.
Programmable Read Only Memory – PROM
Electrically Programmable ROM – EPROM  En logique programmable, la
Erasable EPROM – EEPROM
puce comprend des structures
Réseau de logique programmable pouvant être modifiées par
Programmable Logic Array - PLA
ASIC sur mesure
Full-custom ASIC
l’utilisateur.
Circuit PAL
ASIC à cellules normalisées Programmable Array Logic™ - PAL • Programmer des fonctions
Cell-based ASIC Circuit GAL logiques arbitraires.
Réseau pré-diffusé de portes Generic Array Logic™ - GAL • Programmer des
Gate Array Circuit logique programmable complexe interconnexions entre des blocs
Complex Programmable Logic Device – de calcul.
CPLD
Réseau prédiffusé programmable par
• Adapter les ports d’entrée et de
l’utilisateur sortie selon ses besoins.
Field-Programmable Gate Array – FPGA

2
Transistors nMOS et pMOS

 Un transistor CMOS conduit


1 0
quand des charges électriques
sont attirées dans son canal.
nMOS

 Un transistor nMOS conduit conduit ne conduit pas

quand une tension positive (‘1’ 1 0


logique) est appliquée à sa
grille de contrôle. pMOS

ne conduit pas conduit


 Un transistor pMOS conduit
quand sa grille de contrôle est
reliée à la masse (‘0’ logique).

Inverseur CMOS
 Un inverseur CMOS contient:
VCC
 un transistor pMOS relié à l’alimentation; et
 un transistor nMOS relié à la masse.

 Le signal d’entrée est appliqué à la grille des


transistors.

 Le signal de sortie est relié aux drains des A F


transistors.

 Quand A = ‘1’, le transistor nMOS conduit et la


sortie F est reliée à la masse pour un ‘0’.

 Quand A = ‘0’, le transistor pMOS conduit et la


sortie F est reliée à l’alimentation pour un ‘1’.

A F

3
Portes logiques NON-ET et NON-OU
avec transistors CMOS
VCC VCC
A B G = (A + B)’
A B B 0 0
0 1
1 0
F
1 1
A
A

A B F = (AB)’ G

0 0
0 1
B A B
1 0
1 1

Forme générale d’un circuit CMOS


VCC
 Un circuit CMOS est composé de deux
réseaux complémentaires A

 Un réseau pMOS de charge - ‘pull-up’ B


C

 Un réseau nMOS de décharge - ‘pull-


réseau de charge PMOS
D

down’

 Un et un seul des deux réseaux doit F = f(A, B, C, D)’

conduire le courant en tout moment.


 Si les deux réseaux sont ouverts au même
moment, la sortie est alors flottante ou
considérée en ‘haute impédance’.
réseau de décharge NMOS

 Si les deux réseaux conduisent au même


moment, il y a un court-circuit entre
l’alimentation et la masse.

4
Circuits CMOS: exemple 1 – conception

Donnez un diagramme de circuit


CMOS pour implémenter la
fonction logique suivante.

 F = (A + B + C)’

Circuits intégrés de 1960 à nos jours

 Les premiers circuits Terme Année Transistors Exemples


numériques intégrés sont Portes
SSI 1960 < 102
apparus sur le marché dans logiques
les années 1960. MSI
Fin
< 103
Multiplexeurs,
1960s décodeurs
 On les classifiait alors selon Mémoires,
le nombre de transistors processeurs
LSI 1975 104
(p.ex. Intel
qu’ils intégraient. Les trois 4004)
acronymes de base, SSI, VLSI 1980 105+
MSI et LSI, référaient
Fin
respectivement à Small, ULSI 106
1980s
Medium et Large Scale
Integration.

10

5
Circuits intégrés de 1960 à nos jours

11

Logique programmable

Technologies de circuits intégrés à application spécifique (ASIC)

Logique fixe Logique programmable

Mémoire morte
Programmable Read Only Memory – PROM
Electrically Programmable ROM – EPROM
Erasable EPROM – EEPROM
ASIC sur mesure Réseau de logique programmable
Full-custom ASIC Programmable Logic Array - PLA
ASIC à cellules normalisées Circuit PAL
Programmable Array Logic™ - PAL
Cell-based ASIC
Circuit GAL
Réseau pré-diffusé de portes Generic Array Logic™ - GAL
Gate Array Circuit logique programmable complexe
Complex Programmable Logic Device – CPLD
Réseau prédiffusé programmable par l’utilisateur
Field-Programmable Gate Array – FPGA

12

6
Mémoires mortes programmables :
PROM
 Mémoire morte programmable Exemple: ROM 16 × 8
(Programmable Read Only Memory – PROM) décodeur 4:16
une seule fois m15
(One Time Programmable – OTP). m14
m13
m12
A3 m11
 Une PROM consiste en : m10
A2 m9
• un décodeur avec n signaux d’entrée et 2n m8
A1 m7
sorties; m6
A0 m5
• un réseau d’interconnexions m4
programmables entre 2n rangées et m m3
m2
colonnes; et, m1
m0
• m portes OU à 2n entrées.

 On indique une connexion entre une ligne D7 D6 D5 D4 D3 D2 D1 D0


horizontale et une ligne verticale par un point.

13

Mémoires mortes programmables :


PROM

 On utilise une
représentation compacte
des portes logiques avec
plusieurs entrées. =

14

7
Rappel : décodeur
 Un décodeur active une sortie unique qui A2 A1 A0

correspond à la valeur du code binaire


en entrée. F0

Décodeur 3:8
F1
F7 # A2 A1 A0 F7 F6 F5 F4 F3 F2 F1 F0
0 0 0 0 0 0 0 0 0 0 0 1
F6
1 0 0 1 0 0 0 0 0 0 1 0 F2
F5 2 0 1 0 0 0 0 0 0 1 0 0
A2
F4
3 0 1 1 0 0 0 0 1 0 0 0 F3
A1 4 1 0 0 0 0 0 1 0 0 0 0
F3 5 1 0 1 0 0 1 0 0 0 0 0
A0 F4
F2 6 1 1 0 0 1 0 0 0 0 0 0
7 1 1 1 1 0 0 0 0 0 0 0
F1 F5

F0 F0 = m0 = A2’A1’A0’
F1 = m1 = A2’A1’A0 F6

F2 = m2 = A2’A1A0’
etc. F7

15

PROM : connexions programmables


dans un circuit intégré
 Les lignes horizontales et verticales sont
reliées par des diodes et des fusibles
connectés en série.
 Au départ, tous les fusibles sont en place.
 On effectue la programmation en faisant
passer un fort courant dans les fusibles des
connexions à couper.
F1
 Les lignes verticales sont mises à la masse par
défaut (configuration pull-down).
 Les portes OU sont implicites par ce circuit. F0
 Quatre cas à considérer:
 Cas 0: F1 = 0, F0 = 0
 Cas 1: F1 = 0, F0 = 1
 Cas 2: F1 = 1, F0 = 0 D1 D0
 Cas 3: F1 = 1, F0 = 1

16

8
PROM : exemple 1 – analyse des
fonctions logiques réalisées
 Donner les fonctions logiques réalisées
par cette mémoire PROM.
décodeur 4:16

m15
D7 = m13 + m9 = A3A2A1’A0 + A3A2’A1’A0 m14
m13
m12
D2 = m12 + m8 + m4 + m0 = A1’A0’ A3 m11
m10
A3A2 D2
A2 m9
A1A0 00 01 11 10 m8
A1 m7
00 1 1 1 1 m6
0 4 12 8
A0 m5
m4
01 0 0 0 0 m3
1 5 13 9 m2
m1
11 0 0 0 0 m0
3 7 15 11

10 0 0 0 0
2 6 14 10
D7 D6 D5 D4 D3 D2 D1 D0

17

le problème du vote
Un comité composé de quatre personnes a
A B C D F
besoin d’un mécanisme de vote secret
0 0 0 0 0
pour les amendements sur la constitution
0 0 0 1 0
du comité.
F = A' BCD + AB'CD + ABC' D + ABCD'+ ABCD 0 0 1 0 0

Un amendement est approuvé si au moins = BCD + ACD + ABD + ABC 0 0 1 1 0


0 1 0 0 0
3 personnes votent pour. 0 1 0 1 0
0 1 1 0 0
Concevoir un circuit logique qui accepte 0 1 1 1 1
4 entrées représentant les votes. La sortie 1 0 0 0 0
du circuit doit indiquer si l’amendement 1 0 0 1 0
est accepté. 1 0 1 0 0
1 0 1 1 1
1 1 0 0 0
1 1 0 1 1
1 1 1 0 1
1 1 1 1 1

18

9
PROM : exemple 2 – implémentation
d’une fonction logique
Programmer la PROM 16 × 8 pour F = A' BCD + AB'CD + ABC' D + ABCD'+ ABCD
implémenter le circuit du problème du
vote. = m7 + m11 + m13 + m15
décodeur 4:16

Étapes: m15
m14
m13
1. Choisir les ports d’entrée et de A A3
m12
m11
sortie. B m10
A2 m9
C m8
2. Écrire les équations de sortie en A1 m7

somme de produits D A0
m6
m5
m4
m3
3. Indiquer quelles connexions établir. m2
m1
m0

Observations:
• La minimisation des équations n’est pas toujours utile.
• L’ordre dans lequel on place les entrées est crucial. D7 D6 D5 D4 D3 D2 D1 D0

• L’utilisation d’une ROM 16 × 8 n’est pas efficace pour F


ce circuit.

19

EPROM: Erasable Programmable Read


Only Memory
EPROM 32 KB, STMicroelectronics M27C256B

 Une mémoire EPROM est


programmable à plusieurs reprises, et
effaçable en exposant son réseau de
connexions à des rayons ultraviolets

 Elle est facile à reconnaître à sa petite


fenêtre.

20

10
Connexions programmables pour
mémoires EPROM (et EEPROM)
 Les connexions programmables des mémoires VCC VCC
EPROM et EEPROM utilisent des transistors au
lieu de diodes et de fusibles.
 Les lignes verticales sont reliées à l’alimentation
par une résistance de rappel vers le niveau haut. F1
 Les transistors de connexion permettent d’amener la
ligne verticale à zéro si la ligne horizontale
correspondante est à 1.
 Les transistors peuvent être désactivés en les
programmant. F0

 Quatre cas à considérer:


 Cas 0: F1 = 0, F0 = 0
 Cas 1: F1 = 0, F0 = 1
 Cas 2: F1 = 1, F0 = 0 D1 D1
 Cas 3: F1 = 1, F0 = 1

21

EPROM et grilles flottantes


 Dans un transistor MOS, la tension  Pour effacer le dispositif, on l’expose à un
appliquée à la grille détermine si un rayonnement ultra-violet qui dissipe la
canal est formé entre la source et le charge accumulée sur les grilles flottantes et
drain. réactive les transistors.

 Un transistor MOS d’une mémoire


EPROM inclut une grille flottante
supplémentaire.

 On désactive le transistor à grille


flottante en plaçant une tension élevée Source Control gate Drain Source Control gate Drain

entre sa grille et l’un de ses terminaux.


terminal terminal terminal terminal terminal terminal

Cette tension induit un courant qui


attire des charges sur la grille flottante. control gate

Une fois celle-ci chargée, il n’est plus control gate


Silicon
dioxide
floating gate

possible de créer un canal sous la grille source drain


Silicon
source drain

et les deux terminaux sont substrate

effectivement isolés électriquement. (a) Standard MOS transistor (b) EPROM transistor

22

11
EEPROM et mémoires Flash
 Les mémoires EEPROM et Flash sont  Pour ‘programmer’ la cellule, on place une
similaires aux mémoires EPROM, mais tension élevée sur la grille de contrôle et le
peuvent être effacées électriquement, sans drain du transistor. Comme un courant
rayons ultraviolets. élevé circule dans le canal, des électrons
sont attirés par la grille de contrôle et vont
 L’isolant autour de la grille flottante est s’emmagasiner sur la grille flottante,
plus mince que dans le cas d’une cellule désactivant le transistor.
EPROM, et la grille flottante chevauche
partiellement le drain du transistor.

Source: wikipédia
23

Exemple 3 – implémentation de
fonctions logiques
Programmer la ROM 16 × 8 pour S=
implémenter le circuit donné ici. Cout =
Étapes: décodeur 4:16

m15
1. Choisir les ports d’entrée et de sortie. m14
m13
m12
2. Écrire les équations de sortie en 0 A3 m11

somme de produits Cin A2


m10
m9
X m8
3. Indiquer quelles connexions établir. A1 m7
Y A0
m6
m5
m4
m3
Cin m2
S
m1
m0
T3
X T1
Y

T2 Cout D7 D6 D5 D4 D3 D2 D1 D0
S Cout

24

12
Réseaux de logiques programmables :
PLA
 Un PLA (Programmable Logic Array) est Exemple: PLA à 4 entrées, 3 sorties et 6 termes
similaire à une ROM, mais il ne réalise A3 A2 A1 A0

pas tous les produits de termes comme


une ROM.

 Un PLA à n entrées et m sorties peut


réaliser m fonctions de n variables, en
autant que chacune requiert un nombre
limité de produits des variables en entrée.

 Un PLA est composé de deux réseaux


programmables, ET et OU. Le réseau ET
programmable est effectivement un
décodeur programmable incomplet.
F2 F1 F0
• Chaque intersection d’une ligne horizontale et d’une ligne verticale est programmable.
• Seuls 6 termes (produits – ET logique) peuvent être réalisés à partir des quatre entrées et de leurs compléments.
• Seules trois fonctions de sortie peuvent être réalisées.
• Chaque fonction peut utiliser n’importe lequel des six termes programmés

25

Réseaux de logiques programmables :


PLA
 On utilise des représentations
compactes.

26

13
Réseau PLA: exemple – multiplexeur
4:1
Programmer le circuit PLA pour
implémenter le circuit d’un multiplexeur
4:1.

27

Réseaux logiques programmables :


circuit PAL (Programmable Array Logic)
 Dans un circuit PAL, le réseau ET est
programmable et le réseau OU est fixe.
 Chaque intersection d’une ligne horizontale
et d’une ligne verticale est programmable.
 Chaque sortie est SOP.

28

14
Réseaux logiques programmables :
circuit PAL (Programmable Array Logic)
 Les portes ET ont une sortie de 0 par défaut.
 Chaque patte de sortie est menée par un
tampon inverseur contrôlé par une fonction
logique.
 Un PAL16L8 a:
• 10 entrées dédiées (pattes 1-9 et 11)
• 2 sorties dédiées (pattes 12 et 19)
• 6 pattes pouvant être utilisées Comme entrée
ou sortie (pattes 13-18)

29

Tampons inverseurs à la sortie


 Les pattes de sortie d’un PAL
16L8 incluent un tampon
inverseur.
0
 La sortie peut donc être:
A F = “Z”
• l’inverse de la porte OU à
laquelle elle est reliée; ou
• une haute impédance (« Z »). 1

A F = A’

30

15
Réseaux logiques programmables :
circuit PAL

 On programme un
PAL en établissant
des connexions entre
les lignes verticales et
horizontales pour
former des sommes
de produits.

 Les sorties sont


toujours inversées, il
faut en tenir compte.

31

Réseau PAL: exemple – additionneur


complet
Programmer le circuit PLA pour
implémenter le circuit d’un additionneur
complet.

32

16
PAL 16R8
 Un PAL peut avoir des
bascules en sortie.

 Un PAL16R8 a:
• 8 entrées (pattes 2-9);
• 8 sorties avec bascule
(pattes 12-19);
• une patte d’horloge
(CLK); et,
• une patte de contrôle
de la sortie (OE’).

33

Réseaux logiques programmables :


circuits GAL
 Circuits GAL (Generic Array
Logic):
• dispositifs programmables par
l’utilisateur;
• mis en marché par Lattice
Semiconductors en 1985;
• peuvent émuler différents types
de PAL.

 Les circuits GAL ont longtemps


remplacé les composantes SSI-LSI,
mais ne sont plus manufacturés.

34

17
Circuits GAL: macro-cellule
 Le schéma montre une macro-
cellule (Output Logic Macro
Cell – OLMC).

 La sortie de la OLMC peut


être:
• En haute impédance;
• sortie combinatoire inversée
ou non;
• sortie de bascule inversée ou
non; ou,
• renvoyée dans le réseau
programmable.

35

Circuits logiques programmables


complexes (CPLD)
 Les ROM, PLA, PAL et GAL sont parfois
appelés des circuits logique programmable
simples (Simple Programmable Logic Devices –
SPLD).

 Les Complex Programmable Logic Devices –


CPLD – sont une extension naturelle des circuits
PAL.

 Un CPLD incorpore plusieurs PAL sur une seule


puce avec un réseau d’interconnexions.

 Le réseau (PIA=AIM) permet de relier les pattes


de la puce à différents blocs internes et de relier
les blocs entre eux.

 Les CPLDs ont tendance à avoir des propriétés


de temps plus rapides et plus prévisibles.

36

18
Exemple : famille CPLD MAX 7000S
de Altera
 The multiple array matrix (MAX)
7000S est une famille des circuits
CPLD.

 600 à 20,000 portes logiques et 32 à


256 macro-cellules.

 Le circuit est configuré en


programmant EEPROM interne.

 La sortie du réseau ET/OU peut ensuite


être introduite dans une bascule
programmable.

 Les entrées aux portes ET comprennent


des termes de produit provenant
d'autres macro-cellules du même bloc
local ou des signaux du réseau
d'interconnexion programmable (PIA)
à l'échelle de la puce.

37

Exemple : famille CPLD MAX 7000S


de Altera
 la macro-cellule est programmée
pour produire une fonction
logique combinatoire.

 Un seul multiplexeur est utilisé


(Mux 5) et la bascule est
contournée.

38

19
Exemple : famille CPLD MAX 7000S
de Altera
 La macro-cellule est
programmée pour produire une
fonction logique séquentielle.

 Quatre multiplexeurs est utilisés


et la bascule est activée.

39

Exemple : famille CPLD MAX 7000S


de Altera
 Les macro-cellules sont
combinées en groupes de 16 et
appelées blocs logiques (LAB).

 Le PIA peut être utilisé pour


acheminer des données à ou en
provenance des autres LAB ou
de pins externes du circuit.

 Chaque broche d'E/S contient un


tampon de sortie à trois états
programmable.

40

20
Exemple : famille CPLD MAX II de
Altera
 Le MAX II diffère considérablement de la famille MAX
7000.

 LE est analogue à macro-cellule.

 Architecture similaire à celle des FPGAs.

 La famille MAX II considérée comme FPGA basse


densité.

 La différence principale entre le CPLD MAX II et 7000s


réside dans le développement d’une fonction logique.

 Le MAX II utilise des tables de correspondance (LUT) au


lieu des réseaux AND/OR.

 Une LUT est fondamentalement un type de mémoire qui


peut être programmé pour produire des fonctions SOP

 Le MAX II utilise SRAM.

41

Exemple : famille CPLD XC9500XL de


Xilinx

 Ressemble à l’architecture de la
famille MAX 7000.

 Chaque bloc fonctionnel est un


PAL à 54 entrées et 18 sorties.

 Le réseau d’interconnexions
permet d’établir des connexions
entre les blocs d’entrées-sorties
reliés aux pattes de la puce et les
blocs fonctionnels.

Source: Roth, 5e éd., © Brooks/Cole 2004

42

21
CPLD : Exemple - modes des marco-
cellules
 Déterminer comment la macro-
cellule est configurée
(combinatoire ou séquentielle) et
le bit de données qui se trouve sur
la sortie (en I/O) pour chacune des
conditions suivantes. La bascule
est de type D.

✓ XOR output = 1, flip-flop Q


output = 1, from I/O input = 1,
MUX 1 select = 1, MUX 2 select
= 0, MUX 3 select = 0, MUX 4
select = 0, and MUX 5 select = 0.

✓ XOR output = 0, flip-flop Q


output = 0, from I/O input = 1,
MUX 1 select = 1, MUX 2 select
= 0, MUX 3 select = 1, MUX 4
select = 0, and MUX 5 select = 1.

43

Field-Programmable Gate Array


(FPGA): vue d’ensemble
 Un FPGA est un circuit intégré
programmable par l’utilisateur.

 Les premiers FPGA ont été proposés au


début des années 1980. Aujourd’hui, ils
sont parmi les circuits intégrés les plus
complexes en nombre de transistors.

 Deux manufacturiers américains de


FPGA se partagent la plupart du marché:
Altera et Xilinx. Altera a été achetée par
Intel en 2015.

 Il existe plusieurs familles de FPGA,


avec plusieurs modèles dans chaque
famille.
44

22
Architecture FPGA
 Un FPGA est composé à la base
de :
 un réseau de blocs de logique
programmable (Configurable
Logic Block − CLB).
 un réseau d’interconnexions
programmables entre les blocs.
 des blocs d’entrée et de sortie
avec le monde extérieur
(Input/Output Block – IOB).

 Les blocs logiques configurables


(CLB) dans un FPGA ne sont pas
aussi complexes que les LAB
dans un CPLD, mais ils sont
généralement plus nombreux.
45

Architecture FPGA
 Des FPGAs peuvent avoir des
dizaines de milliers de CLB en plus
de mémoire et d'autres ressources.

 FPGAs sont reprogrammable et


utilisent la technologie SRAM ou
anti-fusible pour la programmation
des liens.

 des milliers de modules logiques


dans des packages avec plus de
1000 broches.

 Les tensions d'alimentation en


courant continu sont généralement
comprises entre 1.8 V et 5 V, selon
le dispositif spécifique.
46

23
CLB: bloc logique configurable
 CLB est utilisé pour réaliser la
logique combinatoire et
séquentielle.

 Chaque CLB (également appelé


bloc de réseau logique, LAB) est
composé de:
 plusieurs modules logiques
plus petits.
 interconnexion programmable
locale utilisée pour connecter
des modules logiques au sein
du CLB.

47

Module logique
 Module logique peut être configuré
pour la logique combinatoire,
logique séquentielle, ou une
combinaison des deux.

 Une bascule fait partie de la


logique associée et elle est utilisée
pour la logique séquentielle.

 La LUT fait essentiellement le


même travail que PAL ou PLA.

48

24
LUT
 Une LUT est constituée d'un nombre
de cellules mémoire égal à 2𝑛 , où n est
le nombre de variables d'entrée.

 Une configuration de 1 et de 0 peut


être programmée dans les cellules
mémoires LUT, pour une fonction
SOP spécifiée.

 Chaque 1 signifie le terme de produit


associé apparaît dans la sortie du SOP,
et chacun 0 signifie que le terme de
produit associé ne figure pas dans la
sortie SOP.
49

Cellule SRAM
 Mode écriture
✓ Bit de donnée depuis ‘Bit line’.
✓ Le transistor de commutation est
fermé par ‘word line’.
✓ la valeur logique sur ‘Bit line’ est
appliquée à l'entrée de l'inverseur haut.
✓ Lorsque le transistor de commutation
est ouvert, l‘inverseur conserve la
valeur logique.
 Mode lecture
✓ Le transistor de commutation est
fermé par ‘word line’.
✓ La valeur logique sortie de l’inverseur
inférieur est ensuite appliquée à ‘Bit
line’.

50

25
Modèle simplifier d’un CLB
 Ce CLB contient:
 deux LUT.
 deux bascules.
 divers multiplexeurs.

 Le multiplexeur H sélectionne F ou G
en fonction de la valeur de H1.

✓ les entrées de la bascule sont


sélectionnées par des multiplexeurs
programmables. Les entrées de
sélection de ces multiplexes sont
programmées lors de la configuration
du FPGA.

51

Module logique de Cyclone IV


 La bascule programmable peut être
configurer en D, T, JK, or SR.

 Chaque bascule possède des


entrées de données, d'horloge,
d'activation de l'horloge et
d'effacement.

 Les multiplexeurs sont tous


contrôlés par des bits de la
mémoire de configuration SRAM
du FPGA.

 Les signaux ‘synchronous load’ et


‘synchronous clear’ sont des
signaux qui affectent tous les
registres du LAB, pour réaliser des
compteurs et d’autres fonctions.

52

26
FPGA de Xilinx série 7: tranche de type L
 Une tranche comprend:

✓ Quatre tables de correspondance (Look-up


Table – LUT) à 6 entrées (A6:A1) et deux
sorties O6 et O5.

✓ Trois multiplexeurs (en gris, verticaux) pour


réaliser des fonctions logiques de 7 ou 8 entrées

✓ Des portes logiques pour l’addition rapide.

✓ Huit éléments à mémoire:


➢ 4 (au centre) sont toujours des
bascules
➢ 4 (à droite) peuvent être des bascules
ou loquets.

✓ Des multiplexeurs programmables (en blanc)


pour router les signaux à l’intérieur de la
tranche.

53

FPGA de Xilinx série 7: tranche de type L

54

27
Blocs de mémoire intégrée
 De plus en plus de transistors … les
manufacturiers ajoutent de la Columns of embedded
mémoire. RAM blocks

Arrays of
programmable

 Avantage: mémoire accessible logic blocks

directement à l’intérieur de la puce.

 Colonnes de blocs de mémoire


intégrées à travers les CLBs.

55

Fonctions arithmétiques avancées


 Les FPGA ont prouvé leur utilité
dans les applications de traitement
de signal.

 La multiplication est une


opération fondamentale dans ces
applications.

 Les manufacturiers de FPGAs ont


donc rajouté des multiplicateurs
dédiés.

56

28
Génération d’horloge
 La génération et la distribution
du signal d’horloge est un
problème difficile.

 Un circuit peut nécessiter une Clock signal from

dizaine d’horloges de
outside world Daughter clocks
used to drive
Clock
internal clock trees
Manager
fréquences différentes. etc.
or output pins

Special clock
pin and pad
 Le générateur accepte en entrée
une horloge externe et génère
une ou plusieurs horloges
internes.

57

Distribution d’horloge
 Pour distribuer l’horloge à
travers la puce tout en
minimisant le déphasage
d’horloge, on utilise un réseau Clock
tree
Flip-flops

en arbre dédié.
 Ce réseau est alimenté soit par
une patte spéciale du FPGA à
laquelle est associé un
Special clock
amplificateur dédié, ou bien pin and pad

par l’entremise de signaux Clock signal from


outside world
internes pouvant être routés au
même amplificateur.

58

29
Microprocesseurs fixes
 Plusieurs FPGA intègrent des microprocesseurs
fixes, ex. PowerPC.

 N’utilisent pas de CLB ni de mémoire du


FPGA.

Xilinx, Virtex-II Pro and Virtex-II Pro X Platform FPGAs: Complete Data Sheet, Nov. 2007.
 Architecture résultante très performante, SoC-
sur-FPGA.

 Accès rapide entre le microprocesseur fixe et le


reste de la logique, les multiplicateurs et la
mémoire.

59

FPGA: Exemple-LUT

 Dans plusieurs FPGA commerciaux, les blocs logiques


sont des 4-LUT. Quel est le nombre minimum de 4-LUT
nécessaires pour construire un multiplexeur 4:1 avec les
entrées de sélection s1 et s0 et les entrées de données w3,
w2, w1 et w0 ?

60

30
VHDL

 V VHSIC
(Very High Speed Integrated Circuit)

 H Hardware

 D Description

 L Language

61

VHDL
 Les HDL ont été définis à l'origine pour
pouvoir modéliser le comportement à
plusieurs niveaux d'abstraction.
 Haut niveau: spécifications (vitesse,
énergie).
 Niveau algorithmique: Les spécifications
peuvent être divisées en sous-systèmes:
➢ CPU: pour effectuer le calcul.
➢ RAM: pour contenir les entrées et les sorties
du calcul.
 Niveau de transfert de registre:
➢ Description de la manière dont les données
sont déplacées entre et dans les sous-
systèmes.
➢ Description de la manière dont les données
sont manipulées en fonction des entrées du
système.

62

31
VHDL
 Niveau porte logique: est essentiellement
un schéma (graphique ou textuel) contenant
les composants et les connexions.

 Niveau circuit: décrit le fonctionnement des


portes et des registres de base à l'aide de
transistors, de fils ...

 Niveau matériel: décrit comment différents


matériaux sont combinés et mis en forme
afin de mettre en œuvre les transistors, les
dispositifs et les fils à partir du niveau du
circuit.

 Les HDL sont conçus pour modéliser le


comportement à tous ces niveaux, à
l'exception du niveau de matériel.
63

Qu’est ce que VHDL?


❑ VHSIC (Very High Speed Integrated Circuit) Hardware Description Langage.

❑ Langage pour décrire la structure et le comportement de systèmes


électroniques, en particulier des circuits digitaux (ASIC, FPGA, . . . ).
❑ Standard IEEE.

❑ Indépendant de la technologie cible.

❑ Indépendant de la méthodologie de conception.

❑ Indépendant des outils de conception.

❑ Langage très général ! très complexe (! dépendent de tout!)

❑ VHDL n’est pas un langage de programmation


c’est un langage de description (spécification) de système.
64

32
Historique
❑ 1980: le département de défense américain lance un appel d’offre pour un langage qui
permettrait de décrire tous les systèmes électroniques utilisés.

❑ 1983: trois compagnies (Intermetics, IBM, Texas Instruments) commencent le


développement.

❑ 1985: première version officielle de VHDL (version7.2).

❑ 1986: VHDL est donné à IEEE pour en faire un standard.

❑ 1987: Standard IEEE1076-1987.

❑ 1993: Standard IEEE1076-1993. (des changements minimes)

❑ 1999:Standard IEEE1076.6-1999

❑ La norme est révisée tous les 5 ans (P1076-87, P1076-93, P1076-2000, P1076-2002,
P1076-2006)

65

Introduction
❑ Programmation ou description ?
➢ Les objectifs du langage VHDL
 Conception de circuits intégrés reconfigurable ou non (ASIC, FPGA…) :
SYNTHESE
 Mise au point de modèle de simulations numériques (circuits virtuels) :
MODELISATION
➢ Le langage est capable de DECRIRE
 des comportements concurrents ( // )
Les deux portes
 Des comportements séquentiels travaillent en //

❑ Le principe majeur de VHDL


 Est de fournir un langage commun, depuis la description au niveau
système jusqu’au circuit. A tous les niveaux de description le langage
est le même.
66

33
langage de programmation VHDL
VHDL n’est pas un langage de programmation comme le C, c’est
un langage de description du matériel (verilog, SystemC …).

➢ un langage de programmation est destiné à être traduit en


langage machine puis à être exécuté par un microprocesseur.

➢un langage de description de 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é.

67

Avantages du VHDL
❑ Langage complet qui couvre à la fois les phases de :
✓ spécification,
✓ modélisation,
✓ simulation,
✓ synthèse.
❑ Langage indépendant :
✓ standard IEEE (standardisé en 1987, complété en 1993),
✓ indépendant de la technologie du circuit,
✓ Independent des systèmes – hôtes (PC ou station de travail).
❑ Langage flexible : supporte différents niveaux de description
❑ description modulaire et hiérarchique
• les descriptions sont plus simples,
• la fiabilité est améliorée : chaque sous-ensemble peut être testé seul,
• les sous-ensembles sont réutilisables.

68

34
Structure du VHDL
Il existe 5 catégories d’unité de conception

• L’entité (mot clé entity)


Circuit principal 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)

Package • La déclaration de paquetage (mot clé package)


(librairie)
• Le corps de paquetage (mot clé package body)

69

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
➢ fichier
fait référence à un stockage sur une mémoire de masse (disque) externe

❑ 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.

70

35
Objets
❑ CONSTANT name : type := value;
✓ CONSTANT PI: Real := 3.1416;
✓ CONSTANT INDEX_MAX: Integer := 10*N; -- N doit être déclaré avant

❑ VARIABLE name : type [range] [:= init_value];


✓ VARIABLE count: Natural; -- valeur initiale: count = 0 (= Natural’Left)
✓ VARIABLE y: STD_LOGIC_VECTOR (7 DOWNTO 0) := "10001000";

❑ SIGNAL name : type [range] [:= initial_value];


✓ SIGNAL control : BIT :=’0’ ;
✓ SIGNAL count : INTEGER RANGE 0 TO 100 ;
✓ SIGNAL y : STD_ LOGIC_VECTOR (7 DOWNTO 0);

71

Les opérateurs
❑ Opérateur logique : and, or, nand, nor, xor, xnor, sll, srl, sra, rol,
ror

❑ Opérateur de comparaison : =, /=, <, <=, >, >=

❑ Opérateur d’addition : +, -, &

❑ Opérateur mathématique : *, /, mod, rem

❑ Opérateur de signe : -

❑ Opérateur divers : **, abs, not

72

36
Programmer en VHDL
❑ Définition de l’entité (boîte noire avec les ports d’entrée/sortie)

❑ Définition de l’architecture interne de cette boîte noire


Déclaration des constantes, des signaux, des fonctions, des
procédures, des blocs hiérarchiques utilisés dans le
programme

❑ Corps du programme consistant


✓ Les instructions concurrentes
✓ Les instructions séquentielles encapsulées dans des « process »

❑ VHDL est insensible à la casse. On écrit souvent les mots réservés du langage en
majuscule, le reste en minuscule.

❑ Les commentaires sont précédés de deux tirés : -- exemple)


73

L’entité
❑ L'entité définit les ports (vue externe) et leur mode (in, out, inout, buffer).

❑ Syntaxe:

entity nom_de_l_entite is
port(liste_des_port_avec_leur_mode);
end nom_de_l_entite;

74

37
L’entité

remarquez à la fin de la
définition du port, le
point-virgule se trouve
après la parenthèse
fermante.

X, Y et Z étant du même
mode et du même type,
ils peuvent être listés sur
la même ligne, séparés
par des virgules.

75

Bibliothèques
❑ Le mot ‘library’ est utilisé pour indiquer que des packages vont être ajoutés à la
conception VHDL à partir de la bibliothèque spécifiée.
❑ La syntaxe du paquet a trois champs séparés par un point.

Nom de la bibliothèque

Nom de la bibliothèque Nom du package fonctionnalité spécifique

76

38
Exemples d’entité
❑ Décrire les ports de circuits suivants par un segment d'entité VHDL.

77

Architecture
❑ Définition de signaux et d'autres objets internes

❑ Description du fonctionnement ou de la structure de l’entité à l’aide


d’instructions concurrentes

❑ Elle est toujours associée à une entité, une entité peut avoir plusieurs
architectures:

❑ 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;
78

39
Affectation
❑ Affectation des variables, constantes et génériques se fait par le signe
:=

❑ Exemple

variable my_var: integer:=10; – Affectation de valeur initiale


my_var:=40; – Affectation de valeur

Notez que “:=” est utilisé pour les signaux uniquement pour l'affectation de
valeur initiale. Il n'est pas utilisé pour les signaux dans les autres cas.

79

Affectation aux signaux


❑ Affectation des signaux se fait par le signe <=

Signal A,B,C: std_logic; --declaration



A <= not B ;
B <= ‘1’ ;
C <= A and B ;

Dans une architecture, toutes les lignes combinatoires ou bloc de


processus sont exécutées en parallèle.
80

40
Structure d’un programme VHDL
LIBRARY IEEE;

USE IEEE.std_logic_1164.all;

ENTITY nom_de_l_entite IS

{port (liste_des_port_avec_leur_mode)}

END {nom_de_l_entite};

ARCHITECTURE nom_de_l_architecture OF nom_de_l_entite IS


{partie déclarative de l'architecture}
BEGIN
{zone des instructions concurrentes }
{comme des affectations, des process; …}
END nom_de_l_architecture;

81

Structure d’un programme VHDL

82

41
Exemple 1
❑ Donner le code VHDL de l’équation suivante:

❑ Donner le code VHDL du circuit suivant:

83

Exemple 2
❑ Donner le code VHDL du circuit suivant:

84

42
Exemple 3
❑ Dessinez le circuit logique à implémenter avec le VHDL suivant

85

Types en VHDL

❑ Tout objet en VHDL doit être typé.

❑ Un type définit

•l'ensemble des valeurs que l'on peut affecter à l'objet

•l'ensemble des opérations disponibles sur l'objet

86

43
Types, schéma global

87

Type scalaire
❑ énuméré
type T_FEU is (ROUGE, ORANGE, VERT);
signal FEU : T_FEU;

❑ entier
signal COMPT : integer range 0 to 15;

❑ Réel
signal MASSE : REAL;

❑ physique qui est un entier avec l'unité correspondant


type TIME is range … to … --64 bits
units fs; ps=1000 fs; ns=1000 ps; …
hr=60 min;
end units;
T <= 5 ns;
88

44
Type énuméré
❑ Ce type déclare toutes les valeurs qu'un objet de ce type peut
prendre.
type T_FEU is (ROUGE, ORANGE, VERT);
signal FEU : T_FEU;
type ETAT is (INIT, LECT, ECR, ATT);

❑ Les types ci-dessous sont des types prédéfinis


type BOOLEAN is (FALSE, TRUE);
type BIT is ('0' , '1');

89

Logique à valeurs multiples


❑ Il existe des signaux logiques à plusieurs états:

0, 1, haute impédance, don’t care, non déterminé, …

❑ Le type "std_logic" remplace le type "bit" pour permettre d’avoir 9 états différents

❑ Utilisation de librairie IEEE.std_logic_1164

❑ exemple
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
signal SORTIE, Q: std_logic;

SORTIE <= ‘Z’; -- haute impédance
Q <= ‘1’;
90

45
Le type std_logic
❑ Le type std_logic :
‘ U ’ non initialisé
‘ X ’ non connu
‘ 0 ’ logique 0 Strong drive
‘ 1 ’ logique 1
‘ Z ’ haute impédance
‘ W ’ non connu
‘ L ’ logique 0 Weak drive
‘ H ’ logique 1
‘ - ’ don’t care

91

Type composite
Deux types sont considérés : tableau et record

❑ Un tableau est un ensemble d’éléments du même type

❑ Pour un ensemble de std_logic, nous avons le type prédéfini


std_logic_vector : on définit la taille et l'ordre des éléments
signal BUS1 : std_logic_vector (7 downto 0);
signal REG : std_logic_vector (0 to 31);

❑ On peut aussi définir un type tableau d’éléments composites


type MEMO is array (0 to 1023) of std_logic_vector(7 downto 0);
signal A,B : MEMO;

❑ 2D
TYPE matrix2D IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC;

92

46
Accès aux éléments
❑ Déclaration:
A,B: std_logic_vector(15 downto 0);

❑ Directement:
A(3) <= ‘1’;
B(15) <= ‘0’;

❑ Par tranches
A(15 downto 12) <= "1011";
A(10 downto 2) <= B(15 downto 7);

93

Accès aux éléments de tableaux


❑ Par agrégat

✓ Notation positionnelle
A(3 downto 1) <= ('0', '1', B(15));

✓ Par concaténation
signal A,B,C,D : std_logic;
signal BYTE : std_logic_vector(7 downto 0);
signal Z_BUS,A_BUS : std_logic_vector(3 downto 0);
Z_BUS <= A & C & D & B;
BYTE <= Z_BUS & A_BUS;

94

47
Exemples
SIGNAL A: STD_LOGIC; a <= ‘1’;

SIGNAL B: STD_LOGIC_VECTOR(3 b <= ”0000”; -- Base Binaire par


DOWNTO 0); défaut
SIGNAL C: STD_LOGIC_VECTOR(3 c <= B”0000”; -- Base Binaire
DOWNTO 0); explicite
SIGNAL D: STD_LOGIC_VECTOR(7 d <= ”0110_0111”; -- Utiliser ‘_’
DOWNTO 0); pour augmenter la lisibilité
SIGNAL E: STD_LOGIC_VECTOR(15 e <= X”AF67”; -- Base
DOWNTO 0); Hexadecimale
SIGNAL F: STD_LOGIC_VECTOR(8 f <= O”723”; -- Base Octale
DOWNTO 0);
95

Enregistrement (record)
Ensemble d'éléments de types différents
type NAME is record
identifier : type_indication;
:
identifier : type_indication;
end record;

type PAQUET is record


mot_unique : std_logic_vector (7 downto 0);
data : std_logic_vector (23 downto 0);
CRC : std_logic_vector( 5 downto 0);
num : integer range 0 to 1023;
end record;
signal paq_rec : PAQUET;
paq_rec.CRC <= "111000";

96

48
zone concurrente
❑ Le corps de l'architecture est une zone concurrente: les instructions s'exécutent toutes
en même temps (en parallèle).

I <= A or B; S <= I and C;


S <= I and C; I <= A or B;

97

Exemple
EX : 1

Donner la description VHDL du circuit

98

49
zone séquentielle

❑ 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 processus, fonctions et


procédures.

99

Processus
❑ Processus est une instruction concurrente complexe à écrire
dans une architecture

❑ Processus définit une zone séquentielle

❑ Les différents processus d'une architecture s'exécutent tous en


parallèle

100

50
Syntaxe de processus
❑ Syntaxe de processus :

label : -- optionnel
process (liste de sensibilité)
{partie déclarative}
begin
suite d’instructions séquentielles
end process;

❑ Un processus s'exécute quand un des signaux de la liste de sensibilité


change de valeur.

101

Processus
* architecture Arch of Ent is architecture Arch of Ent is
begin begin
Process (A, B)
begin
if (A = ’1’ and B = ’1’) then S1 <= ’1’;
S1 <= A and B; else S1 <= ’0’;
end if;
end process;

Process (B, C)
begin
S2 <= A when B = ’1’ else if (B = ’1’) then S2 <= A;
elsif (C = ’1’) then S2 <= not(A);
/A when C = ’1’ else
else S2 <= D;
D; end if;
end process;

end Arch; end Arch;


102

51
Instructions séquentielles
❑ Ils s'écrivent uniquement dans une zone séquentielle
• instruction d'attente (wait)
• instruction conditionnelle (if)
• instruction case
• instruction de boucle (For)

103

Instructions wait
❑ Elle s’utilise pour suspendre un processus jusqu’un événement
➢ wait until condition;
wait until A=‘ 1 ’;
wait until CLK’event and CLK=’1’;
➢ wait for time expression;
wait for 5 ns;
➢ wait on signal;
wait on A , B

104

52
Instructions if
if condition then
sequential statements
[elsif condition then
sequential statements ]
[elsif condition then
sequential statements ]
[else
sequential statements ]

end if;

105

Instruction case
❑ Permet de sélectionner une suite d’instructions à exécuter en fonction de la valeur
d’une expression.

case EXPRESSION is

when VAL1 => suite d’instructions séquentielles

when VAL2|VAL3|VAL4 => suite d’instr séquentielles

when VAL5 to VAL7 => suite d’instr séquentielles

when others => suite d’instr séquentielles

end case;

✓ L’ordre des branches n’a pas d’importance (sauf others)


✓ La branche « others » est obligatoire si toutes les valeurs de l’expression ne sont pas énumérées.
106

53
Instruction for

FOR identifier IN range LOOP

(sequential statements)

END LOOP

107

Exemple
Donner la description en langage VHDL (Entité et Architecture) avec (if, case)

Multiplexeur 4 voies

108

54
Exemple
Donner la description en langage VHDL (Entité et Architecture) avec (if, case)

décodeur 2 : 4

109

zone concurrente : Instruction with / select / when

Exemple :

WITH identifier SELECT With Sel select


S <= A when "00",
assignment WHEN value,
B when "01",
assignment WHEN value,
C when "10",
...;
'0' when others;

110

55
zone concurrente : Instruction when/else

Exemple :

S <= A when (Sel = "00") else


assignment WHEN condition ELSE
B when (Sel = "01") else
assignment WHEN condition ELSE
C when (Sel = "10") else
...; '0';

111

Circuits séquentiels : Registre simple


(latch synchrone)
Un circuit synchrone sur le front d’un signal (CLK)

entity R is process
port (D,CLK: in std_logic; begin
Q: out std_logic); wait until CLK'event and CLK='1';
end R; Q <= D;
architecture A of R is end process;
begin
process
begin process (CLK)
wait on CLK; begin
if CLK='1' then Q <= D; if CLK'event and CLK='1' then
end if; Q <= D;
end process; end if
end A; end process;
112

56
Machine à états finis
❑ Une machine à états est un circuit séquentiel ayant un nombre limité
(fini) d'états apparaissant dans un ordre ordonné. Un compteur est
un exemple de machine à états.
❑ Moore et la Mealy sont deux types fondamentaux de machines à
états.
❑ L’état interne est assuré dans des registres (bascules).

❑ L’état prochain dépend de l’état actuel et des entrées.

❑ Le changement d’état se fait sur le front de l’horloge.

❑ L’horloge est implicite

113

Machine à états finis


❑ Machine de Moore : les sorties ne dépendent que de l’état courant.

❑ Machine de Mealy : les sorties dépendent de l’état courant mais


aussi des entrées.

Machine de Moore Machine de Mealy

114

57
Machine de Moore
❑ Chaque bulle représente un état avec un identificateur.

❑ L’état de départ est indiqué.

❑ La transition peut se faire d’un état à un autre lors


d’une transition de l’horloge du système.

❑ Sur les transitions on indique la valeur nécessaire des


entrées pour que la transition ait lieu. Un tiret indique
une valeur sans importance.

❑ Si aucune condition de transition n’est satisfaite, la


machine reste dans l’état courant.

❑ Dans une machine de Moore, les sorties ne dépendent


que de l’état présent donc elles sont indiquées à
l’intérieur des états.

❑ Dans l’exemple il y a une seule entrée et une seule


sortie.
115

Comment coder Machine de Moore à


l'aide de VHDL
--declare the VHDL Library
--Declare the packages required
--declare the entity with the inputs and outputs
architecture arch_name_fsm of name_fsm is
type state_type is (s0,s1,s2,s3);
signal current_state, next_state : state_type;
begin
state_register : process(clk, reset_n)
begin -- statements;
-- statements; end process;
end process; output_logic : process(current_state)
next_state_logic : process(input, current_state) begin
begin -- statements;
end process; end arch_fsm_name;

116

58
Machine de Mealy
❑ La notation est similaire à celle
de la machine de Moore.

❑ Dans une machine de Mealy, les


sorties dépendent a la fois de
l’état présent et des entrées, donc
elles sont indiquées sur les
transitions après une barre
oblique.

❑ Dans l’exemple, il y a deux


entrées et une sortie.

117

Comment coder Machine de Mealy à


l'aide de VHDL
--declare the VHDL Library
--Declare the packages required
--declare the entity with the inputs and
outputs
architecture arch_name_fsm of name_fsm is
type state_type is (s0,s1,s2,s3);
signal current_state, next_state : state_type;
begin
state_register : process(clk, reset_n) -- statements;
begin end process;
-- statements; output_logic : process(current_state, input)
end process; begin
next_state_logic : process(input, -- statements;
current_state) end process; end arch_fsm_name;
begin
118

59
Exemple
 On analyse un circuit pour en
comprendre le fonctionnement.
A
 Analyser un circuit séquentiel D Q

synchrone en quatre étapes:


CLK
1. identifier les variables d’états: reset
les sorties des éléments à
mémoire;
B Z
2. écrire les équations d’états et X
D Q

les équations de sortie;


CLK
3. dresser le tableau d’états; reset

4. dessiner le diagramme d’états.

119

Exemple
A
1.{A, B} 4. Diagramme d’états:
D Q

CLK 2. état 0: AB = « 00 »
reset
A+ = A xor B; état 1: AB = « 01 »
B Z
B+ = B’ or X; état 2: AB = « 10 »
D Q
X
Z = A nor B; état 3: AB = « 11 »
CLK
reset
-
reset
3. Tableau d’états: (état
initial)
État 0 État 1

état présent entrée état prochain sortie Sortie: 1 Sortie: 0

A B X A+ B+ Z
0 0 0 0 1 1 0
1
0
0 0 1 0 1 1
0 1 0 1 0 0 État 3 1 État 2
0 1 1 1 1 0 Sortie: 0 Sortie: 0
1 0 0 1 1 0 -
1 0 1 1 1 0
1 1 0 0 0 0 C’est une machine de Moore,
1 1 1 0 1 0 la sortie ne dépend que de l’état présent.
120

60
Exemple

-
A reset
D Q État 0 État 1
(état
initial)
CLK Sortie: 1 Sortie: 0
reset

0 0
1
B Z
D Q
X
État 3 1 État 2
CLK
Sortie: 0 Sortie: 0
reset
-

121

Exemple
• Approche adéquate: library IEEE;
use IEEE.std_logic_1164.all;

– quand on désire modéliser un entity cctsequentielex1 is


port (
circuit pour lequel on a le schéma reset, CLK, X : in STD_LOGIC;
Z : out STD_LOGIC
– quand on a les équations d’états et );
end cctsequentielex1;
de sortie
architecture arch1 of cctsequentielex1 is
signal A, B : STD_LOGIC;
A
D Q begin

process(CLK, reset) is
CLK begin
reset if (reset = '0') then
A <= '0';
B <= '0';
elsif (rising_edge(CLK)) then
D Q
B Z A <= A xor B;
X B <= x or not(B);
end if;
CLK end process;
reset
z <= not(A or B);

122 end arch1;

61
Exemple
architecture arch3 of cctsequentielex1 is
❑ Approche beaucoup plus puissante: type type_etat is (Etat0, Etat1, Etat2,
Etat3);
– identifier les états, les conditions de signal etat : type_etat := Etat0;
begin
transition et les sorties pour chaque process(CLK, reset) is
begin
état if (reset = '0') then
– pas besoin d’équations d’états etat <= Etat0;
elsif (rising_edge(CLK)) then
case etat is
– plus lisible, robuste, facile à maintenir when Etat0 =>
-
etat <= Etat1;
reset when Etat1 =>
(état État 0 État 1
if x = '0' then etat <= Etat2;
initial) else etat <= Etat3;
Sortie: 1 Sortie: 0
end if;
when Etat2 =>
etat <= Etat3;
0 0 when Etat3 =>
1
if x = '0' then etat <= Etat0;
else etat <= Etat1;
État 3 1 État 2 end if;
end case;
Sortie: 0 Sortie: 0 end if;
end process;
-
z <= '1' when etat = Etat0 else '0';
123 end arch3;

Trois styles de description d’une


machine à états en VHDL
• Les trois parties d’une machine à états sont :
– les éléments à mémoire qui conservent l’état présent de la
machine;
– un circuit combinatoire qui calcule le prochain état; et,
– un circuit combinatoire qui calcule les sorties de Moore et de
Mealy.
• Il y a trois styles principaux de description selon la répartition des
trois parties de la machine sur un ou plusieurs processus.

124

62
Trois styles de description d’une
machine à états en VHDL

125

Application: Contrôleur de distributeur


automatique
Nous allons concevoir un simple contrôleur de distributeur automatique. Le distributeur vendra
des bouteilles d'eau pour 75ȼ. Les clients peuvent saisir un billet d'un dollar ou quarts dollar.
Une fois qu'une somme d'argent suffisante est entrée, le distributeur distribue une bouteille
d'eau. Si l'utilisateur a entré un dollar, il renverra un quart en « change ». Un «Money receiver»
détecte quand l'argent a été saisi. Le récepteur envoie deux signaux logiques à notre circuit
indiquant si un billet d'un dollar ou un quart a été reçu. Un système de «bottle dispenser» retient
les bouteilles d'eau et libère une bouteille lorsque son signal d'entrée est confirmé. Un système
de «coin return» contient des quarts de changement et sortira un quart lorsque son signal
d'entrée sera confirmé. Le «Money receiver» rejettera de l'argent si un dollar et un quart sont
entrés simultanément ou si un dollar est entré une fois que l'utilisateur a commencé à entrer des
quarts.

126

63
Application: Contrôleur de distributeur
automatique
Pour implémenter cette machine d'état, nous aurons besoin d'un état initial
dans lequel la machine attendra jusqu'à ce qu'un client entre de l'argent (wait).
Si un dollar est entré, la machine affirmera le signal «Dispense» pour libérer
une bouteille d'eau et affirmera le signal «Change» pour donner un quart de
changement. Nous n'avons pas besoin d'un état supplémentaire pour la
condition où un dollar est entré car la machine va simplement affirmer les
signaux de sortie et retourner à l'état d'attente. Lorsque le client paie avec des
quarts, notre machine doit garder une trace du nombre de quarts reçus. Nous
aurons besoin de deux états intermédiaires qui gardent la trace du nombre de
quarts entrés (25ȼ et 50ȼ). Une fois le troisième quart entré, notre machine
confirmera le signal de «dispense» et reviendra à l'état d'attente.

127

Application: Contrôleur de distributeur


automatique

Tableau d’états

Diagramme d’états

128

64
Application: Contrôleur de distributeur
automatique

129

Application: Contrôleur de distributeur


automatique

130

65
Exemple
Donner le code VHDL pour implémenter la machine à états finis dans la figure suivante:

131

Nios Ⅱ
❑ System on Chip (SoC):

➢ Un système sur puce (SoC) est généralement défini comme une puce intégrant les
principaux éléments fonctionnels d’un produit final complet.

➢ Un système sur puce comprend généralement un processeur, une mémoire, des modules périphériques et
des modules matériels personnalisés.

132

66
Nios Ⅱ
❑ System on a Programmable Chip (SOPC):

➢ Contrairement à un système sur puce qui est fabriqué sur un circuit intégré et
ne peut être modifié à nouveau, un système sur puce programmable (SoPC),
ou d'un système programmable sur puce, est construit sur la logique
programmable.
➢ Sa structure peut être modifiée par l'utilisateur final, soit au moment de la
compilation, soit au moment de l'exécution, au moyen d'une reconfiguration
complète ou partielle.
❑ Processor Cores:

➢ Les processeur peuvent être classés comme «hard» ou «soft». Cette


désignation fait référence à la flexibilité / configurabilité du processeur. Les
processeur « hard » sont moins configurables. Cependant, ils ont tendance à
avoir de meilleures performances que les processeurs « soft ».
133

Nios Ⅱ
➢ Processeurs « hard » utilisent un processeur embarqué en plus des éléments logiques
normaux du FPGA. Les processeurs « hard » ajoutés à un FPGA constituent une
approche hybride.
▪ Altera propose un processeur embarqué ARM.

➢ Processeurs « soft » tels que le processeur Nios II d'Altera et MicroBlaze de Xilinx,


utilisent des éléments logiques programmables existants du FPGA pour implémenter la
logique du processeur.

➢ Les processeurs « soft » peuvent être très simples et flexibles, permettant souvent au
concepteur de spécifier:

✓ la largeur de la mémoire, la fonctionnalité ALU, le nombre et les types de


périphériques, ainsi que les paramètres d’espace d’adresse mémoire au moment de la
compilation.

✓ Cependant, cette flexibilité a un coût. Les processeurs « soft » ont des fréquences
d'horloge plus lentes, consomment plus d'énergie qu'un processeur « hard » équivalent.

134

67
Nios Ⅱ
❑ Le processeur Nios II d’Altera est disponible en tant que modèle de référence à
synthétiser et à télécharger sur des FPGA.

❑ le processeur NIOS-II est configurable:

✓ on ajoute des éléments internes en fonction des besoins du processeur et de


l’application.

✓ ajout flexible de périphériques externes et du mapping mémoire.

❑ Les périphériques standards

✓ Altera délivre un ensemble de périphériques (timers, interface série, gpio, SDRAM


controllers,…).

❑ Les périphériques ‘custom’ peuvent être développés et intégrés au processeur. Ceci est
recommandé pour les fonction gourmandes en cycles CPU (hardware).

135

Nios Ⅱ
❑ QSys d’altera, outil graphique permettant la configuration des
périphériques et du processeur.

❑ Possibilité d’import/export de code VHDL de périphérique custom.

❑ Génération automatique de code HDL pour l’instanciation du


processeur dans le système.

136

68
Nios Ⅱ

137

Nios Ⅱ
❑ Le processeur Nios II possède un certain nombre de fonctionnalités
pouvant être configurées par l'utilisateur pour répondre aux demandes du
système souhaité. Le processeur peut être implémenté dans trois
configurations différentes:
✓ Nios II / f est une version "rapide" conçue pour des performances
supérieures. Il offre le plus large éventail d’options de configuration
pouvant être utilisées pour optimiser les performances du processeur.
✓ Nios II / s est une version "standard" qui nécessite moins de ressources
dans un dispositif FPGA, ce qui est un compromis pour une performance
réduite.
✓ Nios II / e est une version «économique» qui nécessite le moins de
ressources FPGA, mais qui possède également le plus petit ensemble de
fonctionnalités configurables par l'utilisateur.

138

69
Nios Ⅱ
❑ Le processeur Nios II a une architecture RISC (Reduced Instruction
Set Computer).

❑ La longueur du mot du processeur Nios II est de 32 bits. Tous les


registres ont une longueur de 32 bits.

❑ Lab: voir « NiosII_SOPCBuilder_Labs »

139

70

Vous aimerez peut-être aussi