Você está na página 1de 99

Le langage VHDL

Alain Vachoux Laboratoire de Systmes Microlectroniques alain.vachoux@epfl.ch

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 Rfrences
A. 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 EDA
A. 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 VHDL
1980 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'application
Domaines 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 algorithmique
procedure 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 RTL
B 1 C L K 0 D IR S RB CL R SH IF T SH IFT L D L D S RA C L R A D IR 0 K C L 0 S T B
P processus SRB SR A XOR

donne contrle

C L K AD D ER SH IFT D O N E L S B ST B IN IT FSMC o ntroller AD D C L R AC C L D

begin tche1 tche2 ... wait on ...

AD DER ACC FSM

RES U L T

D O N E

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 1
bus

'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 1
A. Vachoux, v2.0, 2003

5
Introduction

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 VHDL
Editeur (texte ou graphique)

Code source VHDL

Analyseur VHDL

Format intermdiaire

WORK bibliothque(s)

Elaborateur

Modle excutable

Simulateur
Introduction

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 conception
Entit 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 d'architecture #1 #1 (( S )) S

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

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

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

Corps Corps d'architecture d'architecture #N #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 contexte
library 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'entit


cin 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)


Architecture
architecture dfl of add1 is begin sum <= opa xor opb xor cin after TP; cout <= (opa and opb) or (opa and cin) or (opb and cin) after TP; end architecture dfl;

Entit de conception add1(dfl)

A. Vachoux, v2.0, 2003

Premiers modles VHDL

Le langage VHDL - 21

