intro vhdl v2.0 notes

Upload: jalal-rachad

Post on 15-Jul-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Le langage VHDL

Alain Vachoux Laboratoire de Systmes Microlectroniques [email protected]

Ce document est une introduction aux aspects principaux du langage VHDL. Il ne prtend pas tre exhaustif, mais doit fournir une base suffisante pour dmarrer des activits de modlisation et de simulation de circuits numriques. Une liste de rfrences est fournie pour approfondir le sujet.

A. Vachoux, v2.0, 2003

Le langage VHDL - 1

Table des matires Introduction - p. 3 Organisation d'un modle VHDL - p. 15 Premiers modles VHDL - p. 19 Reprsentation de l'information - p. 28 Description du comportement - p. 45 Description de la structure - p. 64 Aspects avancs - p. 71 Rfrences - p. 96

A. Vachoux, v2.0, 2003

Le langage VHDL - 2

A. Vachoux, v2.0, 2003

Le langage VHDL - 2

Table des matires Introduction Qu'est ce que VHDL? Domaine d'application Modle et simulation logique Utilisation de VHDL

Organisation d'un modle VHDL Premiers modles VHDL Reprsentation de l'information Description du comportement Description de la structure Aspects avancs RfrencesA. Vachoux, v2.0, 2003 Le langage VHDL - 3

A. Vachoux, v2.0, 2003

Le langage VHDL - 3

Qu'est ce que VHDL? Langage de description de systmes matriels Comportement Structure Documentation

Dveloppement de modles excutables Simulation Synthse (sous-ensemble)

Modle logiciel Langage fortement typ Modularit Extensibilit

Standard IEEE (rf. IEEE Std 1076-2002) Support par tous les outils EDAA. Vachoux, v2.0, 2003

Introduction

Le langage VHDL - 4

Le langage VHDL permet la description des aspects les plus importants dun systme matriel (hardware system), savoir son comportement, sa structure et ses caractristiques temporelles. Par systme matriel, on entend un systme lectronique arbitrairement complexe ralis sous la forme dun circuit intgr ou dun ensemble de cartes. Le comportement dfinit la ou les fonctions que le systme remplit (p. ex. le comportement dun microprocesseur comporte, entre autres, des fonctions arithmtiques et logiques). La structure dfinit lorganisation du systme en une hirarchie de composants (p. ex. un microprocesseur est constitu dune unit de contrle et dune unit oprative; cette dernire est elle-mme, entre autres, constitue dun composant ralisant les oprations arithmtiques entires et dun composant ralisant les oprations arithmtiques en virgule flottante). Les caractristiques temporelles dfinissent des contraintes sur le comportement du systme (p. ex. les signaux dun bus de donnes doivent tre stables depuis un temps minimum donn par rapport un flanc dhorloge pour quune opration dcriture dans la mmoire soit valable). Un modle VHDL est excutable, c..d. qu'il est possible de lui appliquer des stimulis (galement dcrits en VHDL) et dobserver lvolution des signaux du modle dans le temps par simulation. La dfinition du langage prcise les rgles d'valuation de l'tat d'un modle. Le langage VHDL est aussi utilis pour la synthse, par exemple pour driver automatiquement un circuit base de portes logique optimis partir dune description au niveau RTL (Register-Transfer Level) ou algorithmique. Toute description VHDL lgale n'est pas forcment synthtisable. Le langage VHDL est dfini par le standard IEEE 1076. La dernire rvision de la norme date de 2002.

A. Vachoux, v2.0, 2003

Le langage VHDL - 4

Histoire de VHDL1980 1985 1987 1993 2002 Dbut du projet VHDL financ par le US DoD Premire version 7.2 publique Premire version du standard IEEE Std 1076-1987 Mise jour du standard (IEEE Std 1076-1993) Mise jour du standard (IEEE Std 1076-2002)

A. Vachoux, v2.0, 2003

Introduction

Le langage VHDL - 5

