+ All Categories
Home > Education > Langage vhdl

Langage vhdl

Date post: 25-Jan-2017
Category:
Upload: peronnin-eric
View: 2,359 times
Download: 2 times
Share this document with a friend
50
Synthèse de composants : Langage VHDL Module d’Electronique Numérique
Transcript
Page 1: Langage vhdl

Synthèse de composants :Langage VHDLModule d’Electronique Numérique

Page 2: Langage vhdl

www.geii.eu 2

IntroductionVHDL : Very high speed circuit Hardware Description Language Langage de Haut Niveau adapté à une description

fonctionnelle pour cibler des composants logiques reconfigurables. Concurrent du Verilog HDL.

Limites du cours Utilisation du VHDL pour décrire le comportement d’un bloc

fonctionnel simple ayant : des entrées, des sorties.

Les structures de programmation permettant une description hiérarchique directement en VHDL ne sont pas abordées : utilisation de l’outil de schéma pour la description

hiérarchique, pas de modèles vectoriels de dimension variable.

2

Page 3: Langage vhdl

www.geii.eu 3

Structure d’un programme VHDLSur un exemple simple : la description d’une porte ET

3

Page 4: Langage vhdl

www.geii.eu 4

Déclaration des bibliothèquesLe VHDL utilise des paquetages de bibliothèques La bibliothèque IEEE est indispensable pour la synthèse de

composants logiques programmes.Pour utiliser une bibliothèque Mot clé : library

Exemple : library ieee; Pour utiliser un paquetage d’une bibliothèque Mot clé : use

Exemple : use ieee.std_logic_1164.all;Notes : Le paquetage std_logic_1164 est indispensable à tout projet. Le .all précise que le paquetage doit être chargé en totalité. Pour les traitements d’entiers et de vecteurs signés ou non signés,

un ou plusieurs paquetages doivent être chargés.

4

Page 5: Langage vhdl

www.geii.eu 5

Description externe du bloc fonctionnelPorte ET vue de l’extérieur

En VHDL, description externe = entité (entity)

5

PorteET

Entree1

Entree2

Sortie

Dans cet exemple : PorteET = nom de l’entité créée. Entree1 et Entree2 sont des

entrées de type std_logic. Sortie est une sortie de type

std_logic.

Page 6: Langage vhdl

www.geii.eu 6

SignauxDéfinition En VHDL, on appelle signal toute grandeur qui peut

exister après le processus de synthèse et qui peut donc être visualisée sur un oscilloscope si on n’en interdit pas la simplification. C’est bien une grandeur physique.

Les entrées, sorties et entrées-sorties de l’entité sont des signaux.

Les signaux sont typés Comme en C pour les variables, les signaux peuvent

représentés des informations de différentes natures et sont donc affublés d’un type.

6

Page 7: Langage vhdl

www.geii.eu 7

Types de signauxTypes logiques bit

Type binaire pouvant prendre deux valeurs : ‘0’ ou ‘1’. Insuffisant pour la synthèse de composant.

boolean Deux valeurs possibles : true ou false. C’est le type de référence des structures

conditionnelles. std_logic

C’est le type scalaire de référence pour la synthèse et la simulation avec 9 valeurs possibles :– 3 ayant un sens physique : ‘0’, ‘1’, ‘Z’ pour la haute impédance, – 6 valeurs utiles pour la simulation : ‘U’ pour non initialisé, ‘X’ pour un

résultat inconnu, ‘H’ niveau haut probable, ‘L’ niveau bas probable, ‘W’ niveau ne pouvant être qualifié de ‘H’ ou ‘L’, ‘-’ sans importance. 7

Page 8: Langage vhdl

www.geii.eu 8

Types de signauxTypes logiques vectoriels Assimilables à des tableaux d’éléments d’un type scalaire. Type std_logic_vector = vecteur de std_logic

Déclaration d’un signalsignal a : std_logic_vector(3 downto 0);– a(3) désigne le poids fort– a(0) est le poids faible

signal b : std_logic_vector(1 to 4);– b(1) est le poids fort et b(4) le poids faible

Note 1 : le poids fort est toujours à gauche.Note 2 : les signaux représentants des données numériques codées en binaire sur N bits doivent être déclarés sous la forme de std_logic_vector(N-1 downto 0).