Le nom de l'architecture, dfl, fait rfrence au style de description "flot de donnes" (dataflow) utilis pour dcrire le comportement de l'additionneur, savoir un ensemble d'oprations logiques appliques des signaux. Ce style est adapt la description de comportements logiques combinatoires. L'architecture fait explicitement rfrence la dclaration d'entit add1. Toutes les dclaration faites dans l'entit sont ainsi utilisables (visibles) sans redclaration dans l'architecture. La notation add1(dfl) dfinit ainsi une entit de conception simulable. Chaque quation logique est exprime dans l'architecture comme une affectation concurrente de signal (concurrent signal assignment) dnote par le signe "<=". Les expressions droite de ce signe utilisent des oprateurs logiques prdfinis (and, or, xor) et leurs valuations produisent des valeurs de type bit. Noter que l'usage d'oprateurs n'implique aucune structure hirarchique. L'affectation de nouvelles valeurs aux signaux sum et cout est faite avec un certain dlai dont la valeur est dfinie par le paramtre gnrique TP. Ceci est spcifi par la clause after la fin de chaque instruction. Si TP = 0 ns, les affectations auront apparemment lieu immdiatement. La smantique d'affectation de signal en VHDL est complexe et sera vue en dtail plus loin. Ce qu'il faut retenir ce stade est qu'un signal ne prend jamais sa nouvelle valeur immdiatement (mme et surtout en mode de dlai nul). Cette caractristique permet de modliser correctement la concurrence naturelle des systmes matriels. Dans l'exemple ci-dessus, chaque instruction d'affectation est en fait un processus qui n'est activ (dont l'expression de droite est rvalue) que si un vnement (un changement de valeur) survient sur au moins un des signaux rfrencs dans l'expression de droite. Ainsi, l'ordre dans lequel ces instructions sont spcifies n'a aucune influence sur le rsultat de la simulation.

A. Vachoux, v2.0, 2003

Le langage VHDL - 21

Additionneur 1 bit: Architecture "algorithmique"


Description l'aide d'un comportement squentiel
opa opb cin architecture algo of add1 is begin process (opa, opb, cin) variable tmp: integer; begin tmp := 0; if opa = '1' then tmp := tmp + 1; end if; if opb = '1' then tmp := tmp + 1; end if; if cin = '1' then tmp := tmp + 1; end if; if tmp > 1 then cout <= '1' after TP; else cout <= '0' after TP; end if; if tmp mod 2 = 0 then sum <= '0' after TP; else sum <= '1' after TP; end if; end process; end architecture algo;

processus

sum

cout

Entit de conception add1(algo)

A. Vachoux, v2.0, 2003

Premiers modles VHDL

Le langage VHDL - 22

Le style de description "algorithmique" consiste dcrire le comportement du composant sous la forme d'une squence d'instructions. Ceci signifie que l'ordre dans lequel ces instructions sont spcifies est important. L'architecture algo utilise une instruction processus explicite (process statement) dont le corps inclut des instructions squentielles qui ne sont excutes que si un vnement survient sur au moins l'un des signaux dits sensibles. Ici il s'agit des signaux opa, opb et cin spcifis dans une liste de sensibilit (sensitivity list) juste aprs le mot rserv process. Le processus de l'exemple stoppe lorsque le flot d'excution atteint la dernire instruction du processus. Il attend alors sur un autre vnement et recomencera l'excution partir de la premire instruction aprs le mot rserv begin. Des modalits d'excution avec des conditions d'activation plus complexes sont possibles et seront prsentes plus loin. Le corps du processus dclare une variable tmp qui permet de mmoriser des rsultats intermdiaires. Les variables sont des objets particuliers en VHDL qui ne peuvent tre utiliss que dans un corps de processus. L'affectation de variable est dnote par le signe ":=". Contrairement un signal, une variable prend sa nouvelle valeur immdiatement aprs l'affectation. Comme un processus est cr avant le dbut de la simulation (laboration) et n'est dtruit qu' la fin de la simulation, une variable conserve sa valeur entre deux activations successives du processus. C'est pourquoi il est ncessaire, dans l'exemple, d'affecter la valeur 0 la variable tmp au dbut du processus pour obtenir un rsultat correct en simulation. Dans d'autres cas, la rmanence d'une variable est acceptable car elle reprsente un tat interne. VHDL dispose de toutes les instructions squentielles essentielles: instruction conditionnelle, slective, de boucle. Il est recommand d'utiliser le plus possible l'affectation de variable dans le corps d'un processus et d'affecter les rsultats des calculs des signaux au dernier moment (juste avant que le processus ne stoppe).

A. Vachoux, v2.0, 2003

Le langage VHDL - 22

Additionneur 1 bit: Architecture "structurelle" (1/2)


Description d'une hirarchie de composants interconnects
library gates; architecture str of add1 is signal s1, s2, s3, s4: bit; begin A1: entity gates.and2d1(dfl) generic map (TPR => TP) port map (i1 => opa, i2 => opb, o => s1); A2: entity gates.and2d1(dfl) generic map (TPR => TP) port map (i1 => s2, i2 => cin, o => s3); O1: entity gates.or2d1(dfl) generic map (TP) port map (opa, opb, s2); O2: entity gates.or2d1(dfl) generic map (TP) port map (s3, s1, cout); X1: entity gates.ex2d1(dfl) generic map (TPR => TP) port map (o => s4, i1 => opa, i2 => opb); X2: entity gates.ex2d1(dfl) generic map (TP) port map (s4, cin, sum); end architecture str;
Le langage VHDL - 23

Instanciation directe Entit de conception add1(str)

A. Vachoux, v2.0, 2003

Premiers modles VHDL

Le style de description "structurel" consiste dcrire un modle sous la forme d'une interconnexion de composants communiquant par l'intermdiaire de signaux. L'architecture str utilise le mcanisme dit d'instanciation directe (direct instantiation) qui permet d'inclure directement une entit de conception dans le modle. Par analogie avec un circuit imprim, on "soude" chaque instance d'entit de conception (de composant discret) dans l'architecture (sur la carte). VHDL permet aussi l'utilisation d'un mcanisme d'instanciation indirecte bas sur la dclaration de composants et l'association des entits de conception au moyen de configurations spares. Ceci sera prsent plus loin dans le chapitre relatif la description de structures. Chaque instance de composant possde une tiquette unique (p.ex. A1 et A2 pour les deux instances de portes AND) et associe (map) les paramtres gnriques et les ports actuels (c..d. dclars dans l'entit de conception add1(str)) leurs quivalents formels (c..d. dclars au niveau de l'entit de conception instancie). L'association peut tre faite par association de noms (named association) sous la forme "formel => actuel", p.ex. pour les instances A1 et A2, ou par association positionnelle (positional association) pour laquelle seuls les lments actuels sont spcifis dans l'ordre de dclaration des lments formels, p.ex. pour les instances O1 et O2. L'association par noms est prfrable car elle documente mieux comment chaque instance est connecte. L'interconnexion interne des instances de composants est effectue par la dclaration de signaux locaux s1, s2, s3 et s4 et par l'association de ces signaux (actuels) aux ports formels des instances. Les entits de conceptions instancies sont supposes avoir t pralablement analyses et stockes dans une bibliothque de nom logique gates. La dclaration de bibliothque (clause library) est requise pour rendre cette bibliothque visible dans l'architecture.

A. Vachoux, v2.0, 2003

Le langage VHDL - 23

Additionneur 1 bit: Architecture "structurelle" (2/2)


entity and2d1 is generic (TPR: time := 0 ns); port (i1, i2: in bit; o: out bit); end entity and2d1; architecture dfl of and2d1 is begin o <= i1 and i2 after TPR; end architecture dfl; entity or2d1 is generic (TPR: time := 0 ns); port (i1, i2: in bit; o: out bit); end entity or2d1; architecture dfl of or2d1 is begin o <= i1 or i2 after TPR; end architecture dfl;

Bibliothque "gates"

entity ex2d1 is generic (TPR: time := 0 ns); port (i1, i2: in bit; o: out bit); end entity ex2d1 ; architecture dfl of ex2d1 is begin o <= i1 xor i2 after TPR; end architecture dfl;
A. Vachoux, v2.0, 2003

Premiers modles VHDL

Le langage VHDL - 24

Ces modles de portes logiques sont extrmement simplifis. Les modles VHDL fournis par les fonderies pour les bibliothques de cellules standard tiennent compte de beaucoup plus de caractristiques physiques comme des temps de propagation dpendant du type de transition et des chemins pris par les signaux dans les cellules. Les modles sont normalement dvelopps en fonction de la norme IEEE 1076.4 (VITAL).

A. Vachoux, v2.0, 2003

Le langage VHDL - 24

Additionneur 1 bit: Modle de test (1/3)


entity tb_add1 is end entity tb_add1; Modle de test architecture bench of tb_add1 is signal op1, op2, ci, sum, co: bit; begin -- unit tester UUT: entity work.add1(dfl) generic map (TP => 1.2 ns) port map ( opa => op1, opb => op2, cin => ci, sum => sum, cout => co); -- stimulis ci <= not ci after 20 ns; op1 <= not op1 after 10 ns; op2 <= not op2 after 5 ns; end architecture bench;
A. Vachoux, v2.0, 2003

Stimulis

UUT

Rsultats

op1 '0' '0' '1 '1' '0' '0' '1 '1'

op2 '0' '1' '0' '1' '0' '1' '0' '1'

ci '0' '0' '0' '0' '1' '1' '1' '1'

sum '0' '1' '1' '0' '1' '0' '0' '1'

co '0' '0' '0' '1' '0' '1' '1' '1'

Premiers modles VHDL

Le langage VHDL - 25

Un modle de test est un modle ferm en ce sens qu'il ne possde pas de communication avec le monde extrieur. Il instancie typiquement l'unit tester (UUT - Unit Under Test), dfinit un ensemble de stimulis qui vont exercer l'unit tester et inclut des instructions pour interprter les rsultats de la simulation. Dans l'exemple ci-dessus, l'unit tester est l'entit de conception add1(dfl) (le modle "flot de donnes" de l'additionneur 1 bit) avec un temps de propagation de 1.2 ns. Les stimulis sont dfinis par trois affectations concurrentes de signaux de telle manire que la table de vrit de l'additionneur soit vrifie. Ces affectations ralisent de simples commutations entre tat '0' et '1' des frquences doublant chaque fois. Les valeurs initiales des signaux ci, op1 et op2 valent toutes '0' selon la rgle VHDL que tout signal ou variable de type numr (le type bit est un type deux tats dfinis dans l'ordre '0', '1') prend comme valeur initiale par dfaut la valeur la plus gauche de l'numration, soit '0' dans notre cas. La vrification que la table de vrit est bien satisfaite doit se faire par examen visuel des formes d'ondes obtenues en simulation.

A. Vachoux, v2.0, 2003

Le langage VHDL - 25

Additionneur 1 bit: Modle de test (2/3)


Rsultats de la simulation du modle de test

A. Vachoux, v2.0, 2003

Premiers modles VHDL

Le langage VHDL - 26

A. Vachoux, v2.0, 2003

Le langage VHDL - 26

Additionneur 1 bit: Modle de test (3/3)


Modle plus complet
entity tb_add1 is end entity tb_add1; architecture bench2 of tb_add1 is signal op1, op2, ci, sum, co: bit; begin UUT: entity work.add1(dfl) generic map (TP => 1.2 ns) port map ( opa => op1, opb => op2, cin => ci, sum => sum, cout => co); Stimulus_check: process type table_elem is record x, y, ci, co, s: bit; end record; type table is array (0 to 7) of table_elem;
A. Vachoux, v2.0, 2003

constant TT: table := (-- x -- y -- ci ------ co -- s -('0', '0', '0', '0', '0'), ('0', '0', '1', '0', '1'), ('0', '1', '0', '0', '1'), ('0', '1', '1', '1', '0'), ('1', '0', '0', '0', '1'), ('1', '0', '1', '1', '0'), ('1', '1', '0', '1', '0'), ('1', '1', '1', '1', '1')); begin for i in TT'range loop op1 <= TT(i).x; op2 <= TT(i).y; ci <= TT(i).ci; wait for 5 ns; assert co = TT(i).co and sum = TT(i).s; end loop; wait; -- stop dfinitif du processus end process Stimulus_check; end architecture bench2;
Le langage VHDL - 27

Premiers modles VHDL

Un modle de test plus labor pour le modle "flot de donnes" de l'additionneur 1 bit est donn ci-dessus. Il a toujours pour but de vrifier la table de vrit, mais il inclut en plus un mcanisme de vrification automatique des rsultats de la simulation avec mission d'un message lorsque une entre de la table n'est pas vrifie. Le processus appel Stimulus_check dfinit une structure de donne permettant de mmoriser la table de vrit et les rsultats attendus. Un tableau (array) constant de huit lments appel TT contient un test par lment. Chaque lment est un enregistrement (record) de cinq champs dfinissant un jeu de stimulis et les rsultats attendus pour ces stimulis. Le corps du processus parcourt chaque lment du tableau toutes les 5 ns. Il affecte les stimulis dfinis dans les trois premiers champs, applique les stimulis sur l'unit tester et vrifie que les signaux de sortie ont les valeurs attendues. Si ce n'est pas le cas, l'instruction d'assertion (assert) telle quelle est spcifie dans le modle va simplement produire un message sur la console indiquant que l'assertion a t viole. Noter que le temps d'attente entre l'application de deux jeux de stimulis successifs doit tre plus grand ou gal au temps de propagation de l'unit tester. Une fois que le processus a parcouru tous les lments du tableau TT, il stoppe dfinitivement.

A. Vachoux, v2.0, 2003

Le langage VHDL - 27

Table des matires


Introduction Organisation d'un modle VHDL Premiers modles VHDL

Reprsentation de l'information
Types, sous-types Objets Attributs
Description du comportement Description de la structure Aspects avancs Rfrences

A. Vachoux, v2.0, 2003

Le langage VHDL - 28

A. Vachoux, v2.0, 2003

Le langage VHDL - 28

Types et sous-types
Type = ensemble de valeurs + oprateurs associs Sous-type = type driv d'un type de base (type parent) avec contraintes 4 classes de types
Types scalaires: entier, rel, numr, physique Types composites: tableaux, enregistrements Pointeurs Fichiers
type nom-type is dfinition ; subtype nom-soustype is dfinition ;

Dclaration de type: Dclaration de sous-type:

Types et sous-types prdfinis dans le paquetage STANDARD

A. Vachoux, v2.0, 2003

Reprsentation de l'information

Le langage VHDL - 29

VHDL est un langage fortement typ: tout objet appartient explicitement ou implicitement un type ou un soustype. Ceci signifie aussi qu'il n'est pas possible de mlanger des objets de types diffrents dans une expression sans spcifier des conversions explicites. Des objets appartenant un sous-type sont toutefois compatibles avec des objets appartenant au type de base (ou type parent). VHDL possde un certain nombre de types et de sous-types prdfinis. Leurs dclarations sont incluses dans le paquetage STANDARD de la bibliothque STD. La clause de contexte implicite permet de faire rfrence ces (sous-)types sans qu'il soit ncessaire de spcifier le chemin complet (STD.STANDARD.(sous-)type).

A. Vachoux, v2.0, 2003

Le langage VHDL - 29

Types numriques
Types et sous-types numriques prdfinis
type integer is implementation defined; -- au moins 32 bits: [-2147483647, + 2147483647] type real is implementation defined; -- au moins [-1.0e38, +1.0e38] subtype natural is integer range 0 to integer'high; subtype positive is integer range 1 to integer'high;

Exemples de types et sous-types non prdfinis


type memory_size is range 1 to 2048; -- intervalle montant subtype word_index is natural range 31 downto 0; -- intervalle descendant type signal_level is range -15.0 to 15.0; subtype probability is real range 0.0 to 1.0;

Oprateurs
Arithmtiques: + (unaire & binaire) * / abs mod rem (seulement pour types entiers) ** (puissance entire) = /= < <= > >=

Relationnels:

A. Vachoux, v2.0, 2003

Reprsentation de l'information

Le langage VHDL - 30

A. Vachoux, v2.0, 2003

Le langage VHDL - 30

Types numrs
Enumration de toutes les valeurs possibles Types numrs prdfinis
type bit is ('0', '1'); -- caractres type boolean is (false, true); -- identificateurs type character is 256 caractres du jeu ISO 8859-1; type severity_level is (NOTE, WARNING, ERROR, FAILURE);

Exemples de types et sous-types non prdfinis


type logic4 is ('0', '1', 'X', 'Z'); -- surcharge avec type bit type states is (IDLE, INIT, CHECK, ADD, SHIFT); type mixed is (FALSE, '1', '2', '3', IDLE); -- surcharges avec types bit, boolean et states

Qualification de type Oprateurs

logic4'('1') states'(IDLE)

bit'('1') mixed'(IDLE)

Relationnels: = /= < <= Logiques: and or nand (types bit & boolean seulement)
A. Vachoux, v2.0, 2003

> >= nor xor

xnor

not
Le langage VHDL - 31

Reprsentation de l'information

L'ordre dans lequel les litraux sont spcifis est important car chaque lment de la liste est rfrenc par un nombre entier indiquant sa position (position number). Le premier lment a la position 0. Ceci permet de dfinir des oprateurs relationnels. Des dclarations de types numrs diffrentes peuvent inclure le mme identificateur ou le mme caractre. ce mcanisme est appel surcharge (overloading) . Comme il n'est pas toujours vident de dterminer par le contexte quel type numr l'identificateur ou le caractre appartient, une qualification de type est ncessaire en cas de surcharge.

A. Vachoux, v2.0, 2003

Le langage VHDL - 31

Types physiques
Types entiers avec facteurs d'chelle Type et sous-type prdfinis
type time is range implementation defined units fs; -- unit primaire et rsolution temporelle ps = 1000 fs; ns = 1000 ps; hr = 60 min; end units; subtype delay_length is time range 0 fs to time'high;

-- exemples de litraux: 5 ns ms 8.25 ns (= 8250 ps) 5.6943 ps (= 5694 fs)

Oprateurs
Arithmtiques: Relationnels: + = (unaire & binaire) * /= < <= > >= / abs

Le type time est utile pour spcifier des dlais et pour grer la simulation dirige par les vnements
A. Vachoux, v2.0, 2003

Reprsentation de l'information

Le langage VHDL - 32

Les types physiques ont t introduits en VHDL pour reprsenter des valeurs de quantits physiques telles que le temps, une longueur, une masse ou une tension lectrique en permettant de spcifier des facteurs d'chelle. En pratique, seul le type prdfini time a conserv une utilit. Le type time reprsente le temps simul. La limite de rsolution (MRT) par dfaut est la fs (unit primaire). Les valeurs de temps plus petites que la limite de rsolution sont ramenes zro. Un simulateur peut permettre de spcifier une limite de rsolution secondaire comme un multiple entier de l'unit primaire (p.ex. 100 ps ou 1 ns). Ceci permet de simuler un plus grand intervalle de temps, au prix d'une perte de prcision temporelle. Il est possible de convertir un litral de type time en un litral de type integer et rciproquement en utilisant respectivement la division ou la multiplication:
10 ms / ms = 10 25 * ns = 25 ns

A. Vachoux, v2.0, 2003

Le langage VHDL - 32

Types tableaux (1/2)


Collection d'lments de mme type Types prdfinis
Non contraints
type bit_vector is array (natural range <>) of bit; type string is array (positive range <>) of character;

Exemples de types non prdfinis


type word is array (31 downto 0) of bit; -- intervalle descendant type memory is array (0 to 255) of word; -- intervalle montant type truth_table is array (bit, bit) of bit;

Accs aux lments d'un tableau


-- soit W un objet de type word, M de type memory, et TT de type truth_table W(15) -- bit d'indice 15 M(122) -- mot d'indice 122 M(122)(8) -- bit d'indice 8 du mot d'indice 122 TT(0, 1) -- bit la ligne 1 et colonne 2 -- tranches W(31 downto 16) -- 16 bits les plus significatifs M(129 to 255) -- portion haute de la mmoire
A. Vachoux, v2.0, 2003

Reprsentation de l'information

Le langage VHDL - 33

Un type tableau dfinit une collection d'lments dont les valeurs sont du mme type de base. La position de chaque lment dans le tableau est dfinie par un (tableau mono-dimensionnel) ou plusieurs (tableau multidimensionnel) indices de types scalaires. Le domaine d'indices d'un tableau peut tre ascendant (to) ou descendant (downto). Le tableau est dit contraint (constrained). Un type tableau peut aussi tre non contraint (unconstrained): son domaine d'indice n'est pas spcifi la dclaration de type et la notation "<>" (box) est utilise. La spcification du domaine d'indice actuel devra alors tre faite dans la dclaration de l'objet appartenant ce type.

A. Vachoux, v2.0, 2003

Le langage VHDL - 33

Types tableaux (2/2)


Oprateurs
Relationnels: = /= < <= > >= Logiques*: and or nand nor xor Dcalage et rotation*: sll srl sla sra xnor not rol ror

(* tableaux 1 dimension de types bit ou boolean seulement; oprations logiques effectues bit bit) Concatnation: & (tableaux 1 dimension seulement)

L'oprateur de concatnation peut muler les oprateurs de dcalage et de rotation


-- soit B un tableau de type bit_vector(7 downto 0): "00" & B(7 downto 2) B(6 downto 0) & 0 B(6 downto 0) & B(0) = B srl 2 = B sll 1 = B sla 1

A. Vachoux, v2.0, 2003

Reprsentation de l'information

Le langage VHDL - 34

A. Vachoux, v2.0, 2003

Le langage VHDL - 34

Types enregistrements
Collection d'lments nomms, ou champs, dont les valeurs peuvent tre de types diffrents Exemples de types non prdfinis
type memory_bus is record addr : bit_vector(15 downto 0); data : bit_vector(7 downto 0); read, write: bit; enable : boolean; end record memory_bus; type complex is record real_part, imag_part: real; end record complex;

Accs aux lments d'un enregistrement


-- soit MB un objet de type memory_bus et Z de type complex MB.addr -- tout le tableau addr MB.addr(7 downto 0) -- tranche du tableau addr MB.data(7) -- lment d'indice 7 du tableau addr Z.real_part, Z.imag_part -- nombres rels

A. Vachoux, v2.0, 2003

Reprsentation de l'information

Le langage VHDL - 35

Un type enregistrement dfinit une collection d'lments (ou de champs) nomms dont les valeurs peuvent tre de types diffrents. Chaque nom d'lment doit tre unique. Les noms d'lments permettent de les slectionner (par la notation nom-enregistrement.nom-lment) et de les manipuler sparment.

A. Vachoux, v2.0, 2003

Le langage VHDL - 35

Types fichiers
Information stocke dans des fichiers externes Type prdfini (dans paquetage TEXTIO) Exemples de types non prdfinis
type word is bit_vector(7 downto 0); type word_file is file of word; type real_file is file of real; type text is file of string ;

Oprations implicitement dclares


type file_type is file of elem_type; procedure read (file f: file_type; value: out elem_type); function endfile (file f: file_type) return boolean; procedure write (file f: file_type; value: in elem_type); procedure file_open (file f: file_type; external_name: in string; open_kind: in file_open_kind := read_mode); procedure file_open (status: out file_open_status; file f: file_type; external_name: in string; open_kind: in file_open_kind := read_mode); procedure file_close (file f: file_type);
A. Vachoux, v2.0, 2003

Reprsentation de l'information

Le langage VHDL - 36

Un type fichier dfinit une information qui est stocke dans des fichiers externes. Les lments d'un fichier peuvent tre de n'importe quel type scalaire, enregistrement ou tableau mono-dimensionnel. A chaque dclaration de type fichier sont associes implicitement les oprations suivantes: ouverture du fichier (file_open), fermeture du fichier (file_close), lecture du fichier (read), dtection de la fin de fichier (endfile), criture dans le fichier (write). 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 paramtre optionnel status permet de connatre l'tat d'une opration d'ouverture. Les tats possibles sont dfinis par le type file_open_status:
type file_open_status is (open_ok, status_error, name_error, mode_error);

Le type fichier prdfini text est dclar dans le paquetage standard TEXTIO dans la bibliothque STD. Des procdures de lecture et d'criture d'lments de texte (chanes de caractres, nombres, etc.) sont galement fournies par ce paquetage. L'usage du paquetage TEXTIO requiert la dclaration de la clause use suivante:
use STD.TEXTIO.all;

A. Vachoux, v2.0, 2003

Le langage VHDL - 36

Expressions et oprateurs
Expression = formule pour calculer une valeur Priorit des oprateurs (de la plus basse la plus haute)
Logiques: Relationnels: Dcalage et rotations: Addition: Signe (unaires): Multiplication: Divers: and or nand nor xor xnor = /= < <= > >= sll srl sla sra rol ror + - & + * / mod rem ** abs not
-- soient A, B et C de type boolean A and B and C -- valuation de gauche droite -- idem pour or, xor and xnor A nor (B nor C) -- parenthses requises, nor pas associatif -- idem pour nand -- soient PI et R de type real PI*(R**2) / 2 2.0*PI*R
Reprsentation de l'information
Le langage VHDL - 37

Exemples
-- soient A et B de type integer B /= 0 and A/B > 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 dclarations
constant 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 variable
variable nom-var {, ... } : soustype [ := expression ] ;

Valeur initiale par dfaut = soustype'left Exemples de dclarations


variable 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 signal
signal nom-sig {, ... } : soustype [ := expression ] ;

Exemples de dclarations
signal 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)


vc
valeur courante

tc+1 tc+2 tc+3 vc+1 vc+2 vc+3


transactions 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 fichier
file nom-fichier {, } : type-fichier [ [ open mode-ouverture ] is nom-logique ] ;

Exemples de dclarations
type 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_close
A. 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 Notation


lment ' 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") = 4
addresslow = 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) = U
A. 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 utiles
type 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 Rfrences


A. 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'vnements
entity 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

Syntaxe
constante 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 process
begin 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 rserv
process.

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 <= [ mode-dlai ] expression-valeur [ after expression-temps ] {, } ;

Gnration d'une forme d'onde


-- signal S: bit; stimulus: process begin wait for 5 ns; S <= 1, 0 after 10 ns, 1 after 18 ns, 0 after 25 ns; wait; -- forever end process stimulus;
S '1' valeur courante NOW = 5 ns S: '0' 0 5 15 [ns] 23 30 '1' 15 '0' transactions 23 '1' 30 '0'

pilote du signal
Description du comportement

-- signal S: bit; stimulus: process begin wait for 5 ns; S <= '1'; wait for 10 ns; S <= '0'; wait for 8 ns; S <= '1'; wait for 7 ns; S <= '0'; wait; end process stimulus;
Le langage VHDL - 49

A. Vachoux, v2.0, 2003

L'affectation un signal est reprsente par le signe "<=". La partie droite de l'instruction doit au minimum spcifier une valeur compatible avec le type du signal affect ou une expression dont l'valuation fournit une valeur de ce type. La combinaison "expression-valeur after expression-temps" constitue un lment de forme d'onde. Elle peut tre spcifie plusieurs fois, la condition que les valeurs de temps (du type time) soient croissantes. Chaque lment de forme d'onde est enregistr dans le pilote (driver) du signal comme une transaction qui sera applique dans le futur. Le processus stimulus commence par attendre un dlai initial de 5 ns avant d'affecter une forme d'onde au signal S. La valeur initiale par dfaut du signal S est '0'. Les valeurs de temps sont des dlais relatifs l'instant auquel l'instruction est excute. Le processus stoppe ensuite dfinitivement. Les transactions futures enregistres dans le pilote du signal creront des vnements et des rvaluations d'autres parties du modle. La forme de gauche dfinit la forme d'onde en une seule instruction. La forme de droite utilise plusieurs instructions d'affectation et wait pour obtenir le mme rsultat. La fonction NOW est prdfinie en VHDL et retourne le temps de simulation courant. Les diffrents modes de dlais sont prsents plus loin.

A. Vachoux, v2.0, 2003

Le langage VHDL - 49

Instruction d'affectation de signal (2/2)


entity xor_gate is port (A, B: in bit; Z: out bit); end entity xor_gate;

Instr. squentielle
architecture proc1 of xor_gate is begin process (A, B) begin Z <= A xor B after 2 ns; end process; end architecture proc1; architecture proc2 of xor_gate is begin process begin Z <= A xor B after 2 ns; wait on A, B; end process; end architecture proc2;
A. Vachoux, v2.0, 2003

Instr. concurrente
architecture dfl of xor_gate is begin Z <= A xor B after 2 ns; end architecture dfl;

Le langage VHDL - 50

L'instruction d'affectation de signal a la mme forme et la mme interprtation en simulation, qu'elle soit squentielle ( gauche) ou concurrente ( droite). Un processus avec une liste de sensibilit explicite est quivalent un processus avec une instruction wait on juste avant le end process.

A. Vachoux, v2.0, 2003

Le langage VHDL - 50

Exemples de processus
Gnrateur d'horloge
-- signal clk: bit := 0; clk_gen: process (clk) begin clk <= not clk after 5 ns; -- 100 MHz end process clk_gen;

Elment asynchrone
-- signal A, B, Q: bit; MullerC: process begin wait until A = '1' and B = '1'; Q <= '1'; wait until A = '0' and B = '0'; Q <= '0'; end process MullerC;

Latch
entity latch is port (en, d: in bit; q: out bit); end entity latch; architecture bhv of latch is begin process (en, d) begin if en = '1' then q <= d; end if; end process; end architecture bhv;
A. Vachoux, v2.0, 2003

Flip-flop

entity dff is port (clk, d: in bit; q: out bit); end entity dff; architecture bhv of dff is begin process begin wait until clk = '1'; q <= d; end process; end architecture bhv;

Description du comportement

Le langage VHDL - 51

Le processus du gnrateur d'horloge est sensible sur tout vnement sur le signal clk. Il ne stoppe jamais en simulation car il force le signal commuter entre ses deux tats possibles '0' et '1' avec un certain dlai, ce qui cre toujours une nouvelle transaction dans le futur. Le modle de flip-flop n'est sensible que sur le flanc montant du signal clk. A l'instant o le flanc montant est dtect, l'entre d du flip-flop est chantillonne et transmise sur la sortie q. Tout changement d'tat sur l'entre d ne peut tre dtect qu' cet instant. Le modle de latch est sensible sur deux signaux: en (enable) et d (data). Tant que le signal en est actif (gal '1'), tout vnement sur le signal d sera rpercut directement sur la sortie q (mode transparent). La latch est verouille ds que le signal en est inactif (gal '0'). Le modle d'lment asynchrone utilise plusieurs instructions wait. Ce style de description permet de modliser des machines tats finis.

A. Vachoux, v2.0, 2003

Le langage VHDL - 51

Signal ou variable?
entity shiftreg is generic (W: positive := 8); -- largeur du registre port (clk, din: in bit; dout: out bit); end entity shiftreg; architecture sig of shiftreg is signal reg: bit_vector(W-1 downto 0); begin process begin wait until clk = '1'; reg(W-1) <= din; reg(W-2 downto 0) <= reg(W-1 downto 1) dout <= reg(0); end process; end architecture sig; architecture var of shiftreg is begin process variable reg: bit_vector(W-1 downto 0); begin wait until clk = '1'; dout <= reg(0); reg(W-2 downto 0) := reg(W-1 downto 1) reg(W-1) := din; end process; end architecture var;

Ordre des affectations de signaux pas important

Ordre des affectations de variables important

A. Vachoux, v2.0, 2003

Description du comportement

Le langage VHDL - 52

Le choix d'utiliser un signal ou une variable dpend de plusieurs points: Domaine d'application Un signal est global toute l'architecture. Une variable est locale un processus. Seuls les signaux peuvent communiquer entre plusieurs processus dans une architecture et avec le monde extrieur (par l'intermdiaire des ports d'interface). Smantique d'affectation Une variable prend sa nouvelle valeur au moment de l'excution d'une instruction d'affectation. Un signal ne prend jamais sa nouvelle valeur un tel moment. Ce point sera dtaill plus loin. Efficacit de simulation Une variable n'est qu'un simple conteneur et n'utilise donc qu'une place limite dans la mmoire du simulateur. Un signal requiert une structure de donne plus importante (pilote) et une gestion plus complexe cause de ses caractristiques temporelles et des aspects concurrents du modle. L'exemple ci-dessus illustre deux modles corrects d'un registre dcalage. Pour reprsenter le contenu du registre, l'architecture sig utilise un signal, alors que l'architecture var utilise une variable. Dans le premier cas, l'ordre des instructions d'affectation de signal n'est pas importante car chaque cycle d'excution du processus (dclench par un flanc montant du signal clk) les valeurs des signaux reg() rfrencs dans les parties droites des affectations sont toujours celles calcule au cycle prcdant. Dans le second cas, l'ordre d'affectation des variables est important car les variables reg() sont mises jour immdiatement.

A. Vachoux, v2.0, 2003

Le langage VHDL - 52

Instructions squentielles (1/3)


Instruction conditionnelle
[ tiquette : ] if expr-boolenne then { instr-squentielle } { elsif expr-boolenne then { instr-squentielle } } [ else { instr-squentielle } ] end if [ tiquette ] ; -- Exemple: Max: if A > B then vmax := A; elsif A < B then vmax := B; else vmax := integerlow; end if Max;

Instruction slective
[ tiquette : ] case expression is when choix { | ... } => { instr-squentielle } { when choix { | ... } => { instr-squentielle } } end case [ tiquette ] ; choix ::= { expr-simple | intervalle | others }

-- Exemple: case int is -- soit int du type integer when 0 => V:= 4; S <= 1 after 5 ns; when 1 | 2 | 7 => V:= 6; S <= 1 after 10 ns; when 3 to 6 => V:= 8; S <= 1 after 15 ns; when9 => null; -- pas d'opration when others => V := 0; S <= 0; -- tous les autres cas end case;

A. Vachoux, v2.0, 2003

Description du comportement

Le langage VHDL - 53

A. Vachoux, v2.0, 2003

Le langage VHDL - 53

Instructions squentielles (2/3)


Instructions de boucle
-- boucle gnrale [ tiquette : ] loop { instr-squentielle } end loop [ tiquette ] ; -- boucle infinie loop wait until CLK = 1; q <= d after 5 ns; end loop; -- boucle avec sortie L: loop exit L when value = 0; value := value / 2; end loop L; -- boucle while [ tiquette : ] while condition loop { instr-squentielle } end loop [ tiquette ] ; L: while i < strlength loop next L when i = 5; i := i + 1; end loop L; -- boucle for [ tiquette : ] for identificateur in intervalle loop { instr-squentielle } end loop [ tiquette ] ; for i in 15 downto 0 loop vector(i) := i*2; end loop; L1: for i in 15 downto 0 loop L2: for j in 0 to 7 loop exit L1 when i = j; tab(i,j) := i*j + 5; end loop L2; end loop L1;

Les instructions next et exit permettent de contrler la boucle

L'indice de boucle ne doit pas tre dclar


A. Vachoux, v2.0, 2003

Description du comportement

Le langage VHDL - 54

Les instructions de boucle permettent de dcrire des comportements rptitifs: La boucle gnrale permet de dcrire des boucles infinies. La boucle while permet d'effectuer des itrations de manire conditionnelle. La boucle for permet d'effectuer un nombre fini d'itrations. L'ndice de boucle est implicitement dclar et il est considr comme une constante pendant une itration. Un objet de mme nom que l'indice de boucle dclar en-dehors de la boucle est localement cach dans le corps de la boucle. L'indice de boucle n'existe pas en-dehors du corps de la boucle. Les instructions next et exit permettent de contrler le comportement de la boucle: L'instruction next stoppe l'itration courante et dmarre l'itration suivante. L'instruction exit stoppe l'itration et sort de la boucle. Le flot d'excution reprend la premire instruction aprs la boucle. Les deux instructions peuvent tre excutes conditionnellement. Par dfaut, les deux instructions affectent la boucle courante. Elles peuvent toutefois affecter des boucles imbriques de niveau plus haut en faisant rfrence des tiquettes.

A. Vachoux, v2.0, 2003

Le langage VHDL - 54

Instructions squentielles (3/3)


Instructions d'assertion et de rapport
[ tiquette : ] assert expr-boolenne [ report expression-chane ] [ severity niveau-svrit ] ; [ tiquette : ] report expression-chane ] [ severity niveau-svrit ] ;