le langage VHDL est un standard IEEE depuis 1987 sous la dnomination IEEE Std. 1076-1987 (VHDL-87). Il est sujet rvision tous les cinq ans. Une premire rvision, qui corrige certaines incohrences de la version initiale et qui ajoute de nouvelles fonctionnalits, a eu lieu en 1994 (IEEE Std. 1076-1993 ou VHDL-93). La dernire rvision est celle de 2002 (IEEE Std. 1076-2002 ou VHDL-2002) . LIEEE (Institute of Electrical and Electronics Engineers, http://www.ieee.org et http://standards.ieee.org/) est un organisme international qui dfinit entre autres des normes pour la conception et lusage de systmes lectriques et lectroniques.

A. Vachoux, v2.0, 2003

Le langage VHDL - 5

Domaine d'applicationDomaines de descriptions Comportement Niveaux d'abstractions Systme Structure Gomtrie Racks, cartes, circuits intgrs

Performances Processeurs, Modles statistiques mmoires, interfaces ALU, registres, sous-programmes Portes logiques Primitives lectriques

Architecture Comp. Comp. (RTL) concurrent squentiel Logique Circuit Equations logiques Equ. diffrentielles

Plan

Cellules Elments

A. Vachoux, v2.0, 2003

Introduction

Le langage VHDL - 6

On considre trois domaines de description (ou vues). Les vues Comportement et Structure on dj t introduites. La vue Gomtrie dcrit les caractristiques physiques du systme matriel. A chaque niveau d'abstraction correspond un degr de dtail. Le niveau Systme est le moins dtaill et le niveau Circuit est le plus dtaill. Le degr de dtail dpend de la reprsentation du temps: causalit, cycles/"ticks" d'horloge, valeurs entires, valeurs relles la reprsentation des donnes: jetons, valeurs entires ou relles, mots binaires. Le langage VHDL est particulirement adapt la description de systmes matriels au niveau RTL (Register Transfer Level) et au niveau Logique. Il peut tre aussi utilis au niveau Systme et au niveau Circuit avec quelques limitations. VHDL ne permet pas de prendre en compte les aspects gomtriques d'un systme matriel.

A. Vachoux, v2.0, 2003

Le langage VHDL - 6

Comportement concurrent vs. squentiel (1/3) Exemple: multiplieur, modle algorithmiqueprocedure sa_mult (A, B, Z) -- OPA, OPB oprandes dentre, tailles N, indices N-1:0 -- MRES rsultat, taille 2*N, indices 2*N-1:0 -- REGA registre local, taille N, indices N-1:0 -- REGB registre local, taille 2*N, indices 2*N-1:0 -- ACC accumulateur, taille 2*N, indices 2*N-1:0 -- stop flag de fin dopration begin REGA := OPA; REGB := OPB; -- charger les registres ACC := 0; -- initialiser laccumulateur stop := FALSE; loop exit when stop; if REGA(0) = '1' then ACC := ACC + REGB; end if; REGA := '0' & REGA(N-1:1); -- dcalage de REGA droite REGB := REGB(2*N-2:0) & '0'; -- dcalage de REGB gauche stop := (REGA = 0); -- stop? end loop; MRES := ACC; -- rsultat disponible end;A. Vachoux, v2.0, 2003

Introduction

Le langage VHDL - 7

Un modle algorithmique (p.ex. d'un multiplieur additions et dcalages) est constitu d'un ensemble d'instructions qui doivent tre excutes dans l'ordre donn. On parle de comportement squentiel. Le modle ci-dessus n'est pas un modle VHDL, mais un pseudo-code relativement proche. Il dfinit un certain nombre de variables (OPA, OPB, MRES, , stop) qui ne correspondent pas ncessairement des objets physiques (registres, signaux). Il est possible de dvelopper un modle VHDL ralisant l'algorithme ci-dessus et de le simuler. Par contre, il n'est pas garanti que le modle VHDL soit synthtisable.

A. Vachoux, v2.0, 2003

Le langage VHDL - 7

Comportement concurrent vs. squentiel (2/3) Exemple: multiplieur, modle RTLB 1 CK L 0 D IR S RB CL R SH T IF SH IFT L D L D S RA CR L A D IR 0 CK L 0 SB TP processus SRB SR A XOR

donne contrle

CK L AD ER D SH IFT D N L B OE S ST B IN IT FSMC ntroller o AD D CR L AC C L D

begin tche1 tche2 ... wait on ...

AD DER ACC FSM

RES L UT

D N OE

A. Vachoux, v2.0, 2003

Introduction

Le langage VHDL - 8

Un modle RTL est principalement bas sur une description concurrente du comportement du systme matriel. On identifie des composants/blocs qui doivent remplir une fonction particulire (registres, additionneur, squenceur/contrleur, etc.) et des signaux communicants entre ces blocs. Les fonctions des blocs peuvent tre dcrites de manire squentielle. Par contre, les blocs peuvent tre considrs comme des processus concurrents asynchrones. Un processus dfinit une squence doprations qui sont excutes en fonction dvnements auxquels il est sensible (triggering conditions). Les oprations sont usuellement des oprations logiques ou arithmtiques avec un contrle du flot dexcution (condition, boucle). Ds quun processus est activ il excute ses instructions jusqu un point darrt. Le point darrt est une instruction particulire qui dit essentiellement dattendre jusqu ce quil y ait un nouvel vnement sur les signaux sensibles du processus. Lexcution dun processus est cyclique: la squence dinstructions recommence au dbut une fois la dernire instruction excute. Chaque processus peut tre activ de manire concurrente et asynchrone. Un "super processus" (squenceur, scheduler) permet de contrler lactivation des processus lors de la simulation. Un rseau de processus est interconnect par des signaux qui sont des fonctions valeurs discrtes dune variable entire reprsentant le temps. Par exemple, un flanc montant du signal dhorloge CLK et un signal SHIFT actif va simultanment effectuer un dcalage gauche du registre SRB et un dcalage droite du registre SRA. Leffet sera effectivement simultan pour lutilisateur, mme si en ralit les deux processus SRA et SRB sont activs lun aprs lautre dans un ordre quelconque par le simulateur. Une fois les oprations effectues chaque processus se met en tat de veille jusqu ce quun nouvel vnement le ractive nouveau.

A. Vachoux, v2.0, 2003

Le langage VHDL - 8

Comportement concurrent vs. squentiel (3/3) Exemple: additionneur, niveau logique

A. Vachoux, v2.0, 2003

Introduction

Le langage VHDL - 9

Un modle logique (gate-level model) se base sur un ensemble de primitives logiques (ET, OU, NON, etc.) disponibles sous forme d'oprateurs boolens ou de composants (portes). Les signaux (A, B, CI, CO, SO, S1, S2, S3, S4) sont de mmes types que ceux d'un modle RTL. On peut aussi considrer chaque porte ou oprateur logique comme un processus concurrent. En simulation, la sortie d'une porte n'est rvalue que si un changement d'tat ses entres le requiert. Les portes logiques sont usuellement reprsentatives de cellules d'une bibliothque de cellules standard pour une technologie donne (p.ex. CMOS 0.18).

A. Vachoux, v2.0, 2003

Le langage VHDL - 9

Modle logique (1/2) Reprsentation des donnes: signaux logiques 2 tats: '0' (vrai), '1' (faux) 4 tats: '0', '1', 'X' (indfini/conflit), 'Z' (haute impdance/dconnexion)1 1 1 1 0 erreur! 1 0 1bus

'X'?

'Z'

N tats

Reprsentation du temps: valeur entire Multiple entier d'une rsolution minimum (MRT) Ex.: MRT = 1 fs => tmax = 2 s (codage sur 32 bits) ou 3 h (64 bits)

Comportement: expressions logiques Logique combinatoire: oprateurs boolens (NON, ET, OU, etc.) Logique squentielle: horloge, dlais, mmorisation des tats (flip-flop, latch)A. Vachoux, v2.0, 2003

Introduction

Le langage VHDL - 10

La simulation logique permet la vrification de la fonctionnalit est des caractristiques temporelles de circuits logiques de trs grande taille (circuits VLSI - Very Large Scale Integrated circuits - 50'000 1'000'000 transistors). Ceci est possible car les donnes et le temps sont modliss de manire abstraite. Les donnes sont reprsentes comme des signaux logiques ne pouvant prendre qu'un nombre fini d'tats. Aux moins deux tats sont requis: '0' (tat vrai) et '1' (tat faux). D'autres tats sont en pratique ncessaire: l'tat 'X' permet de reprsenter un conflit et l'tat 'Z' permet de modliser la dconnexion temporaire d'un composant connect un bus. Le temps est reprsent comme une valeur entire multiple d'un pas de rsolution minimum (MRT - Minimum Resolvable Time). Comme le temps est cod dans le simulateur avec un nombre fini de bits, le choix du MRT va influencer le domaine des valeurs de temps considres. Par exemple, un MRT de 1 fs permettra de reprsenter le temps jusqu' 2 s pour un codage sur 32 bits et jusqu' 3 h pour un codage sur 64 bits. De plus, un dlai de 2.5 ns sera interprt comme valant 2 ns si le MRT est de 1 ns et le choix d'un MRT 100 ps est requis pour reprsenter correctement ce dlai. Le calcul du comportement revient valuer des expressions logiques combinatoires (NON, ET, OU, etc.) ou squentielles (avec notion d'horloge, de dlais et de mmorisation des tats; p. ex. flip-flop ou latch).

A. Vachoux, v2.0, 2003

Le langage VHDL - 10

Modle logique (2/2) Types de dlais B = not A'1' A '0' '1' Dlai nul '0' '1' Dlai inertiel i = 2 ns B '0' '1' B Dlai de transport '0' p = 2 ns 1A. Vachoux, v2.0, 2003

B

5Introduction

10

15

20

t [ns]Le langage VHDL - 11

La prise en compte des dlais permet une vrification plus raliste du comportement. Le mode de dlai nul considre le cas idal o seule la fonctionnalit est vrifie. Tout changement d'tat est rpercut immdiatement. Le mode de dlai inertiel prend en compte le fait qu'un circuit ne va pas ragir immdiatement et que toute impulsion (transition '0', '1', '0' ou '1', '0', '1') dure suffisamment longtemps pour que l'effet d'un changement d'tat soit observable. Le mode dlai transport modlise une rponse frquentielle de largeur de bande infinie pour laquelle toute impulsion, quelle que soit sa dure, est transmise. Il est aussi plus raliste de considrer des valeurs de dlais diffrentes pour les transitions montantes '0' -> '1' et pour les transitions descendantes '1' -> '0'. Ces trois types de dlais peuvent tre spcifis dans un modle VHDL. Les modalits d'application seront dtailles plus loin.

A. Vachoux, v2.0, 2003

Le langage VHDL - 11

Simulation logique (1/2) Simulation dirige par les vnements Etat initial pas ncessairement cohrent (pas de propagation d'tats en t = 0)Initialisation Aller au temps du prochain vnement

Stop

Evnements? Enregistrer nouveaux vnements

Mise--jour des signaux

Evaluation des expressions dpendantes des signaux mis jour

A. Vachoux, v2.0, 2003

Introduction

Le langage VHDL - 12

La simulation logique dirige par les vnements (event-driven logic simulation) minimise le nombre d'valuations logiques effectuer pour calculer l'tat du modle un instant donn. Un vnement est un changement d'tat qu'il s'agit de rpercuter de manire slective que sur les expressions (portes) concernes par cet vnement. Le temps simul avance en fonction de l'ordonnancement temporel des vnements. La simulation dmarre par laffectation de valeurs initiales tous les signaux. Il faut noter que ltat initial du modle nest pas ncessairement un tat cohrent, ou stable car il ny a pas encore de propagation des valeurs aux entres primaires du modle. Le temps de simulation est ensuite avanc jusquau moment du prochain vnement prvu. Les valeurs des signaux ayant un vnement ce moment-l sont mises jour et toutes les instructions ou les composants du modle concerns par ces mises jour sont rvalus. Ceci aboutit potentiellement de nouveaux vnements sur des signaux, au mme instant (si mode de dlai nul) ou des temps futurs (si mode de dlai inertiel ou de transport). La boucle se rpte ainsi jusqu ce quil ny ait plus dvnements propager dans le modle. La dfinition du langage VHDL inclut la description formelle d'un cycle de simulation canonique qui rgit la simulation de tout modle VHDL. Ceci garantit que la simulation d'un mme modle VHDL, stimul par les mmes signaux, produira les mmes rsultats, quelle que soit l'implmentation utilise.

A. Vachoux, v2.0, 2003

Le langage VHDL - 12

Simulation logique (2/2) Exemple: Z = A B Dlai inertiel, '0' -> '1' = 9 ns, '1' -> '0' = 5 ns

A A G2 G1 B C G3 E D B G4 Z C D E

MRT

Z 5 10 19

temps [ns]

A. Vachoux, v2.0, 2003

Introduction

Le langage VHDL - 13

A titre dexemple simple, considrons un circuit logique ralisant la fonction A B (ou A B) dont la sortie vaut 1 ou la valeur VRAIE si les entres A et B sont diffrentes et 0 ou la valeur FAUSSE si les entres sont les mmes. Un chronogramme illustrant lvolution des signaux logiques du circuit est galement donn en supposant un changement de valeur sur lentre A. Les modles des portes logiques tiennent comptent dun dlai de changement 0 1 de 9 ns et dun dlai de changement de 1 0 de 5 ns. Le MRT est de 1 ns. L'vnement sur A au temps courant tc = 5 ns va forcer une rvaluation de la sortie de la porte G2 et prvoir un vnement sur D tc + '1' -> '0' = 10 ns. L'vnement sur D, au temps courant tc = 10 ns, va forcer une rvaluation de la sortie de la porte G4 et prvoir un vnement sur Z tc + '0' -> '1' = 19 ns. Dans ce cas de figure, les sorties des portes G1 et G3 n'ont pas besoin d'tre rvalues.

A. Vachoux, v2.0, 2003

Le langage VHDL - 13

Utilisation de VHDLEditeur (texte ou graphique)

Code source VHDL

Analyseur VHDL

Format intermdiaire

WORK bibliothque(s)

Elaborateur

Modle excutable

SimulateurIntroduction

A. Vachoux, v2.0, 2003

Le langage VHDL - 14

La cration du code source VHDL peut tre faite au moyen d'un diteur de texte ou d'outils graphiques permettant de dcrire la structure du systme modliser sous la forme de schmas ou de diagrammes de blocs et son comportement sous la forme de machines dtats, de chronogrammes ou de tables de vrit. Lanalyseur (ou compilateur) vrifie la syntaxe dune description VHDL. Il permet la dtection derreurs locales, qui ne concernent que de lunit compile. Plusieurs techniques danalyse sont actuellement utilises par les outils du march. Lapproche compile produit directement du code machine, ou, dans certains cas, du code C qui sera lui-mme compil. Lobjet binaire est alors li au code objet du simulateur. Cette approche rduit le temps de simulation au dtriment du temps danalyse. Lapproche interprte transforme le code source en un pseudo-code qui est interprt par le simulateur. Cette approche rduit le temps danalyse au dtriment du temps de simulation. Chaque concepteur possde une bibliothque de travail (working library) de nom logique WORK (le nom est standard) dans laquelle sont placs tous les modles compils. Le lien du nom logique avec lemplacement physique de la bibliothque dpend de loutil de simulation ou de synthse utilis. Il est aussi possible de faire rfrence, en mode de lecture seule, dautres bibliothques, des bibliothques de ressources, contenant dautres modles ou des utilitaires. Plusieurs bibliothques peuvent tre actives simultanment. Chaque bibliothque contient une collection de modles mmoriss dans un format intermdiaire. Elle contient galement un certain nombre de relations et dattributs liant, si ncessaire, les diffrents modles entre eux. L'laborateur a pour tche de crer un modle excutable partir de modules compils sparment et de dtecter des erreurs globales. Le simulateur calcule comment le systme modlis se comporte lorsquon lui applique un ensemble de stimuli. Lenvironnement de test peut galement tre crit en VHDL: il peut tre lui-mme vu comme un systme dfinissant les stimuli et les oprations appliquer aux signaux de sortie pour les visualiser (sous forme texte ou graphique). Le simulateur permet aussi le dverminage (debugging) dun modle au moyen de techniques analogues celles proposes pour les programmes crits en Pascal, C ou Ada: simulation pas pas, visualisation de variables, de signaux, modification interactive de valeurs, etc.

A. Vachoux, v2.0, 2003

Le langage VHDL - 14

Table des matires Introduction

Organisation d'un modle VHDL Units/entits de conception Bibliothques Premiers modles VHDL Reprsentation de l'information Description du comportement Description de la structure Aspects avancs Rfrences

A. Vachoux, v2.0, 2003

Le langage VHDL - 15

A. Vachoux, v2.0, 2003

Le langage VHDL - 15

Units de conceptionEntit de conception

Dclaration Dclaration de paquetage (P) de paquetage (P) Corps Corps de paquetage (S) de paquetage (S)

Dclaration Dclaration d'entit (P) d'entit (P) Corps Corps d'architecture #1 d'architecture #1 (S) (S)

Composant #1 Composant #1 Corps Corps d'architecture #2 d'architecture #2 (S) (S) Composant #2 Composant #2 Composant #N Composant #N

Dclaration de Dclaration de configuration (P) configuration (P)

Entit Entit Architecture Architecture Entit Entit Architecture Architecture Entit Entit Architecture Architecture

Corps Corps d'architecture #N d'architecture #N (S) (S)A. Vachoux, v2.0, 2003

Organisation d'un modle VHDL

Le langage VHDL - 16

L'unit de conception (design unit) est le plus petit module VHDL compilable sparment. Le code source VHDL dcrivant une unit de conception est stock dans un fichier appel fichier de conception (design file). Il existe cinq types d'units de conception: La dclaration d'entit (entity declaration) dcrit la vue externe (ou l'interface) d'un composant matriel. Ceci inclut les paramtres et les ports. Le corps d'architecture (architecture body) dcrit une vue interne d'un composant matriel sous la forme d'un comportement fonctionnel et/ou d'une hirarchie de sous-composants. Il peut exister plusieurs architectures pour une mme entit. La dclaration de configuration (configuration declaration) permet d'associer une paire entit-architecture pour chaque instance de composant dans une architecture. La dclaration de paquetage (package declaration) dfinit un ensemble de dclarations (p.ex. de types, de sous-programmes) qui peuvent tre utiliss dans plusieurs units de conception. Le corps de paquetage (package body) dcrit les corps des dclarations dfinies dans la dclaration de paquetage (p.ex. les corps de sous-programmes). L'entit de conception (design entity) est l'abstraction de base en VHDL. Elle reprsente une portion dun systme matriel possdant une interface entre-sortie et une fonction bien dfinies. Une entit de conception est constitue dune dclaration dentit et dun corps darchitecture correspondant. Une entit de conception peut reprsenter un systme matriel plusieurs niveaux de complexit: un systme entier, un sous-systme, une carte, un circuit intgr, une cellule complexe (p.ex. ALU, mmoire, etc.), une porte logique. Une unit de conception est qualifie de primaire (P) ou de secondaire (S). Une unit primaire doit tre analyse (compile) avant son unit secondaire correspondante. Toute dclaration faite dans une unit primaire (p.ex. dans une entit) est visible dans toute unit secondaire correspondante (p.ex. dans une architecture).

A. Vachoux, v2.0, 2003

Le langage VHDL - 16

Entit de conception{ clause-contexte } entity nom-entit is [ generic ( liste-paramtres ) ; ] [ port ( liste-ports ) ; ] [ dclarations-locales ] [ begin { instruction-concurrente-passive } ] end [ entity ] [ nom-entit ] ;

type, sous-type constante signal sous-programme

appel concurrent de procdure assertion processus passif

type, sous-type constante, fichier signal sous-programme dclaration de composant

architecture nom-arch of nom-entit is [ dclarations-locales ] begin { instruction-concurrente } end [ architecture ] [nom-arch ] ;

affectation concurrente de signal, processus appel concurrent de procdure assertion instance de composant instruction generate

A. Vachoux, v2.0, 2003

Organisation d'un modle VHDL

Le langage VHDL - 17

Rgles de description de la syntaxe: Les mots rservs sont indiqus en gras. P. ex.: entity, begin. Les mots en italique dcrivent des catgories d'instructions. P ex.: nom-entit, instruction-concurrente. Les termes entre parentses droites ([]) sont optionnels. Les termes entre accolades ({}) peuvent tre rpts zro ou plusieurs fois. La notation "terme {, }" indique qu'un terme au moins doit tre spcifi et que plusieurs termes doivent tre spars par des virgules. Une liste de termes spars par des barres (|) indique qu'un terme de la liste doit tre slectionn. Toute autre ponctuation (p.ex. parenthses rondes, virgules, point-virgules, etc.) doit apparatre telle quelle dans le code source.

A. Vachoux, v2.0, 2003

Le langage VHDL - 17

Bibliothques de conception Clause de contextelibrary nom-bibliothque {, } ; use slection {, } ;

Noms de bibliothques: identificateurs logiques Association des rpertoires physiques en-dehors du modle VHDL

Bibliothques prdfinies WORK STD (paquetages STANDARD et TEXTIO)

Clause de contexte implicite Clause use

library std, work; use std.standard.all;

Paquetage STANDARD dfinit le type standard integer La dclaration d'une variable de ce type devrait formellement tre:variable v: std.standard.integer;

mais, grce la clause de contexte implicite on peut crire:variable v: integer;A. Vachoux, v2.0, 2003

Organisation d'un modle VHDL

Le langage VHDL - 18

Un modle VHDL ne considre que des bibliothques logiques, c..d. des noms simples. L'association de noms de bibliothques des rpertoires physiques (p.ex. des rpertoires Unix) est faite en-dehors du modle VHDL et le mcanisme dpend de l'outil utilis. VHDL supporte deux bibliothques logiques prdfinies: La bibliothque WORK stocke les units de conception analyses. C'est la seule bibliothque dans laquelle il est possible d'crire (modification d'units existantes ou insertion de nouvelles units). Toutes les autres bibliothques ne peuvent tre accdes qu'en mode de lecture. La bibliothque STD contient deux units: le paquetage STANDARD qui dfinit les types prdfinis du langage et leurs oprateurs associs, et le paquetage TEXTIO qui dfinit les types et les sous-programmes pour manipuler des fichiers textes. Un modle VHDL peut faire rfrence un nombre quelconque de bibliothques dans une clause de contexte. La clause de contexte est typiquement dclare juste avant la dclaration d'entit. Tout modle VHDL possde une clause de contexte implicite qui dclare les bibliothques standard WORK et STD. La clause use permet de spcifier les noms (de types, de sous-programmes, etc.) dclars dans un paquetage sans qu'il soit ncessaire de mentionner le chemin d'accs complet, p.ex. nom-bibliothque.nom-paquetage.nom-type

A. Vachoux, v2.0, 2003

Le langage VHDL - 18

Table des matires Introduction Organisation d'un modle VHDL

Premiers modles VHDL Modles de l'additionneur 1 bit Modles de test Reprsentation de l'information Description du comportement Description de la structure Aspects avancs Rfrences

A. Vachoux, v2.0, 2003

Le langage VHDL - 19

A. Vachoux, v2.0, 2003

Le langage VHDL - 19

Additionneur 1 bit: Dclaration d'entitcin opa opb

+cout

sum

entity add1 is generic ( TP: time := 0 ns -- temps de propagation ); port ( signal opa, opb, cin: in bit; -- oprandes, retenue entrante signal sum, cout : out bit -- somme, retenue sortante ); end entity add1;

A. Vachoux, v2.0, 2003

Premiers modles VHDL

Le langage VHDL - 20

Une dclaration d'entit dfinit la vue externe, ou l'interface, d'un composant matriel. On lui attribue un nom, ici add1, qui fait rfrence au type de composant. Les donnes d'interface incluent (optionnellement) des paramtres gnriques (generic parameters), reprsentant des constantes dont les valeurs peuvent tre diffrentes pour chaque instance du composant, et des ports (ports), reprsentant les canaux de communicationpar lesquels des signaux transitent entre le composant et le monde extrieur. Les paramtres gnriques et les ports possdent des types qui dfinissent les valeurs qu'il peuvent prendre (paramtres) ou qui transitent par les canaux (ports). VHDL possde un certain nombre de types prdfinis. Par exemple, le type time reprsente des valeurs de temps entires multiple d'un MRT (1 fs par dfaut) et le type bit reprsente une valeur logique deux tats '0' ou '1' (les apostrophes sont requises et reprsentent un caractre). Un paramtre gnrique peut possder une valeur par dfaut (ici 0 ns pour le paramtre TP). Il sera ainsi possible de dclarer une instance du composant add1 en ommettant toute rfrence ce paramtre. Un port possde un mode qui dfinit la direction dans laquelle les donnes transitent. Les modes les plus importants sont les modes in (donne entrante), out (donne sortante) et inout (donne entrante ou sortante). Notes: Le mot rserv signal peut tre omis dans la dclaration de ports (classe par dfaut). Un signal est un objet particulier en VHDL qui possde des caractristiques temporelles. Une dclaration d'entit vide est lgale et est typiquement utilise pour un modle de test. P. ex.:entity tb_add1 is end entity tb_add1;

Une dclaration d'entit peut tre compile sparment et place dans la bibliothque WORK. Elle n'est cependant pas simulable tant qu'elle n'est pas associe une architecture pour former une entit de conception. Toute chane de caractre prcde de deux tirets (--) est un commentaire.

A. Vachoux, v2.0, 2003

Le langage VHDL - 20

Additionneur 1 bit: Architecture "flot de donnes" Description d'un comportement logique combinatoire Equations logiques

S = A B Cin Cout = ( Ai B) + ( AiCin) + ( BiCin) Architecturearchitecture dfl of add1 is begin sum ci, sum => sum, cout => co); -- stimulis ci 1 -- court-circuit A**2 + B**2 4*(A + B) (A + 1) mod B

A. Vachoux, v2.0, 2003

Une expression est une formule qui spcifie comment calculer une valeur. Une expression est constitue d'oprandes (termes) et d'oprateurs. Les termes d'une expression sont typiquement des valeurs litrales (p.ex. B"001101") ou des identificateurs reprsentant des objets (constantes, variables, signaux). Les oprateurs sont associs des types. Chaque oprateur appartient un niveau de prcdance ou de priorit qui dfinit l'ordre dans lequel les termes de l'expression doivent tre valus. L'usage de parenthse permet de rendre les niveaux de priorit explicites ou de changer les niveaux par dfaut. Les oprateurs logiques and, nand, or et nor utilisent un mcanisme de court-circuit lors de l'valuation. L'oprateur and/nand n'value pas le terme de droite si le terme de gauche s'value la valeur '0' ou false. L'oprateur or/nor n'value pas le terme de droite si le terme de gauche s'value la valeur '1' ou true. Les oprateurs relationnels ne peuvent s'appliquer que sur des oprandes de mme type et retournent toujours une valeur de type boolean. Les oprandes doivent tre d'un type scalaire ou de type tableau mono-dimensionnel avec lments d'un typediscret (entier ou numr). Les oprateurs "=" et "/=" ne peuvent pas avoir des oprandes de type fichier.

A. Vachoux, v2.0, 2003

Le langage VHDL - 37

Objets et constantes Objet = lment nomm ayant des valeurs d'un type donn 4 classes d'objets: constantes, variables, signaux, fichiers Une constante possde une valeur fixe durant la simulation Dclaration de constante Exemples de dclarationsconstant PI: real := 3.1416; constant CLK_PERIOD: time := 20 ns; constant STROBE_TIME: time := CLK_PERIOD/2; -- = 10 ns constant MAX_COUNT: positive := 255; -- initialisation avec un aggrgat constant BV0: bit_vector(15 downto 0) := (others => 0); constant TT: truth_table: (others => (others => 0)); constant MEMBUS: memory_bus := (addr => X"00A7", data => X"FF", read => 0, write => 1, enable => 1);A. Vachoux, v2.0, 2003

constant nom-const {, ... } : soustype [ := expression ] ;

Reprsentation de l'information

Le langage VHDL - 38

A. Vachoux, v2.0, 2003

Le langage VHDL - 38

Variables Simple conteneur dont la valeur peut changer en cours de simulation Dclaration de variablevariable nom-var {, ... } : soustype [ := expression ] ;

Valeur initiale par dfaut = soustype'left Exemples de dclarationsvariable count: natural; variable done: boolean; variable lev: signal_level; variable rval: real; -- valeur initiale: -- 0 -- false -- -15.0 -- -1.0e-38

-- avec valeur initiale explicite variable state: states := IDLE; variable start, stop: time := STROBE_TIME + 2 ns;

A. Vachoux, v2.0, 2003

Reprsentation de l'information

Le langage VHDL - 39

Une variable possde une valeur initiale qui est dtermine partir de sa dclaration (valeur explicite) ou partir de son type (valeur par dfaut ou implicite). Dans ce dernier cas, la rgle est la suivante: Soit T le type scalaire de la variable, alors la valeur initiale par dfaut est la valeur la plus gauche des valeurs prises par le type. Par exemple: -2_147_483_648 pour le type integer, -1.0e-38 pour le type real, '0' pour le type bit, false pour le type boolean. Si T est un type composite, la rgle s'applique sparment chaque type des lments. Une variable peut changer de valeur en cours de simulation au moyen d'une instruction d'affectation de variable (instruction squentielle). Les instructions sont prsentes plus loin.

A. Vachoux, v2.0, 2003

Le langage VHDL - 39

Signaux Reprsentent des formes d'ondes logiques sous forme de paires temps/valeur Objets essentiels la modlisation de comportements concurrents Dclaration de signalsignal nom-sig {, ... } : soustype [ := expression ] ;

Exemples de dclarationssignal S: bit_vector(15 downto 0); signal CLK: bit := 1; signal reset, strobe, enable: boolean; -- valeur initiale = (others => 0) -- valeur initiale explicite -- valeur initiale = false

Un signal possde un structure de donne complexe (pilote)vcvaleur courante

tc+1 tc+2 tc+3 vc+1 vc+2 vc+3transactions futures

A. Vachoux, v2.0, 2003

Reprsentation de l'information

Le langage VHDL - 40

Les signaux sont les objets de base pour la modlisation et la simulation de systmes matriels. Leur structure (pilote - driver) permet de modliser les caractristiques temporelles des signaux rels et de prendre en compte les diffrents modes de dlais (nul, inertiel, transport). Le pilote d'un signal stocke sa valeur courante et les transactions futures prvues sur ce signal sous forme de paires temps/valeur. Les valeurs de temps sont de type time. Un signal peut tre de n'importe quel type scalaire ou composite. La rgle pour dterminer la valeur initiale d'un signal est identique celle valable pour une variable. Un signal peut changer de valeur en cours de simulation au moyen d'une instruction d'affectation de signal (instruction squentielle ou concurrente). Les instructions sont prsentes plus loin.

A. Vachoux, v2.0, 2003

Le langage VHDL - 40

Fichiers Reprsentent un stockage externe Dclaration de fichierfile nom-fichier {, } : type-fichier [ [ open mode-ouverture ] is nom-logique ] ;

Exemples de dclarationstype integer_file is file of integer; file file1, file2: integer_file; -- fichiers pas automatiquement ouverts; appel la procdure file_open requis file file3: integer_file is "intdata"; -- fichier ouvert en mode lecture et associ au nom logique "intdata" file file4: integer_file open write_mode is "intdata"; -- fichier ouvert en mode criture

Fermeture de fichiers A la fin de la simulation Au moyen de la procdure file_closeA. Vachoux, v2.0, 2003

Reprsentation de l'information

Le langage VHDL - 41

Un fichier est un objet reprsentant un dispositif de stockage externe qui peut conserver de l'information au-del d'une simulation. Un objet fichier ne peut tre que d'un type fichier. Un dclaration de fichier dfinit au moins un ou plusieurs fichiers et leur type. Le mode d'ouverture du fichier et le nom logique du fichier. Un fichier peut tre ouvert selon plusieurs modes dfinis par le type file_open_kind:type file_open_kind is (read_mode, write_mode, append_mode);

Le mode d'ouverture par dfaut est read_mode. Le nom logique optionnel est une chane de caractres. L'association du nom logique un fichier physique dpend du systme d'exploitation et ne fait ainsi pas partie du modle. Dans le cas o le mode d'ouverture et le nom logique sont omis, la procdure prdfinie file_open doit tre excute explicitement dans le modle avant tout accs un lment du fichier. L'tat de l'ouverture peut tre vrifi en examinant la valeur du paramtre status de type file_open_status:type file_open_status is (open_ok, status_error, name_error, mode_error);

Un fichier est automatiquement ferm la fin de la simulation. La procdure prdfinie file_close permet de fermer un fichier explicitement. Un fichier ne peut pas tre la cible d'une affectation. Il ne peut tre que pass en paramtre un sous-programme.

A. Vachoux, v2.0, 2003

Le langage VHDL - 41

Attributs prdfinis (1/3) Attribut = information sur un lment du langage Par exemple: longueur d'un signal bus = bus'length

Permettent d'crire des modles gnraux Notationlment ' attribut

Elment: type ou objet Attribut: type, intervalle, valeur, fonction ou signal

Attributs type address is integer range 7 downto 0; scalaires addressleft = 7 addressimage(5) = "5" utiles addressright = 0 addressvalue("4") = 4addresslow = 0 addresshigh = 7 type MVL4 is (U, 0, 1, Z); MVL4pos(U) = 0 MVL4image(Z) = "Z" MVL4pos(Z) = 3 MVL4value("0") = 0 MVL4val(2) = 1 MVL4succ(1) = Z MVL4pred(0) = UA. Vachoux, v2.0, 2003

timeimage(5 ns) = "5000000 fs" timevalue("250 ms") = 250 ms timeval(634) = 634 fs timepos(2 ps) = 2000

Reprsentation de l'information

Le langage VHDL - 42

A. Vachoux, v2.0, 2003

Le langage VHDL - 42

Attributs prdfinis (2/3) Attributs tableaux utilestype word is bit_vector(31 downto 0); type memory is array (7 downto 0) of word; variable mem: memory; -- objet memlow memhigh memleft memright mem(3)low mem(3)high memlength mem(3)length memrange memreverse_range mem(3)range type memorylow memoryhigh memoryleft memoryright wordlow wordhigh memorylength wordlength memoryrange memoryreverse_range wordrange valeur 0 7 7 0 0 31 8 32 7 downto 0 0 to 7 31 downto 0

A. Vachoux, v2.0, 2003

Reprsentation de l'information

Le langage VHDL - 43

A. Vachoux, v2.0, 2003

Le langage VHDL - 43

Attributs prdfinis (3/3) Attributs signaux utiles Objets signaux implicites: S'delayed (T) Signal ayant mme valeur que S mais retard de T units de temps (T 0 ns) S'stable(T) Signal de type boolean valant TRUE si aucun vnement n'est arriv sur S durant T units de temps (T 0 ns), et FALSE sinon Fonctions: S'event Fonction valeur de type boolean valant TRUE si un vnement est arriv sur S durant le cycle de simulation courant, et FALSE sinon S'last_event Fonction valeur de type time valant le temps coul depuis le dernier vnement sur S S'last_value Fonction valeur du type de S valant la valeur de S avant le dernier vnement sur S

A. Vachoux, v2.0, 2003

Reprsentation de l'information

Le langage VHDL - 44

A. Vachoux, v2.0, 2003

Le langage VHDL - 44

Table des matires Introduction Organisation d'un modle VHDL Premiers modles VHDL Reprsentation de l'information

Description du comportement Instructions squentielles Instructions concurrentes Initialisation et cycle de simulation Modes de dlais

Description de la structure Aspects avancs RfrencesA. Vachoux, v2.0, 2003 Le langage VHDL - 45

A. Vachoux, v2.0, 2003

Le langage VHDL - 45

Domaines d'instructions Instructions concurrentes Instructions s'excutant dans des flots spars Base pour la modlisation de systmes matriels Requirent un gestionnaire d'vnementsentity E is -- dclarations de paramtres, ports begin -- instructions concurrentes passives end entity E; architecture A of E is -- dclarations begin -- instructions concurrentes P1: process -- dclarations begin -- instructions squentielles end process P1; -- instructions concurrentes P2: process -- dclarations begin -- instructions squentielles end process P2; -- instructions concurrentes end architecture A;Le langage VHDL - 46

Instructions squentielles Instructions s'excutant dans un ordre donn Similaires celles existant dans les langages de programmation

Cycle de simulation canonique

A. Vachoux, v2.0, 2003

Description du comportement

VHDL considre deux domaines d'instructions disjoints. Chaque domaine possde ses instructions lgales qu'il n'est pas permis d'utiliser dans l'autre domaine (exception: instruction d'affectation de signal). Les instructions concurrentes (concurrent statements) permettent de modliser des comportements dirigs par les vnements qui peuvent s'excuter de manire asynchrone. Les instructions concurrentes ne peuvent tre utilises que dans la partie excutable d'une dclaration d'entit (sous rserve qu'elles soient passives, c..d. qu'elles ne modifient pas l'tat du modle) ou dans la partie excutable d'une architecture. Les instructions squentielles (sequential statements) permettent de modliser des comportements procduraux constitus d'un suite d'action excuter en squence. Les instructions squentielles ne peuvent tre utilises que dans le corps d'un processus ou d'un sous-programme. VHDL dfinit un cycle de simulation canonique qui prcise comment ces diffrentes instructions sont excutes.