unsigned c’est un vecteur de std_logic utilisable comme un std_logic_vector

et pour lequel les opérations arithmétiques sont définies. le passage vers les entiers est facilité par des fonctions de

conversions. 8

0 0 1 0a =

8 4 2 1

𝑎(3) 𝑎(2) 𝑎(1) 𝑎(0)

𝑎(1) 𝑎(2) 𝑎(3) 𝑎(4)

0 0 1 0a =

Page 9: Langage vhdl

www.geii.eu 9

Types de signauxTypes mathématiques integer

le type entier de référence, limité à 32 bits signés sur certains compilateurs VHDL (ModelSim-Altera).

Déclaration de signaux entierssignal a : integer;signal b : integer range 0 to 20; -- b entier limité à l’intervalle 0 à 20

real type réel en virgule flottante.

Types caractères et chaînes de caractères char stringNote : juste cités pour information …

9

Page 10: Langage vhdl

www.geii.eu 10

Affectation à un signalOpérateur d’affectation sur les signaux en VHDL : le signe <= Exemples d’affectations

Pour plus de lisibilité, on peut aussi déclarer des constantes

Noter l’opérateur d’affectation := pour les constantes.10

Page 11: Langage vhdl

www.geii.eu 11

Description interne du bloc fonctionnelElle est réalisée dans la section architecture du code PorteET est le nom de l’entité

dont le comportement est décrit. rtl (Register Transfer Level) est

le nom donné à l’architecture. La description se fait entre les mots clés begin et end de

l’architecture.Note : entre les mots clés architecture et begin, on peut définir : des signaux internes utiles pour des calculs internes

au bloc fonctionnel, des constantes permettant une meilleure lisibilité du

code.11

Page 12: Langage vhdl

www.geii.eu 12

Domaine concurrentC’est l’espace entre les mots clés begin et end de l’architecturePourquoi qualifie-t-on ce domaine de concurrent ? Car les structures employées ici sont concurrentes dans le temps elles

sont calculées en même temps. On y réalise des traitements de flux de données parallèles.Conséquence L’ordre de ces structures est sans importance

Exemple : et

conduisent à des résultats temporels identiques.Eléments du domaine concurrent Affectations simples. Structures de traitement de flots de données :

Structure when … else … Structure with … select …

Processus utilisant une description séquentielle.12

1 calcul ici

1 calcul là

Page 13: Langage vhdl

www.geii.eu 13

Affectation simpleOpérateur pour les signaux :

Sous réserve qu’ils soient définis pour les types de signaux entrant l’expression, expression peut utiliser Des opérateurs logiques

and , or , xor (ou exclusif), not (complément). nand , nor.

Des opérateurs arithmétiques + , - , *, /, mod (modulo), rem (reste).

Opérateur de concaténation &

Des opérateurs relationnels < , >, <= , >= , = , /= (différent de).

13

Page 14: Langage vhdl

www.geii.eu 14

Structure when… else …Sur l’exemple de la porte ET

Note : la structure se termine toujours par un else fixant la sortie pour les combinaisons non explicitées (rappel : les signaux Entree1 et Entree2 peuvent prendre 9 valeurs chacun).

Optimisation En vectorisant les signaux d’entrées.

Entrees est un signal interne de l’architecture14

Page 15: Langage vhdl

www.geii.eu 15

Application sur un exempleUnité arithmétique simple

Deux opérations possibles : Operation = ‘0’ Resultat OperandeA + OperandeB Operation = ‘1’ Resultat OperandeA - OperandeB

15

Operation

OperandeA

OperandeB

Resultat8

8

8

Page 16: Langage vhdl

www.geii.eu 16

Solution avec la structure when … else …Code source de l’Unité Arithmétique élémentaire UA.vhd

16

Page 17: Langage vhdl

www.geii.eu 17

Solution avec la structure with… select …Code source de l’Unité Arithmétique élémentaire UA.vhd

Note : la ligne "00000000" when others; est utile pour prévoir tous les cas d’entrées possibles, en particulier pour la simulation.

17

Page 18: Langage vhdl

www.geii.eu 18