assert value <= MAX_VALUE report "value too large" severity ERROR; assert resistance > 0.0; -- rapport par dfaut: "Assertion violation" -- svrit par dfaut: ERROR -- formes quivalentes assert FALSE report "Value = " & value_typeimage(value) severity NOTE; report "Value = " & value_typeimage(value);

A. Vachoux, v2.0, 2003

Description du comportement

Le langage VHDL - 55

Les instructions d'assertion sont utiles pour inclure des vrifications dans un modle. Une assertion peut tre n'importe quelle expression lgale qui s'value une valeur de type boolean. Si la valeur est false, une violation d'assertion est mise et des actions particulires sont excutes: Un message est produit sur la console. Le contenu du message peut tre spcifi dans l'instruction d'assertion sous la forme d'une chane de caractres. Par dfaut, le message "Assertion violation" est produit. Chaque violation d'assertion peut tre associe un niveau de svrit dont les valeurs possibles sont dfinies par le type prdfini severity_level:
type severity_level is (NOTE, WARNING, ERROR, FAILURE);

Le niveau de svrit est aussi mentionn dans le message produit dans la console. Le niveau de svrit par dfaut est NOTE. L'instruction report permet d'afficher un message dans la console indpendemment de toute condition d'assertion. Le niveau de svrit est NOTE. Le traitement du niveau de svrit dpend du simulateur. En gnral, le simulateur permet de spcifier le niveau de svrit partir duquel la simulation doit stopper en cas de violation.