A. Vachoux, v2.0, 2003

Le langage VHDL - 46

Processus Instruction concurrente la plus fondamentale Toute instruction concurrente peut s'exprimer de manire quivalente l'aide d'un processus

Syntaxeconstante type variable sous-programme

[ tiquette : ] process [ ( nom-signal { , ... } ) ] [ is ] { dclaration } begin { instruction-squentielle } end process [ tiquette ] ;

Vie et mort d'un processus Contexte local cr dans la phase d'laboration Activ/stopp durant la simulation Contexte local dtruit la fin de la simulation

Pas un sous-programme!

A. Vachoux, v2.0, 2003

Description du comportement

Le langage VHDL - 47

Le processus est la forme la plus fondamentale d'une instruction concurrente. Les contextes locaux de tous processus d'un modle sont crs avant la simulation dans la phase d'laboration. Un processus peut tre activ ou stopp un nombre quelconque de fois durant une simulation. Son contexte local est dtruit la fin de la simulation. C'est pourquoi les variables dclares conservent leur valeur d'une activation une autre. Ceci est opposer aux sous-programmes dont les contextes locaux sont dtruits la fin de leur excution et reconstruits chaque nouvelle excution. La partie excutable d'un processus ne peut contenir que des instructions squentielles.

A. Vachoux, v2.0, 2003