Résultat de simulationProcess de génération des signaux dans test_UA.vhd

OperandeA et OperandeB sont des std_logic_vector il faut procéder à une conversion pour leur affecter un entierconv_std_logic_vector(valeur, nombre de bits).– Cette conversion est possible grâce à la fonction du paquetage

std_logic_arith dont voici la définition

Test réalisé pour un couple d’opérandes et différentes valeurs possibles de Opération.

18

Page 19: Langage vhdl

www.geii.eu 19

Résultat de simulationSimulation RTL (au niveau du code source)

Notes : Les temps de propagation dans le circuit

n’apparaissent pas car la simulation est seulement fonctionnelle.

Pour une opération indéfinie (donc autre que addition ou soustraction), on obtient bien une sortie nulle comme explicitée comme sortie par défaut. 19

Page 20: Langage vhdl

www.geii.eu 20

Domaine séquentielA l’intérieur du domaine concurrent, on peut effectuer des descriptions séquentielles domaine séquentiel Accès à des structures puissantes et lisibles, rappelant celles du C. Réalisation de blocs combinatoires avec une autre approche que

celle du domaine concurrent mais aussi de blocs séquentiels. Prise en compte aisée des phénomènes synchrones.Mot clé débutant la description séquentielle1 process(liste_de_sensibilité)

Liste de sensibilité = liste des signaux dont le changement d’état lance le calcul du process.

La liste de sensibilité peut être vide on ôte les parenthèses. Dans ce cas, le process est exécuté sans condition.

Le process peut être nommé (voir suite).

201. On parle également de description comportementale.

Page 21: Langage vhdl

www.geii.eu 21

Structure d’un process

21

Nom facultatif

Liste des signaux dont le changement

d’état lance le calcul du process

Corps principal du processCode utilisant des structures de programmation séquentielles :- affectations,- structures conditionnelles,- structures répétitives.

Page 22: Langage vhdl

www.geii.eu 22

Mécanismes de la liste de sensibilitéPremier exemple Equation d’un ET dans un process avec omission de

l’impact du changement d’une des entrées dans la liste de sensibilité.

Résultat de simulation induit Cas de la simulation RTL (niveau source).

22

On retrouve bien un ET.

La sortie devrait retomber à ‘0’ si la fonction ET était

correctement implémentée. Hors, elle apparaît mémorisée du fait de l’oubli de Entree1 dans la liste de sensibilité.

Page 23: Langage vhdl

www.geii.eu 23

Mécanismes de la liste de sensibilité Cas d’une simulation après placement/routage

– On retrouve le fonctionnement d’une porte ET au temps propagation près imposé par le circuit.

Que s’est-il passé ?– Le compilateur a complété la liste de sensibilité en tenant compte de

l’ensemble des signaux figurant comme des entrées dans les équations du process.

23

Page 24: Langage vhdl

www.geii.eu 24

Mécanismes de la liste de sensibilitéEt si on souhaitait ne prendre en compte que les changements d’états de Entree2 ?

Ce n’est possible que sur les fronts montants ou descendants mais pas les deux à la fois.

24

Page 25: Langage vhdl

www.geii.eu 25

Mécanismes de la liste de sensibilitéVariante En effectuant le calcul seulement lorsque Entree1 = ‘1’

On obtient le résultat suivant :

On constate que la sortie est mémorisée lorsque Entree1 = ‘0’Conséquence importante : si une sortie n’est pas affectée durant le calcul d’un process, son état antérieur est mémorisé.

25

Page 26: Langage vhdl

www.geii.eu 26

Mécanismes de la liste de sensibilitéAprès placement/routage, on voit apparaître la mémorisation par rebouclage de la sortie dans le LUT C’est une mémorisation asynchrone.

26

Page 27: Langage vhdl

www.geii.eu 27

Structures conditionnellesElles sont semblables à celles du C Forme en if …

Note : condition est uneexpression dont le résultatest un booléen et utilisantgénéralement les opérateursrelationnels.

27

Forme en case … Très utile pour les

machines à états.

Page 28: Langage vhdl

www.geii.eu 28

Système combinatoire décrit par un processExemple : multiplexeur 4 voies vers 1 voie