A. Vachoux, v2.0, 2003

Le langage VHDL - 55

Instruction concurrente conditionnelle


Format
[ tiquette : ] nom-signal <= [ mode-dlai ] { forme-onde when expr-boolenne else } forme-onde [ when expr-boolenne ] ;

Exemple
muxc: z <= d0 after 2 ns when sel1 = 0 and sel0 = 0 else d1 after 2 ns when sel1 = 0 and sel0 = 1 else d2 after 2 ns when sel1 = 1 and sel0 = 0 else d3 after 2 ns when sel1 = 1 and sel0 = 1; -- processus quivalent muxc: process (d0, d1, d2, d3, sel1, sel2) begin if sel1 = 0 and sel2 = 0 then z <= d0 after 2 ns; elsif sel1 = 0 and sel2 = 1 then z <= d1 after 2 ns; elsif sel1 = 1 and sel2 = 0 then z <= d2 after 2 ns; elsif sel1 = 1 and sel2 = 1 then z <= d3 after 2 ns; end if; end process muxc;

A. Vachoux, v2.0, 2003

Description du comportement

Le langage VHDL - 56

A. Vachoux, v2.0, 2003

Le langage VHDL - 56

Instruction concurrente slective


Format
[ tiquette : ] with expression select nom-signal <= [ mode-dlai ] { forme-onde when choix { | ... } , } forme-onde when choix { | ... } ;

Exemple
muxs: with sel select -- sel: bit_vector(1 downto 0) z <= d0 after 2 ns when "00", d1 after 2 ns when "01", d2 after 2 ns when "10", d3 after 2 ns when "11"; -- processus quivalent muxs: process (d0, d1, d2, d3, sel) begin case sel is when bit_vector("00") => z <= d0 after 2 ns; when bit_vector("01") => z <= d1 after 2 ns; when bit_vector("10") => z <= d2 after 2 ns; when bit_vector("11") => z <= d3 after 2 ns; end case; end process muxs;