Le langage VHDL - 47

Modalits d'activation d'un processus Seulement si un vnement survient sur au moins un signal sensible Soit liste de sensibilit process (S1, S2, ) , soit instruction wait processbegin end process; begin wait ; end process;

Instruction wait Instruction squentielle Plusieurs instructions dans un processus possible-- liste de sensibilit wait on S1, S2, S3; -- dlai (de type time) wait for 10 ns; -- condition wait until clk = '1'; wait on clk until clk = '1'; -- quiv. au prcdant wait on reset until clk = '1'; -- plus sensible sur clk!A. Vachoux, v2.0, 2003

-- forme gnrale wait on S1, S2 until en = '1' for 15 ns; -- stop dfinitif (pas de ractivation possible) wait; wait until next_event; -- si: variable next_event: boolean;

Description du comportement

Le langage VHDL - 48

La partie excutable d'un processus n'est active que si un vnement (changement d'tat) survient sur au moins un signal dit sensible. Les signaux sensibles d'un processus peuvent tre spcifis de deux manires mutuellement incompatibles: la liste de sensibilit ou l'instruction wait. Il est interdit d'utiliser les deux formes dans le mme processus. La liste de sensibilit est une liste de noms de signaux entre parenthses spcifie juste aprs le mot rservprocess.

L'instruction wait est une instruction squentielle qui peut prendre plusieurs formes: La forme wait on est quivalente une liste de sensibilit. La forme wait for permet de spcifier un dlai d'attente de type time. La forme wait until permet de spcifier une condition. Une liste de sensibilit constitue de tous les signaux rfrencs dans la condition est implicitement considre. La liste de sensibilit peut tre rendue explicite, mais dans ce cas tout vnement sur un signal rfrenc dans la condition mais pas dans la liste de sensibilit sera ignor en simulation. La forme gnrale wait on until for ractive le processus de toute faon aprs le dlai spcifi. L'instruction wait suspend le processus de manire dfinitive si l'instruction ne fait rfrence aucun signal.

A. Vachoux, v2.0, 2003

Le langage VHDL - 48

Instruction d'affectation de signal (1/2) Forme gnrale[ tiquette : ] nom-signal S2 Si plus de transactions OU temps = time'high -> STOP Sinon, Tn = temps prochaine transaction, = 0. S5. Excuter tous les processus retards (postponed). S6. -> S1.

A. Vachoux, v2.0, 2003

Description du comportement

Le langage VHDL - 58

La simulation dun modle VHDL dbute par une phase dinitialisation et est suivie par lexcution rptitive dun cycle de simulation. Durant la phase dinitialisation, chaque signal et variable reoit une valeur initiale qui est soit dtermine par son type, soit par lexpression qui accompagne sa dclaration. Le temps de simulation courant (Tc) est ensuite mis zro, chaque processus est activ et ses instructions sont excutes jusqu la premire instruction wait rencontre. Chaque processus est finalement suspendu lendroit de linstruction wait. Lexcution des instructions des processus gnre usuellement des transactions dans des pilotes de signaux. Une affectation de signal dlai nul gnre une transaction traiter au temps de simulation courant (dlai ou cycle delta). Une affectation de signal dlai non nul gnre une transaction traiter un temps futur. Finalement, le temps du prochain vnement traiter (Tn) est dtermin: soit le temps courant (cycle delta), soit un temps futur, soit la fin de la simulation. Le cycle de simulation proprement dit commence par affecter le temps du prochain vnement au temps courant. Toutes les transactions prvues ce temps sont alors appliques, ce qui se traduit par une ventuelle mise jour de la valeur courante de signaux. Une transaction aboutissant un changement de valeur dun signal dfinit un vnement sur ce signal. Tous les processus sensibles aux signaux qui ont subit un vnement sont ensuite ractivs et leurs instructions excutes jusqu la prochaine instruction wait. Cette tape gnre normalement de nouvelles transactions sur des signaux, soit au temps de simulation courant (dlai ou cycle delta), soit un temps futur. Si ce nest pas le cas, ou si lon a atteint la valeur maximum du temps reprsentable pour la base de temps utilise, la simulation stoppe. Un signal ne prend jamais sa nouvelle valeur immdiatement, mais toujours au dbut du cycle de simulation suivant. Cette rgle permet dobtenir les mmes rsultats de simulation quelque soit lordre dexcution des processus.

A. Vachoux, v2.0, 2003

Le langage VHDL - 58

Exemple de simulation dlai nul (1/2)entity noteq is port (A, B: in bit; Z: out bit); end entity noteq; architecture dfl of noteq is signal C, D, E: bit; begin P1: C 3 ns) port map (i => sint, o => bout); end architecture str;Description de la structureLe langage VHDL - 66