Fonctionnement : celui d’un commutateur si Selection = "00" alors Sortie Entree0 si Selection = "01" alors Sortie Entree1 si Selection = "10" alors Sortie Entree2 si Selection = "11" alors Sortie Entree3

28

Selection

Entree0

Sortie

2

Entree1

Entree2

Entree3

Page 29: Langage vhdl

www.geii.eu 29

Multiplexeur 4 vers 1 avec des if …Vis-à-vis de la synthèse, toutes les combinaisons binaires du vecteur Selection ont été prises en considération

29

Page 30: Langage vhdl

www.geii.eu 30

Multiplexeur 4 vers 1 avec des if …Analyse du placement/routage La sortie obtenue est purement combinatoire. La synthèse nécessite 2 éléments logiques.

30

Page 31: Langage vhdl

www.geii.eu 31

Multiplexeur 4 vers 1 avec des if …Analyse du placement/routage La sortie obtenue est purement combinatoire.

31

Page 32: Langage vhdl

www.geii.eu 32

Multiplexeur 4 vers 1 avec des if …Résultat de simulation fonctionnelle (RTL)

Résultat de simulation niveau portes (dans le composant)

32

Page 33: Langage vhdl

www.geii.eu 33

Multiplexeur 3 vers 1 avec des if …Même fonctionnement en supprimant Entree3Première approche On reprend le code

précédent ensupprimant lacombinaison correspondant à l’affectation deEntree3 sur Sortie.Note : parmi les 4 possibles pour Selection, une combinaisonbinaire n’est donc pas prise en compte.

33

Page 34: Langage vhdl

www.geii.eu 34

Multiplexeur 3 vers 1 avec des if …Résultat de la simulation fonctionnelle pour la première approche

La mémorisation de la sortie est due au fait que toutes les combinaisons binaires de Selection n’étant pas explicitées, le compilateur prévoit de mémoriser le signal Sortie si aucune valeur ne lui est affectée au moment du calcul du process.

34

Lorsque Selection="11" , on constate que la sortie est

mémorisée 

Page 35: Langage vhdl

www.geii.eu 35

Multiplexeur 3 vers 1 avec des if …Analyse du placement/routage Le multiplexeur 3 vers 1 ainsi réalisé

apparaît plus complexe que le modèle 4 vers 1 présentant pourtant une entrée de plus !

35

On voit qu’il existe un verrouillage au niveau de la

sortie.

Verrouillage obtenu par rebouclage de la sortie vers

les entrées du LUT (mémorisation asynchrone).

Page 36: Langage vhdl

www.geii.eu 36

Multiplexeur 3 vers 1 avec des if …Seconde approche En explicitant toutes

les combinaisons binaires de Selection.

36

Page 37: Langage vhdl

www.geii.eu 37

Multiplexeur 3 vers 1 avec des if …Troisième approche En fixant la valeur

par défaut dès l’entrée dans leprocess.

37

Page 38: Langage vhdl

www.geii.eu 38

Système combinatoire dans un processConséquence de ce qui a été vu précédemment Ne pas traiter toutes les combinaisons entraîne :

Une mémorisation des sorties traitées par un process. Une consommation supérieure des ressources du FPGA. Un temps de calcul généralement supérieur à cause

– de l’augmentation du nombre de LUT mis en œuvre– du rebouclage de la sortie vers les entrées du LUT

Pour réaliser un système réellement combinatoire donc sans risque de mémorisation des sorties, il suffit :soit : de traiter toutes les combinaisons d’entrées.

soit : d’initialiser la sortie en début de process car la

mémorisation n’apparaît plus dès lors que la sortie est affectée au moins une fois au cours du calcul du process.

38

Page 39: Langage vhdl

www.geii.eu 39

Structures répétitivesVariables La variable est utilisée comme un artifice de génération

de code Elle n’existe que dans le process. Ce n’est pas une information synthétisable à

l’inverse du signal, elle n’a pas de sens physique donc elle n’est pas mesurable dans le composant.

Elle se déclare entre les mots clés process et begin Elle peut être de n’importe quel type, énuméré ou non

39

Page 40: Langage vhdl

www.geii.eu 40

Structures répétitivesBoucle for variable in range loop … end loop; Syntaxe