A. Vachoux, v2.0, 2003

Description du comportement

Le langage VHDL - 57

A. Vachoux, v2.0, 2003

Le langage VHDL - 57

Initialisation et cycle de simulation


I1. Affecter la valeur initiale chaque variable et signal.

Initialisation Initialisation

I2. Tc = 0 ns, = 0. I3. Excuter tous les processus jusqu' leur suspension. I4. Dterminer le temps du prochain vnement Tn selon S4. S1. Tc = Tn. S2. Mettre jour les signaux. S3. Excuter tous les processus sensibles aux signaux mis jour.

Cycle Cycle de de simulation simulation

S4. Dterminer le temps du prochain vnement Tn: Si transactions au temps courant, = + 1 -> 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 <= A nand B; P2: D <= A nand C; P3: E <= C nand B; P4: Z <= D nand E; end architecture dfl; A B

P1 C C

P2

P3

A B C D E Z 0
A. Vachoux, v2.0, 2003

P4

T [ns] 10
Description du comportement

Z
Le langage VHDL - 59

Pour illustrer le fonctionnement du dlai delta (delta cycle), considrons nouveau le circuit logique de la ralisant une fonction OU exclusif. Chaque instruction d'affectation de signal concurrente est quivalente un processus sensible sur les signaux rfrencs dans la partie de droite de l'affectation. Le modle dfinit ainsi quatre processus concurrents P1 (sensible sur A et B), P2 (sensible sur A et C), P3 (sensible sur C et B) et P4 (sensible sur D et E), chacun deux affectant une valeur un seul signal. On aura ainsi aprs laboration six pilotes crs dnots P_A, P_B, P1_C, P2_D, P3_E et P4_Z.

A. Vachoux, v2.0, 2003

Le langage VHDL - 59

Exemple de simulation dlai nul (2/2)


T [ns] 0 0 A B '0' '0' '0' '0' '0' '0' P1_C P2_D P3_E P4_Z

'0' ('1' @ 10) 1 '0' 2 '0' '1' '1' '1'

'0' '0' '0' '0' ('1' @ 1) ('1' @ 1) ('1' @ 1) ('1' @ 1) '1' '1' '1' '1' ('0' @ 2) '1' '1' '1' '0' '1' '1' ('1' @ 1) ('0' @ 1) '1' '0' '1' '0' '1' '1' '1' '0' '0' ('1' @ 2) '1'

10

0 1 2

A. Vachoux, v2.0, 2003

Description du comportement

Le langage VHDL - 60