A. Vachoux, v2.0, 2003

Une instance de composant (component instantiation statement) est une instruction concurrente. Elle dfinit une instance uniquement identifiable d'un composant (virtuel). L'unicit de l'instance est dfinie par son tiquette obligatoire (p.ex. inv1, inv2). Les associations de paramtres (generic map) et de ports (port map) dfinissent des associations locales entre les noms utiliss dans la dclaration de composant (paramtres et ports formels) et les paramtres et ports effectifs de l'instance. Les paramtres et les ports de mode in peuvent tre associs des valeurs litrales. P. ex.: 2.5 ns pour TD. Le modle du buffer n'est pas forcment simulable dans la mesure o les instances de composants ne sont pas encore associes des entits de conceptions. Ces associations doivent tre effectues par une configuration.

A. Vachoux, v2.0, 2003

Le langage VHDL - 66

Dclaration de configuration Unit de conception Syntaxeconfiguration nom-configuration of nom-entit is for nom-architecture tiquette { ,... } | others | all : nom-composant { for spcification-composant indication-association ; end for ; } use entity nom-entit end for ; [ generic map ( liste-association-paramtres ) ] end [ configuration ] [ nom-configuration ] ; [ port map ( liste-association-ports ) ]

Configuration globale une entit de conception identifie par nom-entit(nom-architecture) Configuration hirarchique possible