Exemple : process de test pour le décodeur 7 segments Utilisation d’un vecteur interne pour les entrées. Redistribution du vecteur généré sur chacune des

entrées.

40

Décodeur 7

segments

BCD1 C

BCD0

BCD3

BCD2

BA

FED

G

Page 41: Langage vhdl

www.geii.eu 41

Structures répétitivesBoucle for variable in range loop … end loop; Exemple : additionneur 4 bits

avec retenue d’entrée.

41

Additionneur 4 bits

carry_in

B

A

carry_out

S

Page 42: Langage vhdl

www.geii.eu 42

Process d’une machine séquentielleAttribut event d’un signal Déjà vu, un process se lance lorsqu’un signal de la liste

de sensibilité change d’état. Pour savoir quel signal a changé d’état, on utilise

l’attribut event des signaux qui signal qu’un signal a fait l’objet d’un changement d’état en entrant dans le process.

Process d’une machine synchroneà remise à 0 asynchrone On traite en premier le reset. Puis ce qui doit l’être au moment du

front montant de l’horloge (clk ici).

42

Page 43: Langage vhdl

www.geii.eu 43

ExemplesSynthèse d’une bascule D avec entrée de reset asynchrone

Note : le reset est toujours choisi actif à

l’état bas.

43

D BasculeD

clk

Q

reset

Page 44: Langage vhdl

www.geii.eu 44

Exemple : compteur 4 bitsSynthèse d’un compteur 4 bits avec entrée de reset asynchrone Comptage de 0 à 15.

La sortie Q du compteur est un std_logic_vector(3 downto 0) L’opération Q <= Q + 1 n’est possible qu’à condition

d’inclure le paquetage ieee.std_logic_unsigned qui définit l’addition entre un std_logic_vector et un integer

44

Compteur4 bits

clk

Q

reset

Page 45: Langage vhdl

www.geii.eu 45

Exemple : compteur 4 bits de 0 à 15Résultat de simulation

45

On voit l’action clairement asynchrone du reset puisqu’il

est pris en compte indépendamment du signal

d’horloge.

La sortie Q évolue bien de façon synchrone : Q change de valeur sur les fronts montants

de clk.

Page 46: Langage vhdl

www.geii.eu 46

Variante : compteur 4 bits de 0 à 11Objectif : compter de 0 à 11 de façon cyclique (arrivé à 11, on repasse à 0)Première approche : celle du C : Simulation correspondante :

Analyse « C » lorsque Q = 11 en entrant dans le process sur un front montant de clk : Q <= Q +1 Q 11+1 Q 12 la condition suivante devrait remettre Q à 0

mais ce n’est pas ce qui se produit ! Pourquoi ?

46

Page 47: Langage vhdl

www.geii.eu 47

Evolution des signaux dans un processTout signal utilisé dans une équation pour le calcul d’une affectation ou d’une condition est une entrée.

Tout signal auquel on affecte une valeur, constante ou calculée à partir d’une équation, est une sortie.

Un signal peut à la fois être utilisé comme une entrée et comme une sortie.

Dans un process, la valeur d’une entrée reste figée à l’état qu’elle possédait au moment d’entrée dans le process une sortie ne change réellement de valeur qu’en sortant du process.

47

Page 48: Langage vhdl

www.geii.eu 48

Evolution des signaux dans un processIncidence sur la lecture d’un process:

Conséquence sur l’exemple du compteur : quand on entre dans le process sur un front montant

d’horloge avec , c’est cette valeur qui sera utilisée pour les conditions le calcul de a une incidence sur la valeur future de mais aucune sur l’évaluation de la condition passe à 12 !

48

devrait se lire :

devrait se lire :

devrait se lire :

Page 49: Langage vhdl

www.geii.eu 49

Variante : compteur 4 bits de 0 à 11Objectif : compter de 0 à 11 de façon cyclique (arrivé à 11, on repasse à 0)Seconde approche :

si on rentre dans le process avec , cela signifie que le passage à 11 s’est effectué au cycle d’horloge précédent on repasse à 0 et on a donc compté de 0 à 11.

Simulation correspondante :

49

Page 50: Langage vhdl

Modèle Powerpoint utilisé par les présentations Intel


Recommended