Initialisation: I1. Tous les signaux ont la valeur '0' (valeur initiale par dfaut). I2. Tc = 0 ns, = 0 ( est l'indice de cycle delta). I3. L'excution des quatres processus (dans un ordre quelconque) jusqu' leur suspension va crer des transactions dans les pilotes P1_C, P2_D, P3_E et P4_Z. Comme les affectations de signaux sont dlai nul, les transactions sont prvues au cycle delta suivant (@ 1). En supposant que l'entre primaire A soit affecte dans un modle de test l'expression "A <= '1' after 10 ns", une transaction est aussi cre dans le pilote P_A avec un dlai de 10 ns (@ 10). I4. Comme il y a des transactions prvues au temps courant, Tn = 0. Cycles de simulation: S1. Tc = 0 ns et = 1. S2. (Tc = 0, = 1) Mise jour des signaux C, D, E et Z. S3. Excuter les processus P2, P3 et P4. S4. P4 cre une transaction dlai nul sur P4_Z. S2. (Tc = 0, = 2) Mise jour du signal Z. S3. Aucun processus rvaluer. S4. Tn = 10 ns. S1. Tc = 10 ns et = 0. S2. (Tc = 10, = 0) Mise jour du signal A. S3. Excuter les processus P1 et P2. S4. Transactions sur P1_C et P2_D (dlai delta). S2. (Tc = 10, = 1) Mise jour du signal D. S3. Excuter le processus P4. S4. Transaction sur P1_Z (dlai delta). S2. (Tc = 10, = 2) Mise jour du signal Z. S3. Aucun processus rvaluer. S4. Tn = ? ns (on continue).
A. Vachoux, v2.0, 2003 Le langage VHDL - 60

Relation entre temps simul et itration delta

transaction ou vnement

1 temps [ns] 0 10 20 30 40

A. Vachoux, v2.0, 2003

Description du comportement

Le langage VHDL - 61

Les dlais delta induisent des itrations sans que le temps simul avance. Les dlais delta garantissent le dterminisme: les valeurs des signaux la fin dun cycle ditrations delta ne dpendent pas de lordre dans lequel les processus sont excuts, et donc dans lequel les signaux sont valus.

A. Vachoux, v2.0, 2003

Le langage VHDL - 61

Mode de dlai inertiel


Mode de dlai par dfaut Format Exemples
inv1: process (A) is begin Y1 <= not A after 5 ns; -- ou Y1 <= inertial not A after 5 ns; Y2 <= reject 2 ns inertial not A after 5 ns; end process inv1;
1 0 1 Y1 0 1 Y2 0 5
A. Vachoux, v2.0, 2003

nom-signal <= [ [ reject dure-rejection ] inertial ] expression-valeur after dlai { , } ;

10

15

20

25

30

35

40

45

[ns]
Le langage VHDL - 62

Description du comportement

Le dlai inertiel modlise le fait quun systme matriel rel ne peut pas changer dtat en un temps infiniment court. En ralit, il faut plutt appliquer des signaux pendant un temps suffisamment long pour surmonter linertie inhrente de au mouvement des lectrons. Le dlai inertiel est le mcanisme par dfaut en VHDL. La dure du temps de rejection doit tre positive et plus petite ou gale au dlai inertiel. La spcification du temps de rejection permet de clairement distinguer entre le dlai inertiel et les dlais daffectation dune forme donde (ce qui nest pas le cas en VHDL-87 puisque le dlai de la premire clause after sert aussi dfinir le temps de rejection).

A. Vachoux, v2.0, 2003

Le langage VHDL - 62

Mode de dlai transport


Format Exemples
nom-signal <= transport expression-valeur after dlai { , } ; inv2: process (A) is begin Y1 <= transport not A after 5 ns; Y2 <= reject 0 ns inertial not A after 5 ns; end process inv2;

1 0 1

Y1

0 1

Y2

0 5 10 15 20 25 30 35 40 45 [ns]

A. Vachoux, v2.0, 2003

Description du comportement

Le langage VHDL - 63

Le dlai transport modlise un comportement idal pour lequel toute impulsion, quelle que soit sa dure, est transmise. Le mode de dlai transport est quivalent au mode de dlai inertiel avec un temps de rejection nul. Dans le cas d'une affectation de signal gnrant une forme d'onde (p.ex. p.49), le mode de dlai ne s'applique qu'au premier lment de la forme d'onde. Tous les autres lments de la forme d'onde sont considrs en mode transport.

A. Vachoux, v2.0, 2003

Le langage VHDL - 63

Table des matires


Introduction Organisation d'un modle VHDL Premiers modles VHDL Reprsentation de l'information Description du comportement

Description de la structure
Composants Configuration
Aspects avancs Rfrences

A. Vachoux, v2.0, 2003

Le langage VHDL - 64

A. Vachoux, v2.0, 2003

Le langage VHDL - 64

Dclaration de composant
Syntaxe
component nom-composant [ is ] [ generic ( liste-paramtres ) ; ] [ port ( liste-ports ) ; ] end component [ nom-composant ] ;

Exemple
component inv is generic (TD: delay_length := 0 ns); port (signal iin: in bit; signal iout: out bit); end component inv;

Similaire une dclaration d'entit, mais:


Un composant dfinit ce dont on a besoin (demande) Une entit dfinit ce qui est disponible (offre)

Le nom d'un composant, de ses paramtres et de ses ports ne doivent pas ncessairement tre identiques ceux d'une entit de conception particulire Une configuration permet d'associer une instance de composant une entit de conception

A. Vachoux, v2.0, 2003

Description de la structure

Le langage VHDL - 65

A la diffrence du mcanisme d'instanciation directe (voir p. 23), la dclaration de composant (component declaration) permet de disposer d'une interface entre ce dont le modle besoin et ce qui est disponible dans une bibliothque de conception. Ceci permet de dfinir les modles effectifs des composants en-dehors de l'architecture et donc d'offrir plus de souplesse dans les cas o plusieurs architectures de composants sont possibles. Une dclaration de composant peut apparatre dans la partie dclarative d'une architecture ou dans une dclration de paquetage. Cette dernire forme sera prsente plus loin. Les noms donns au composant, ses paramtres et ses ports sont purement locaux l'architecture dans laquelle le composant est instanci. C'est le rle d'une configuration d'associer une instance de composant une entit de conception dans une bibliothque.

A. Vachoux, v2.0, 2003

Le langage VHDL - 65

Instance de composant
Syntaxe Exemple
architecture str of buffer is signal sint: bit; tiquette : [ component ] nom-composant [ generic map ( liste-association-paramtres ) ] [ port map ( liste-association-ports ) ] ; entity buffer is port (bin: in bit; bout: out bit); end entity buffer;

associations locales

component inv is generic (TD: delay_length := 0 ns); port (i: in bit; o: out bit); end component inv; begin inv1: component inv generic map (TD => 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 str;
Description de la structure
Le 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 Syntaxe
configuration 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 configuration


associations globales
entity 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 <= not iin after TD; end architecture bhv; entity buffer is port (bin: in bit; bout: out bit); end entity buffer; architecture str2 of buffer is signal sint: bit; component inv is generic (TD: delay_length); port (i: in bit; o: out bit); end component inv; begin inv1: component inv generic map (TD => 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 dfaut


entity 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 <= not iin after TD; end architecture bhv; entity buffer is port (bin: in bit; bout: out bit); end entity buffer; architecture str2 of buffer is signal sint: bit; component inverter is generic (TD: delay_length); port (iin: in bit; iout: out bit); end component inverter; begin inv1: component inverter generic map (TD => 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

Rfrences
A. 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 bits
entity 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 <= result after TP; cout <= ccout after TP; end process; end architecture dfl;
Le langage VHDL - 72

A. Vachoux, v2.0, 2003

Aspects avancs

Un paramtre gnrique dfinit une valeur constante qui peut tre diffrente d'une instance de composant l'autre. La valeur effective d'un paramtre gnrique peut aussi tre dfinie dans une configuration. La dclaration d'un paramtre gnrique se fait dans une dclaration d'entit au moyen d'une clause generic. Les usages typiques de paramtres gnriques sont: La spcification de paramtres temporels (dlais, contraintes). La spcification de tailles de bus. Le modle de l'additionneur gnrique N bits est paramtr sur un temps de propagation aux signaux de sortie et sur la taille des oprandes. Il ralise l'addition bit bit avec propagation de retenue.

A. Vachoux, v2.0, 2003

Le langage VHDL - 72

Paramtres gnriques (2/4)


Exemple: modle de test d'un additionneur 32 bits
entity tb_add32 is end entity tb_add32; architecture bench of tb_add32 is signal opa, opb, sum: bit_vector(31 downto 0); signal cin, cout: bit; begin UUT: entity work.addn(dfl) generic map ( -- association par nom TP => 2 ns, NB => opa'length) port map (opa, opb, cin, sum, cout); -- stimulis end architecture bench;
A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 73

La spcification des valeurs effectives de paramtres gnriques se fait au niveau des instances de composants dans une architecture au moyen d'une clause generic map. Comme pour l'association de ports, il est possible d'utiliser une association par nom ou par position. Si le paramtre a une valeur par dfaut, il peut tre soit omis de la clause generic map ou associ au mot rserv open. P. ex., dans le cas d'un additionneur 8 bits:
generic map (TP => 2 ns);

ou
generic 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 temporelles
entity 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 <= d after Tpd_clk_q when clk = 1 and clkevent; 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 architecture bhv;
A. Vachoux, v2.0, 2003

clk

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 passifs
entity 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 <= d after Tpd_clk_q when clk = 1 and clkevent; end architecture bhv;
A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 75

Comme les vrifications sappliquent en fait toute architecture relative lentit dff, il est possible de dplacer les instructions VHDL dans lentit elle-mme. VHDL autorise des instructions dans la dclaration dentit pour autant quelles soient passives: elles ne doivent pas modifier ltat du modle et peuvent seulement lire ltat courant.

A. Vachoux, v2.0, 2003

Le langage VHDL - 75

Instruction generate (1/3)


Instruction concurrente permettant d'encapsuler des instructions concurrentes telles que
instances de composants processus affectation concurrente de signal d'autres instructions generate

Equivalentes des macro-instructions qui sont excutes une seule fois avant de commencer la simulation Deux formes d'instructions generate
tiquette : for identificateur in intervalle generate [ { dclaration-locale } begin ] { instruction-concurrente } end generate [ tiquette ] ; forme itrative
A. Vachoux, v2.0, 2003

tiquette : if expression-boolenne generate [ { dclaration-locale } begin ] { instruction-concurrente } end generate [ tiquette ] ; forme conditionnelle

Aspects avancs

Le langage VHDL - 76

L'instruction generate est une instruction concurrente qui offre des fonctionnalits de type macro pour la description de comportements ou de structures rgulires. Elle peut encapsuler des dclarations locales et un nombre quelconque d'instructions concurrentes. Elle a pour effet de dupliquer ces dclarations et ces instructions, soit un nombre fixe de fois (forme itrative), soit selon une condition (forme conditionnelle). La dupliquation a lieu une fois avant de dmarrer la simulation. La forme itrative est utile pour dcrire des comportements ou des structures rgulires dont le nombre est lev ou non spcifi a priori. Elle utilise une syntaxe similaire celle de la boucle for. L'identificateur n'a pas besoin d'tre dclar et ne peut prendre que des valeurs discrtes dans un intervalle donn. La valeur de l'identificateur peut tre lue dans le corps de l'instruction generate, mais il ne peut pas tre modifi. La forme conditionnelle est utile pour prendre en compte des cas limites (p.ex. les instances de composants communiquant directement avec les ports de l'architecture). Si l'expression boolenne ne s'value pas la valeur true, les dclarations locales et les instructions encapsules seront physiquement limines du code simul. Une instruction generate peut encapsuler d'autres instructions generate.

A. Vachoux, v2.0, 2003

Le langage VHDL - 76

Instruction generate (2/3)


architecture str of addn is signal c: bit_vector(wsize-1 downto 0); begin STAGES: for i in wsize-1 downto 0 generate signal s_unbuffered: bit; begin LSB: if i = 0 generate FA1: entity work.add1(dfl) port map (opa => 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) <= s_unbuffered; en : in bit; end if; a, b: in bit_vector(wsize-1 downto 0); end process OUT_STAGE; z : out bit_vector(wsize downto 0)); end generate STAGES; end entity addn; z(wsize) <= c(wsize-1); end architecture str;

Exemple: additionneur N bits bas sur des cellules 1 bit

A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 77

Cet exemple illustre plusieurs aspects de l'instruction generate: Les deux formes itrative et conditionnelle. L'usage d'une dclaration locale (le signal s_unbuffered). L'encapsulation d'instances de composants et d'un processus.

A. Vachoux, v2.0, 2003

Le langage VHDL - 77

Instruction generate (3/3)


Dclaration de configuration (syntaxe tendue)
configuration nom-configuration of nom-entit is for nom-architecture | tiquette-instruction-generate [ ( intervalle | expression-statique ) ] { for spcification-composant indication-association ; end for ; } end for ; end [ configuration ] [nom-configuration ] ;

Exemple: additionneur N bits


configuration cfg_addn_str of addn is for str for STAGES (wsize - 2 downto 0) for LSB ... configuration du composant end for; -- LSB for OTHERB ... configuration des composants end for; -- OTHERB end for; -- STAGES (wsize - 2 downto 0) for STAGES (wsize - 1) for OTHERB ... configuration des composants end for; -- OTHERB end for; -- STAGES (wsize - 1) end for; -- str end configuration cfg_addn_str;

A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 78

Une forme tendue de la dclaration de configuration est requise pour une modle structurel utilisant des instructions generate. Prenons l'exemple du modle gnrique de l'additionneur N bits. Les instances 0 N-2 de l'additionneur 1 bit doivent tre associes la mme entit de conception et la dernire instance N-1 doit tre associe une autre entit de conception. Une premire partie dfinit la configuration des instances 0 N-2. Une clause for inclut une spcification d'intervalle et deux sous-clauses permettent de traiter sparment la cellule LSB et les autres cellules. Une seconde partie dfinit la configuration de l'instance N-1 en ne spcifiant que l'tiquette OTHERB puisque la condition lie l'tiquette LSB est fausse dans ce cas.

A. Vachoux, v2.0, 2003

Le langage VHDL - 78

Sous-programmes
Encapsulent des instructions squentielles Peuvent tre dclars dans un paquetage Procdures
Domaines de dclaration et d'excution: Processus ou sous-programme (forme squentielle) Architecture (forme concurrente)

Fonctions
Utilises dans des expressions Domaines de dclaration et d'excution: processus ou sous-programme

A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 79

Les sous-programmes permettent de modulariser la description du comportement d'un modle. Ils favorisent aussi la rutilisation entre modles. Il existe deux sortes de sous-programmes: Les procdures encapsulent des instructions squentielles. Elles peuvent prendre deux formes, en fonction de l'endroit o elles sont excutes. La forme squentielle est la forme usuelle utilise dans les langages de programmation. La forme concurrente est une notation compacte quivalente un processus excutant la procdure dans son corps. Les fonctions encapsulent aussi des instructions squentielles. Elles retournent un rsultat et ne peuvent donc tre utilises que dans des expressions. Un sous-programme peut tre dfini soit dans le modle, prs de l'endroit o il est excut, soit dans une unit de conception spare appele paquetage. Les paquetages seront prsents plus loin. Le langage VHDL dfinit un ensemble de procdures et de fonctions standard. Par exemple, les oprateurs prdfinis "+", "*", "and", "or", etc. sont dfinis comme des fonctions.

A. Vachoux, v2.0, 2003

Le langage VHDL - 79

Procdures (1/4)
Syntaxe: dclaration de procdure
procedure nom-procedure [ ( liste-paramtres-formels ) ] is { dclaration-locale } type, sous-type, constante, begin variable, dclaration de sous{ instruction-squentielle } programme end [ procedure ] [ nom-procdure ] ;

Classes de paramtres formels:


[ constant ] identificateur { ,... } : [ in ] sous-type ; [ variable ] identificateur { ,... } : [in | out | inout ] sous-type ; [ signal ] identificateur { ,... } : [in | out | inout ] sous-type ; [ file ] identificateur { ,... } : sous-type ;

Syntaxe: appel de procdure


[ tiquette : ] nom-procdure [ ( 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 procdure
A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 80

Les paramtres formels d'une procdure peuvent tre de classe constante, variable, signal ou fichier. Les trois premires classes de paramtres possdent un mode (optionel) dfinissant la manire dont l'objet est accd dans la procdure: Un paramtre de mode in ne peut qu'tre lu. C'est le mode par dfaut et la classe par dfaut du paramtre est dans ce cas constante. Un paramtre de mode out ne peut qu'affect. La classe par dfaut du paramtre est dans ce cas variable. Le mode inout est une combinaison des deux modes prcdants. La classe par dfaut du paramtre est dans ce cas variable. Les paramtres de classe fichier n'ont pas de mode. Le mode d'accs d'un fichier est dfini dans sa dclaration. L'appel de procdure a pour effet d'associer des paramtres effectifs aux paramtres formels de sa dclaration, de (re)crer les objets declars localement et d'excuter les instructions squentielles dans l'ordre o elles sont spcifies. 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. Pour un paramtre formel de classe signal et de mode in ou inout, l'objet effectif utilis dans la procdure est une copie de l'objet pass en paramtre. Si une instruction wait est utilise sur ce signal (local), la valeur du signal (local) peut changer avant que la procdure ne se termine. ceci peut tre contradictoire avec l'intention initiale d'avoir un signal en lecture seule. Il est important de noter que les dclarations locales sont dtruites la terminaison de la procdure et rlabores la prochaine excution. Une procdure ne peut pas conserver un tat (un processus le peut).

A. Vachoux, v2.0, 2003

Le langage VHDL - 80

Procdures (2/4)
Exemple: procdure sans paramtres et appel squentiel
process () procedure report_max_and_sum is variable max: real := reallow; variable sum: real := 0.0; begin for i in samplesrange loop sum := sum + samples(i); if samples(i) > max then max := samples(i); end if; end loop; report "Maximum value is: " & realimage(max); report "Total value is : " & realimage(sum); end procedure report_max_and_sum; type real_vector is array (natural range <>) of real; variable samples: real_vector(1 to 16); begin -- samples filled with values report_max_and_sum; end process;
Aspects avancs
Le langage VHDL - 81

A. Vachoux, v2.0, 2003

A. Vachoux, v2.0, 2003

Le langage VHDL - 81

Procdures (3/4)
Exemple: procdure avec paramtres et appel concurrent
entity dlatch is generic (Tsu_en_clk, Tsu_din_clk: time := 0 ns); port (signal clock, enable, din: in bit; signal dout: out bit); end entity dlatch; architecture dfl of dlatch is procedure check_setup (signal clk, data: in bit; constant Tsetup: in time); begin if clk = 1 then assert datalast_event >= 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 <= din when enable = '1' and clock = '1'; begin end architecture dfl; check_setup(clock, din, Tsu_din_clk); end process P2;
A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 82

L'appel concurrent de procdure check_setup est quivalent un processus sensible sur les paramtres de la procdure de classe signal et de mode in et dont le corps se rsume l'appel de la procdure. Une procdure concurrente ne cre par de hirarchie structurelle.

A. Vachoux, v2.0, 2003

Le langage VHDL - 82

Procdures (4/4)
Exemple: procdure concurrente pour gnration d'horloge phases asymtriques
procedure clkgen ( signal clk: out bit; constant Tperiod, Tpulse, Tphase: in time) is begin wait for Tphase; loop clk <= '1', '0' after Tpulse; wait for Tperiod; end loop; end procedure clkgen;

Gnration d'horloges non recouvrantes


signal phi1, phi2: bit := '0'; gen_phi1: clkgen(phi1, Tperiod => 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 fonction
function 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 fonction
A. 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 -> entier
architecture 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 <= bv_to_nat(data_bv1); data_nat2 <= bv_to_nat(bv => data_bv2); end architecture A;
A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 85

A. Vachoux, v2.0, 2003

Le langage VHDL - 85

Fonction de rsolution (1/2)


architecture A of E is signal S: logic4; begin P1: process begin wait for 10 ns; S <= 1; wait for 20 ns; S <= 0; end process P1; P2: process begin wait for 20 ns; S <= 0; wait for 20 ns; S <= 1; end process P2; end architecture A;

'0' pilote P1_S fonction de rsolution '1' pilote P2_S signal S rsolu 'X'

A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 86

Laffectation multiple de signaux partir de plusieurs instructions concurrentes (processus, composants) ncessite un mcanisme spcial appel rsolution. Cette situation arrive notamment lorsque lon modlise un bus sur lequel plusieurs units peuvent potentiellement crire une valeur ou partir duquel elles peuvent lire une valeur. Normalement une seule source est active un moment donn et les autres sont en tat haute impdance. Une autre possibilit est de modliser une logique cable ET ou OU (wired-AND, wired-OR).

A. Vachoux, v2.0, 2003

Le langage VHDL - 86

Fonction de rsolution (2/2)


Types non rsolus Fonction de rsolution
type ulogic4 is (X, 0, 1, Z); -- type non rsolu type ulogic4_vector is array (natural range <>) of ulogic4; function resolve (sources: ulogic4_vector) return ulogic4 is type table is array (ulogic4, ulogic4) of ulogic4; constant resolution_table: table := -- X 0 1 Z (( X, X, X, X ), -- X ( X, 0, X, 0 ), -- 0 ( X, X, 1, 1 ), -- 1 ( X, 0, 1, Z )); -- Z variable result: ulogic4 := Z; begin for i in sourcesrange loop result := resolution_table(result,sources(i)); end loop; return result; end function resolve; subtype logic4 is resolve ulogic4; type logic4_vector is array (natural range <>) of logic4;
Aspects avancs
Le langage VHDL - 87

Types rsolus
A. Vachoux, v2.0, 2003

Le type numr ulogic4 dfinit quatre tats logiques: 'X' (tat indfini), '0', '1' et 'Z' (tat haute-impdance). Ce type et le type ulogic4_vector sont dits non rsolus car des signaux de ces types ne peuvent pas avoir plus d'une source (ceci est dtect la compilation ou l'laboration). La dclaration du sous-type rsolu logic4 spcifie le nom dune fonction de rsolution, resolve, qui accepte pour paramtre un tableau non contraint de valeurs en provenance des multiples sources dun signal. La fonction retourne une valeur unique calcule partir dune table de rsolution qui ralise les rgles suivantes: Si lune des sources vaut X, ou si deux sources sont en conflit avec lune valant 0 et lautre valant 1, le signal rsolu vaut X. Si une ou plusieurs sources valent 0 et le reste vaut Z, le signal rsolu vaut 0. Si une ou plusieurs sources valent 1 et le reste vaut Z, le signal rsolu vaut 1. Si toutes les sources valent Z, le signal rsolu vaut Z. Il est ais de dfinir une fonction de rsolution qui ralise un ET cbl ou un OU cbl. La fonction de rsolution ne peut possder quun seul argument (un tableau non contraint mono-dimensionnel). Dautre part le rsultat rsolu ne doit pas dpendre de lordre dans lequel on traite les sources: la fonction de rsolution doit tre commutative. La fonction de rsolution est automatiquement excute, mme si le signal ne possde quune seule source. Le type non rsolu ulogic4 et le sous-type rsolu logic4 sont compatibles, cest--dire quil est lgal d'affecter des signaux de ces deux types entre eux. Par contre, les types tableaux ulogic4_vector et logic4_vector sont deux types diffrents et ne sont pas compatibles. Il sagit dutiliser une conversion de type si lon veut affecter un type de signal lautre:
signal S1: ulogic4_vector; signal S2: logic4_vector; S2 <= logic4_vector(S1); S1 <= ulogic4_vector(S2);

A. Vachoux, v2.0, 2003

Le langage VHDL - 87

Paquetages
Un paquetage permet de grouper des dclarations et des sousprogrammes et de les stocker dans une bibliothque Deux units de conception
package nom-paquetage is { dclaration [ | corps-sous-programme ] } end [ package ] [ nom-paquetage ] ; en-tte de paquetage package body nom-paquetage is { dclaration [ | corps-sous-programme ] } end [ package body ] [nom-paquetage ] ; corps de paquetage

Un corps de paquetage n'est pas toujours ncessaire


Exemple: en-tte de paquetage ne contenant que des dclarations de constantes et de (sous-)types

A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 88

A. Vachoux, v2.0, 2003

Le langage VHDL - 88

Paquetage STANDARD
package STANDARD is type boolean is (false, true); Dans bibliothque STD type bit is (0, 1); type character is ( ... 256 caractres 8 bits... ); type severity_level is (note, warning, error, failure); type integer is range dpend de l'implantation; subtype natural is integer range 0 to integerhigh; subtype positive is integer range 1 to integerhigh; type real is range dpend de l'implantation; type time is range dpend de l'implantation units fs; ps = 1000 fs; ...; hr = 60 min; end units; subtype delay_length is time range 0 to timehigh; impure function now return delay_length; type string is array (positive range <>) of character; type bit_vector is array (natural range <>) of bit; type file_open_kind is (read_mode, write_mode, append_mode); type file_open_status is (open_ok, status_error, name_error, mode_error); attribute foreign: string; end package STANDARD;
A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 89

Le paquetage STANDARD dclare les types et sous-types prdfinis du langage, la fonction now (qui retourne le temps simul courant) et l'attribut foreign. Les dclarations du paquetage STANDARD sont automatiquement visibles dans toute unit de conception.

A. Vachoux, v2.0, 2003

Le langage VHDL - 89

Paquetage TEXTIO
package TEXTIO is Dans bibliothque STD type line is access string; type text is file of string; Requiert la clause de contexte type side is (right, left); use STD.TEXTIO.all; subtype width is natural; file input: text open read_mode is "std_input"; file output: text open write_mode is "std_output"; procedure readline (file f: text; l: out line); procedure writeline (file f: text; l: inout line); -- pour chaque valeur de type prdfini: procedure read (l: inout line; value: out bit; good: out boolean); procedure read (l: inout line; value: out bit); ... procedure write (l: inout line; value: in bit; justified: in side := right; field: in width := 0); ... procedure write (l: inout line; value: in real; justified: in side := right; field: in width := 0; digits: in natural := 0); procedure write (l: inout line; value: in time; justified: in side := right; field: in width := 0; unit: in time := ns); end package TEXTIO;
A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 90

Le paquetage prdfini TEXTIO dclare des types et des sous-programmes pour la manipulation de fichiers textes. Il dclare aussi des procdures pour lire et crire les valeurs d'objets de types prdfinis. La lecture d'un fichier texte est effectue en deux tapes: 1) lire une ligne complte avec la procdure readline et stocker la ligne dans un tampon de type line, 2) lire chaque lment de la ligne lue avec l'une des version de la procdure read relative au type de valeur lire. La procdure read peut retourner l'tat de l'opration par le paramtre good. L'criture dans un fichier est aussi effectue en deux tapes: 1) une ligne complte est construite dans un tampon de type line au moyen d'une des versions de la procdure write, en fonction des types de valeurs crire, 2) la ligne est crite dans le fichier avec la procdure writeline. Notes: Si L est le tampon stockant une ligne lue dans un fichier, chaque opration read sur L consomme un lment et a pour effet que la valeur retourne par L'length dcrot. La fin de la ligne est ainsi atteinte lorsque L'length = 0. La fonction endfile qui teste la fin de fichier est implicitement dclare lors de la dclaration du type fichier text. L'utilisation du paquetage TEXTIO dans une unit de conception requiert la spcification d'une clause de contexte.

A. Vachoux, v2.0, 2003

Le langage VHDL - 90

Paquetage STD_LOGIC_1164 (1/2)


Dclaration de paquetage
package STD_LOGIC_1164 is type std_ulogic is (U, -- un-initialised X, -- forcing unknown Dans bibliothque IEEE 0, -- forcing 0 1, -- forcing 1 Requiert la clause de contexte Z, -- high impedance library IEEE; W, -- weak unknown use IEEE.std_logic_1164.all; L, -- weak 0 H, -- weak 1 - -- don't care); type std_ulogic_vector is array (natural range <>) of std_ulogic; function resolved (s: std_ulogic_vector) return std_ulogic; subtype std_logic is resolved std_ulogic; type std_logic_vector is array (natural range <>) of std_logic; -- oprateurs logiques surchargs and, nand, or, nor, xor, xnor, not -- fonctions de conversion: to_bit, to_bitvector, to_stdulogic, to_stdlogicvector, to_stdulogicvector -- plus autres fonctions... end package STD_LOGIC_1164;
A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 91

Le paquetage STD_LOGIC_1164 ne fait pas partie de la dfinition du langage VHDL, mais est dfini comme un standard spar. Le paquetage dclare deux types logiques neuf tats std_ulogic (non rsolu) et std_logic (rsolu): Les tats '0', '1' et 'X' reprsentent respectivement l'tat faux, vrai et inconnu (ou indtermin). Les tats 'L', 'H' et 'W' reprsentent des tats rsistifs du type pull-down ou pull-up. L'tat 'Z' reprsentent un tat haute-impdance. L'tat 'U' est l'tat initial par dfaut et identifie les signaux qui n'ont pas t affects en simulation. L'tat '-' est parfois utilis pour des vecteurs de test ou en synthse pour spcifier que certains bits ne sont pas importants. Le paquetage dclare des versions des oprateurs logiques pour ces nouveaux types. Il n'est par contre pas possible d'utiliser sans autre des oprateurs arithmtiques sur des objets appartenant ces types. L'utilisation du paquetage STD_LOGIC_1164 dans une unit de conception requiert la spcification d'une clause de contexte.

A. Vachoux, v2.0, 2003

Le langage VHDL - 91

Paquetage STD_LOGIC_1164 (2/2)


package body STD_LOGIC_1164 is ... type stdlogic_table is array (std_ulogic, std_ulogic) of std_ulogic; constant resolution_table : stdlogic_table := ( --| U X 0 1 Z W L H - | (U, U, U, U, U, U, U, U, U), -- | U | (U, X, X, X, X, X, X, X, X), -- | X | (U, X, 0, X, 0, 0, 0, 0, X), -- | 0 | (U, X, X, 1, 1, 1, 1, 1, X), -- | 1 | (U, X, 0, 1, Z, W, L, H, X), -- | Z | ... (U, X, 0, 1, W, W, W, W, X), -- | W | function resolved (s : std_ulogic_vector) return std_ulogic is (U, X, 0, 1, L, W, L, W, X), -- | L | variable result : std_ulogic := 'Z'; -- default state (U, X, 0, 1, H, W, W, H, X), -- | H | begin (U, X, X, X, X, X, X, X, X) -- | - |); if s'length = 1 then return s(s'low); -- single driver case else for i in s'range loop result := resolution_table(result, s(i)); end loop; end if; return result; end function resolved; ... end package body STD_LOGIC_1164;
A. Vachoux, v2.0, 2003

Corps du paquetage (extrait)

Aspects avancs

Le langage VHDL - 92

Le corps de paquetage inclut les corps des sous-programmes dclars dans la dclaration de paquetage correspondante. A titre d'exemple, la fonction de rsolution resolve utilise une table constante resolution_table pour dfinir les valeurs rsolues de toutes les paires de sources possibles. Le corps de la fonction traite d'abord le cas pour lequel le signal rsolu n'a qu'une seule source de manire optimiser le temps de calcul. Dans le cas contraire, une boucle est utilise pour appliquer la table de rsolution chaque source du signal.

A. Vachoux, v2.0, 2003

Le langage VHDL - 92

Paquetages mathmatiques
package MATH_REAL is -- constantes e, pi et drives -- fonctions sign, ceiling, floor, round, min, max -- procdure random -- racine carre, racine cubique, exponentiation -- fonction exponentielle et logarithmes -- fonctions trigonomtriques (sin, cos, tan, etc.) -- fonctions hyperboliques (sinh, cosh, tanh, etc.) end package MATH_REAL;

Dans bibliothque IEEE Requierent la clause de contexte


library IEEE; use IEEE.math_real.all; use IEEE.math_complex.all;

package MATH_COMPLEX is -- type complexe (formes cartsienne et polaire) -- constantes 0, 1 et j -- fonctions abs, argument, negation, conjugate -- racine carre, exponentiation -- fonctions arithmtiques avec oprandes cartsiens et polaires -- fonctions de conversion end package MATH_COMPLEX;

A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 93

Seuls les oprateurs arithmtiques de base sont a priori disponibles pour un objet du type prdfini real. Les paquetages MATH_REAL et MATH_COMPLEX ne font pas partie du standard VHDL de base, mais sont dfinis comme des standard spars.

A. Vachoux, v2.0, 2003

Le langage VHDL - 93

Paquetage NUMERIC_BIT
package NUMERIC_BIT is type unsigned is array (natural range <>) of bit; -- quiv. type entier non sign type signed is array (natural range <>) of bit; -- quiv. type entier sign -- oprateurs abs et "-" unaire -- oprateurs arithmtiques: "+", "-", "*", "/", rem, mod -- oprateurs relationnels: "<", ">", "<=", ">=", "=", "/=" -- oprateurs de dcalage et rotation: sll, srl, rol, ror -- oprateurs logiques: not, and, or, nand, nor, xor, xnor -- fonctions de conversion: Requiert la clause de contexte -to_integer(arg) library IEEE; -to_unsigned(arg, size) use IEEE.std_logic_1164.all; -to_signed(arg, size) use IEEE.numeric_bit.all; end package NUMERIC_BIT;

Utile pour disposer d'oprateurs arithmtiques sur des oprandes de types similaires (mais pas quivalents) au type bit_vector

A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 94

Un objet de type (un)signed n'est pas directement compatible avec un objet de type bit_vector. Une conversion de type est requise:
signal S1: unsigned(7 downto 0); signal S2: bit_vector(7 downto 0); S1 <= unsigned(S2); S2 <= bit_vector(S1);

A. Vachoux, v2.0, 2003

Le langage VHDL - 94

Paquetage NUMERIC_STD
package NUMERIC_STD is type unsigned is array (natural range <>) of std_logic; -- quiv. type entier non sign type signed is array (natural range <>) of std_logic; -- quiv. type entier sign -- oprateurs abs et "-" unaire -- oprateurs arithmtiques: "+", "-", "*", "/", rem, mod -- oprateurs relationnels: "<", ">", "<=", ">=", "=", "/=" -- oprateurs de dcalage et rotation: sll, srl, rol, ror -- oprateurs logiques: not, and, or, nand, nor, xor, xnor -- fonctions de conversion: Requiert la clause de contexte -to_integer(arg) library IEEE; -to_unsigned(arg, size) use IEEE.std_logic_1164.all; -to_signed(arg, size) use IEEE.numeric_std.all; end package NUMERIC_STD;

Utile pour disposer d'oprateurs arithmtiques sur des oprandes de types similaires (mais pas quivalents) au type std_logic_vector

A. Vachoux, v2.0, 2003

Aspects avancs

Le langage VHDL - 95

Un objet de type (un)signed n'est pas directement compatible avec un objet de type std_logic_vector. Une conversion de type est requise:
signal S1: unsigned(7 downto 0); signal S2: std_logic_vector(7 downto 0); S1 <= unsigned(S2); S2 <= std_logic_vector(S1);

A. Vachoux, v2.0, 2003

Le langage VHDL - 95

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

Rfrences
Livres Adresses web

A. Vachoux, v2.0, 2003

Le langage VHDL - 96

A. Vachoux, v2.0, 2003

Le langage VHDL - 96

Livres (1/2)
IEEE Standard VHDL Language Reference Manual ISBN 0-7381-3247-0; Product No.: SS94983-TBR; IEEE Standard No.: 1076-2002
LA rfrence officielle du langage pour les puristes et les dveloppeurs d'outils

IEEE Standard Multivalue Logic System for VHDL Model Interoperability IEEE Standard 1164-1993, Ref.: SH16097
Dfinition officielle du paquetage STD_LOGIC_1164

IEEE Standard VITAL ASIC Modeling Specification IEEE 2001; ISBN 0-7381-2691-0; Product No.: SH94959-TBR; IEEE Standard No.: 1076.4-2000
Dfinition officielle de la mthode de modlisation VHDL de composants de bibliothques ASIC

Peter J. Ashenden, The Designer's Guide to VHDL, 2nd Edition Morgan Kaufmann Publishers; ISBN: 1558606742; 2nd Bk&cdr edition (May 29, 2001)
Prsentation complte du langage VHDL avec des tudes de cas ralistes

A. Vachoux, v2.0, 2003

Rfrences

Le langage VHDL - 97

A. Vachoux, v2.0, 2003

Le langage VHDL - 97

Livres (2/2)
Mark Zwolinski, Digital System Design and VHDL, Prentice Hall; ISBN: 0201360632; 1 edition (October 18, 2000)
Prsentation plus axe sur les aspects de modlisation, simulation et synthse de circuits logiques et numriques

Roland Airiau, Jean-Michel Berg, Vincent Olive et Jacques Rouillard, VHDL: Du langage la modlisation, Presses Polytechniques Romandes, ISBN: 288074-361-3, 1998
Couverture complte du langage avec beaucoup d'exemples

Thierry Schneider, VHDL: mthodologie de design et techniques avances, Dunod, ISBN : 210005371X - Code : 45371, 2001
Approche pratique de VHDL

Janick Bergeron, Writing Testbenches: Functional Verification of HDL Models, Kluwer Academic Publishers, ISBN: 0306476878, 2000
Prsentation axe sur le dveloppement de modles de test

A. Vachoux, v2.0, 2003

Rfrences

Le langage VHDL - 98

A. Vachoux, v2.0, 2003

Le langage VHDL - 98

Web
http://lsmwww.epfl.ch/design_languages
Le site du cours + informations sur d'autres langages (VHDL-AMS, Verilog(-AMS), SystemC(-AMS)

http://standards.ieee.org/catalog/index.html
Catalogue des standards IEEE

http://www.eda.org/
Site gnraliste pour les outils EDA avec accs des ressources VHDL (modles, outils, FAQs)

http://tech-www.informatik.uni-hamburg.de/vhdl/
L'un des premiers rpertoires de ressources VHDL

http://www.eda.ei.tum.de/forschung/vhdl/
Un autre rpertoire de ressources VHDL

http://opensource.ethz.ch/emacs/vhdl-mode.html
Mode VHDL pour l'diteur Unix Emacs
A. Vachoux, v2.0, 2003

Rfrences

Le langage VHDL - 99

A. Vachoux, v2.0, 2003

Le langage VHDL - 99

Você também pode gostar