A. Vachoux, v2.0, 2003

Description de la structure

Le langage VHDL - 67

Une dclaration de configuration (configuration declaration) est une unit de conception. Elle est donc compilable sparment. Elle a pour but d'associer les instances de composants d'une entit de conception identifie par nom-entit(nomarchitecture) des entits de conceptions disponibles dans une bibliothque. Les associations peuvent tre dfinies pour un nombre quelconque de niveaux hirarchiques. La syntaxe d'une dclaration de configuration est relativement complexe car elle peut prendre en compte tous les cas d'associations, parmi lesquels on peut citer: L'entit de conception associer dispose de plusieurs architectures possibles (dans une mme bibliothque ou dans des bibliothques diffrentes). Les noms du composant dclar, de ses paramtres ou de ses ports sont diffrents de ceux de l'entit de conception lui associer. La dclaration de composant dclare moins de paramtres ou de ports que la dclaration d'entit lui associer. Les instances d'un composants ncessitent des associations de paramtres ou de ports diffrentes. L'architecture configurer est hirarchique. La dclaration de configuration dfinit la vue globale pour la simulation. Son chargement dans le simulateur va forcer le chargement automatique de toutes les entits de conceptions associes aux instances de composants. Une indication d'association peut associer des lments de noms diffrents, mais il est ncessaire que leurs types soient compatibles.

A. Vachoux, v2.0, 2003

Le langage VHDL - 67

Exemple de dclaration de configurationassociations globalesentity inverter is generic (TD: delay_length := 0 ns); port (iin: in bit; iout: out bit); end entity inverter; architecture bhv of inverter is begin iout 2.5 ns) port map (i => bin, o => sint); inv2: component inv generic map (TD => 3 ns) port map (i => sint, o => bout); end architecture str2;Le langage VHDL - 68

library complib; configuration cfg_buffer_str2 of buffer is for str2 for all: inv -- or: for inv1, inv2: inv use entity complib.inverter(bhv) generic map (TD => TD) port map (iin => i, iout => o); end for; -- all: inv end for; -- str2 end configuration cfg_buffer_str2;A. Vachoux, v2.0, 2003

Description de la structure

A. Vachoux, v2.0, 2003

Le langage VHDL - 68

Configuration par dfaut Dclaration de composant et dclaration d'entit ont mme signature Nom du composant et de l'entit identiques Mme liste de paramtres gnriques, mmes noms et types Mme liste de ports, mmes noms, mmes types, mmes directions

Association implicite sans configuration Si plusieurs architectures existent pour une mme entit, l'architecture analyse le plus rcemment est considre

A. Vachoux, v2.0, 2003

Description de la structure

Le langage VHDL - 69

A. Vachoux, v2.0, 2003

Le langage VHDL - 69

Exemple de configuration par dfautentity inverter is generic (TD: delay_length := 0 ns); port (iin: in bit; iout: out bit); end entity inverter; architecture bhv of inverter is begin iout 2.5 ns) port map (iin => bin, iout => sint); inv2: component inverter generic map (TD => 3 ns) port map (iin => sint, iout => bout); end architecture str2;A. Vachoux, v2.0, 2003

Description de la structure

Le langage VHDL - 70

A. Vachoux, v2.0, 2003

Le langage VHDL - 70

Table des matires Introduction Organisation d'un modle VHDL Premiers modles VHDL Reprsentation de l'information Description du comportement Description de la structure

Aspects avancs Gnricit Sous-programmes Fonction de rsolution Paquetages

RfrencesA. Vachoux, v2.0, 2003 Le langage VHDL - 71

A. Vachoux, v2.0, 2003

Le langage VHDL - 71

Paramtres gnriques (1/4) Permettent d'crire des modles gnraux Spcifis dans l'entit par une clause generic Exemple: additionneur gnrique N bitsentity addn is generic ( TP: time := 0 ns; -- temps de propagation NB: natural := 8 -- nb de bits des oprandes ); port ( opa, opb: in bit_vector(NB-1 downto 0); cin : in bit; sum : out bit_vector(NB-1 downto 0); cout : out bit ); end entity addn; architecture dfl of addn is begin process (cin, opa, opb) variable ccin, ccout: bit; variable result: bit_vector(sum'range); begin ccout := cin; for i in sum'reverse_range loop ccin := ccout; result(i) := opa(i) xor opb(i) xor ccin; ccout := (opa(i) and opb(i)) or (ccin and (opa(i) or opb(i))); end loop; sum 2 ns);

ougeneric map (TP => 2 ns, NB => open);

A. Vachoux, v2.0, 2003

Le langage VHDL - 73

Paramtres gnriques (3/4) Exemple: flip-flop D avec vrification de contraintes temporellesentity dff is generic ( Tpd_clk_q, -- temps de propagation Tsu_d_clk, -- temps de pr-positionnement Th_d_clk: delay_length); -- temps de maintien port (clk, d: in bit; q: out bit); end entity dff;

architecture bhv of dff is begin behavior: q = Tsu_d_clk report "Setup violation"; end process check_setup; check_hold: process is begin wait until clkdelayed(Th_d_clk) = 1; assert ddelayedlast_event >= Th_d_clk report "Hold violation"; end process check_hold; end architecture bhv;A. Vachoux, v2.0, 2003

clk

d

q Ts u_d_clk Th_d_clk Tpd_clk_q

Aspects avancs

Le langage VHDL - 74

Un exemple typique dutilisation de paramtres gnriques est la spcification de paramtres temporels permettant de caractriser le mme comportement dans des conditions diffrentes. On considre ici le modle dun flip-flop D avec ses caractristiques temporelles: temps de propagation, temps de pr-positionnement (setup time) et temps de maintien (hold time). Dans le modle, les caractristiques temporelles (temps de propagation Tpd_clk_q, temps de pr-positionnement Tsu_d_clk et temps de maintien Th_d_clk sont dfinis comme des paramtres gnriques. Le corps darchitecture est compos de trois processus concurrents. Le premier, nomm behavior, dfinit le comportement du composant en tenant compte du temps de propagation. Le deuxime, nomm check_setup, vrifie le temps de prpositionnement. Le troisime, nomm check_hold, vrifie le temps de maintien. Noter lusage des attributs prdfinis sur les signaux last_event et delayed. Ce dernier attribut permet de prendre en compte correctement les cas o les signaux clk et d changent de valeurs simultanment. S'delayed a la mme valeur que S, mais retard d'une itration delta.

A. Vachoux, v2.0, 2003

Le langage VHDL - 74

Paramtres gnriques (4/4) Exemple: flip-flop D avec vrification de contraintes temporelles et processus passifsentity dff is generic ( Tpd_clk_q, -- temps de propagation Tsu_d_clk, -- temps de pr-positionnement Th_d_clk: delay_length); -- temps de maintien port (clk, d: in bit; q: out bit); begin check_setup: process is begin wait until clk = 1; assert dlast_event >= Tsu_d_clk report "Setup violation"; end process check_setup; check_hold: process is begin wait until clkdelayed(Th_d_clk) = 1; assert ddelayedlast_event >= Th_d_clk report "Hold violation"; end process check_hold; end entity dff;

architecture bhv of dff is begin behavior: q a(0), opb => b(0), cin => 0, sum => s_unbuffered, cout => c(0)); end generate LSB; OTHERB: if i /= 0 generate FAi: entity work.add1(dfl) port map (opa => a(i), opb => b(i), cin => c(i-1), sum => s_unbuffered, cout => c(i)); end generate OTHERB; OUT_STAGE: process (en) entity addn is begin generic (wsize: positive := 8); if en = 1 then port ( z(i) = Tsetup P1: process (clk, enable) is report "Setup time violation" severity error; begin end if; check_setup(clock, enable, Tsu_en_clk); end procedure check_setup; end process P1; begin P1: check_setup(clk => clock, data => enable, Tsetup => Tsu_en_clk); P2: check_setup(clock, din, Tsu_din_clk); P2: process (clk, din) is P3: dout 50 ns, Tpulse => 20 ns, Tphase => 0 ns); gen_phi2: clkgen(phi2, Tperiod => 50 ns, Tpulse => 20 ns, Tphase => 25 ns);A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 83

A. Vachoux, v2.0, 2003

Le langage VHDL - 83

Fonctions (1/2) Syntaxe: dclaration de fonctionfunction nom-fonction [ ( liste-paramtres-formels) ] return sous-type is { dclaration-locale } type, sous-type, constante, variable, begin dclaration de sous-programme { instruction-squentielle } end [ function ] [ nom-fonction ] ;

Classes de paramtres formels:[ constant ] identificateur { ,... } : [ in ] sous-type ; [ signal ] identificateur { ,... } : [in] sous-type ; [ file ] identificateur { ,... } : sous-type ;

Le corps de fonction doit contenir au moins une instruction return Syntaxe: appel de fonction

[ tiquette : ] return expression ;

nom-fonction [ ( liste-paramtres-actuels ) ] ;

Associations paramtre formel - paramtre actuel par nom ou par position Les dclarations locales sont (re)cres chaque dbut d'excution et dtruites en fin d'excution de la fonctionA. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 84

Les paramtres formels d'une fonction peuvent tre de classe constante, signal ou fichier. Les deux premires classes de paramtres ne peuvent qu'tre de mode in. Les paramtres de classe fichier n'ont pas de mode. Le mode d'accs d'un fichier est dfini dans sa dclaration. Le corps d'une fonction peut inclure des instructions squentielles avec les restrictions suivantes: Il doit inclure au moins une instruction return. Cette instruction a pour effet de retourner une valeur associe au nom de la fonction dans l'expression qui appelle cette fonction. L'instruction wait n'est pas admise. L'association des paramtres peut se faire par nom ou par position et doit respecter les rgles suivantes: Pour un paramtre formel de classe constante, le paramtre effectif peut tre une constante (litral ou expression), une variable ou un signal. Pour un paramtre formel de classe variable, signal ou fichier, le paramtre effectif ne peut tre qu'un objet de la mme classe. Il est important de noter que les dclarations locales sont dtruites la terminaison de la fonction et rlabores la prochaine excution. Une fonction ne peut pas conserver un tat.

A. Vachoux, v2.0, 2003

Le langage VHDL - 84

Fonctions (2/2) Exemple: conversion bit_vector -> entierarchitecture A of E is function bv_to_nat (bv: in bit_vector) return natural is variable result: natural := 0; begin for i in bvrange loop -- hyp.: MSB = bvleft result := result*2 + bit'pos(bv(i)); end loop; return result; end function bv_to_nat; signal data_bv1, data_bv2: bit_vector(15 downto 0); signal data_nat1, data_nat2: natural; begin data_nat1