Vous êtes sur la page 1sur 121

VHDL

Support cours 5ITR
Prof. D. Mohammed BOUSMAH bousmah@gmail.com

Copyright bousmah@gmail.com

Sommaire

1. Introduction à VHDL 2. Le langage VHDL
éléments de syntaxe Les objets du langage Les instructions Structures d'un programme.

3. Modélisation à l'aide du langage VHDL 4. Simulation fonctionnelle et temporelle du code VHDL 5. Implémentation de code VHDL

Copyright bousmah@gmail.com

Qu’est ce que VHDL?

Introduction à VHDL

Copyright bousmah@gmail.com

A ce jour.com . CPLD et FPGA( Field Programmable Gate Array) • Concevoir des modèles de simulations numériques ou des bancs de tests. on utilise le langage VHDL pour : • Concevoir des ASIC (Application Specific Integrated Circuit). cette norme est vite devenue un standard en matière d'outils de description de fonctions logiques. Copyright bousmah@gmail. • Programmer des composants programmables du type PLD.Introduction à VHDL Développé dans les années 80 aux États-Unis. le langage de description VHDL est ensuite devenu une norme IEEE numéro 1076 en 1987. Révisée en 1993 pour supprimer quelques ambiguïtés et améliorer la portabilité du langage.

com .Introduction à VHDL Copyright bousmah@gmail.

• Deuxièmement: c’est un langage de description de haut niveau car il fait abstraction à l’objet auquel ou pour lequel il est écrit (Portabilité des descriptions VHDL).com . Copyright bousmah@gmail.Introduction à VHDL Pourquoi un langage de description ? • Premièrement: Il est plus facile de décrire un circuit numérique en utilisant l’outil de description VHDL qu’un schéma ou logigramme.

com .Introduction à VHDL Pourquoi un langage de description ? Copyright bousmah@gmail.

com . Création d'un circuit intégré :NORME IEEE VHDL Seule une partie de la norme peut être utilisée pour réaliser des circuits. Copyright bousmah@gmail.Introduction à VHDL Les limites actuelles Création de modèles de simulations :NORME IEEE VHDL La totalité de la norme peut être utilisée pour réaliser des modèles de simulations.

Introduction à VHDL Les limites actuelles Copyright bousmah@gmail.com .

com .Introduction à VHDL Caractéristiques VHDL Copyright bousmah@gmail.

com .Le langage VHDL Exemple: Copyright bousmah@gmail.

Le langage VHDL

Copyright bousmah@gmail.com

Le langage VHDL
Toute déclaration VHDL utilisée pour la synthèse utilise des bibliothèques. L'IEEE (Institute of Electrical and Electronics Engineers) produit des normes, et a donc crée la norme IEEE 1164 qui contient la définition des signaux électroniques, fonctions et sous programmes permettant d'effectuer des opérations, ….

Copyright bousmah@gmail.com

Le langage VHDL
Elle permet de définir le NOM de la description VHDL ainsi que les entrées et sorties utilisées, l'instruction qui les définit est port :

Copyright bousmah@gmail.com

Le langage VHDL L'instruction port. Copyright bousmah@gmail.com . Entre les deux parenthèses. elle contient la déclaration des entrées/ sorties qui composent notre block entité.

Copyright bousmah@gmail. pas de distinctions entre majuscules et minuscules.Le langage VHDL Il est composé de caractères.com . longueur quelconque mais ne doit pas dépasser une ligne de code. le premier doit être une lettre. VHDL n'est pas sensible à la casse.

com .Le langage VHDL Copyright bousmah@gmail.

com .Le langage VHDL Copyright bousmah@gmail.

Le langage VHDL L'architecture décrit le fonctionnement souhaité par le circuit. Cette suite sera d'une syntaxe similaire à celle de l'entité. Copyright bousmah@gmail. L'architecture est composée d'une suite d'instructions ou d'équations qui décrivent le fonctionnement du circuit.com .

com .Le langage VHDL Copyright bousmah@gmail.

com .Le langage VHDL Copyright bousmah@gmail.

com .Le langage VHDL Copyright bousmah@gmail.

Le langage VHDL Copyright bousmah@gmail.com .

Le langage VHDL Copyright bousmah@gmail.com .

Le langage VHDL Copyright bousmah@gmail.com .

com .Le langage VHDL Copyright bousmah@gmail.

com .Le langage VHDL Copyright bousmah@gmail.

Le langage VHDL Copyright bousmah@gmail.com .

com . En d’autres mots. Copyright bousmah@gmail. De plus. chaque sous-module peut être divisé à son tour en d’autres sousmodules et ainsi de suite.Modélisation à l'aide du langage VHDL Le langage VHDL est conçu de manière à nous permettre de modéliser des systèmes complexes décrits à des niveaux d’abstractions très différents. VHDL intègre adéquatement les méthodologies de conception de systèmes dites “Top/Down”. un modèle VHDL peut être composé de plusieurs sous-modules. VHDL est un langage modulaire et hiérarchique. L’interface entre les différents blocs se fait par des “liens de communication”. Un système complexe peut être divisé en plusieurs blocs. De la même manière. chaque bloc peut à son tour être divisé en plusieurs sous blocs et ainsi de suite.

com . Autrement dit. Exemples: Voir TP Copyright bousmah@gmail. Cependant. la synthèse ne supporte qu’un sous ensemble des possibilités de VHDL.Modélisation à l'aide du langage VHDL VHDL a d’abord été proposé comme un langage de modélisation et il a graduellement été utilisé comme un langage de synthèse. Certaines caractéristiques abstraites de VHDL n’ont pas d’équivalent dans la logique digitale. il faut noter que les possibilités de modélisation avec VHDL dépassent de loin les besoins de la synthèse.

com .Simulation fonctionnelle et temporelle du code VHDL La réalisation d’un projet VHDL les étapes suivantes : Spécification Validation fonctionnelle Design correct non oui Validation temporelle non Spécifications temporelles correctes oui Programmation Copyright bousmah@gmail.

recouvrement de signaux.). Copyright bousmah@gmail.). Vérification ne prenant pas en compte les aspects temporels du circuit Validation temporelle : Simulation temporelle (et fonctionnelle) du circuit (temps de propagation. mode graphique. etc. etc.com . Verilog.Simulation fonctionnelle et temporelle du code VHDL Spécification : saisie du circuit logique (spécification syntaxique : VHDL. boucles.) Validation fonctionnelle : simulation fonctionnelle du concept (problèmes des sorites/sorties. etc.

com . etc.) FPGA de Xilinx (modèle Spartan XC3S400) avec 400 000 portes1 Copyright bousmah@gmail.Implémentation de code VHDL Implémentation : le programme est porté physiquement sur le circuit FPGA en fonction des spécifications précisé par le programmeur (pins.

Implémentation de code VHDL Copyright bousmah@gmail.com .

réseau de portes programmables in situ) . Bien que fondamentalement synonymes. circuit logique programmable et effaçable) . un circuit logique programmable. ces termes ne sont généralement pas interchangeables dans le vocabulaire commercial des fabricants : FPGA désigne plutôt des composants à technologie RAM. PLD (programmable logic device. fusible Copyright bousmah@gmail. PAL (programmable array logic. circuit logique programmable) .com . circuit logique programmable complexe) . EPLD (erasable programmable logic device. est un circuit intégré logique qui peut être reprogrammé après sa fabrication. CPLD (complex programmable logic device. PAL des composants à technologie anti fusible. Ce type de composant électronique est communément désigné par différents sigles anglais dont notamment : FPGA (field-programmable gate array. Il est composé de nombreuses cellules logiques élémentaires librement assemblables. réseau logique programmable) . ou réseau logique programmable.Implémentation de code VHDL En effet. EPLD des composants à technologie FLASH.

com .Implémentation de code VHDL Copyright bousmah@gmail.

2i Copyright bousmah@gmail.TP: XILINX ISE 9.com .

com .2i Copyright bousmah@gmail.TP: XILINX ISE 9.

TP: XILINX ISE 9.com .2i Copyright bousmah@gmail.

TP: XILINX ISE 9.com .2i Copyright bousmah@gmail.

TP: XILINX ISE 9.2i Copyright bousmah@gmail.com .

TP: XILINX ISE 9.2i Copyright bousmah@gmail.com .

com .TP: XILINX ISE 9.2i Copyright bousmah@gmail.

2i Copyright bousmah@gmail.TP: XILINX ISE 9.com .

2i Copyright bousmah@gmail.com .TP: XILINX ISE 9.

TP: XILINX ISE 9.com .2i Copyright bousmah@gmail.

2i Copyright bousmah@gmail.com .TP: XILINX ISE 9.

TP: XILINX ISE 9.com .2i Copyright bousmah@gmail.

com .TP: XILINX ISE 9.2i Copyright bousmah@gmail.

com .2i Copyright bousmah@gmail.TP: XILINX ISE 9.

TP: XILINX ISE 9.com .2i Copyright bousmah@gmail.

2i Copyright bousmah@gmail.TP: XILINX ISE 9.com .

TP: XILINX ISE 9.com .2i Copyright bousmah@gmail.

2i Copyright bousmah@gmail.TP: XILINX ISE 9.com .

2i Copyright bousmah@gmail.com .TP: XILINX ISE 9.

com .TP: XILINX ISE 9.2i Copyright bousmah@gmail.

TP: XILINX ISE 9.2i Copyright bousmah@gmail.com .

TP: XILINX ISE 9.2i Copyright bousmah@gmail.com .

com .TP: XILINX ISE 9.2i Copyright bousmah@gmail.

2i Copyright bousmah@gmail.TP: XILINX ISE 9.com .

TP: XILINX ISE 9.com .2i Copyright bousmah@gmail.

TP: XILINX ISE 9.2i Copyright bousmah@gmail.com .

TP: XILINX ISE 9.com .2i Copyright bousmah@gmail.

2i Copyright bousmah@gmail.com .TP: XILINX ISE 9.

2i Copyright bousmah@gmail.TP: XILINX ISE 9.com .

2i Copyright bousmah@gmail.TP: XILINX ISE 9.com .

2i Copyright bousmah@gmail.TP: XILINX ISE 9.com .

2i Copyright bousmah@gmail.com .TP: XILINX ISE 9.

com .2i Copyright bousmah@gmail.TP: XILINX ISE 9.

TP: XILINX ISE 9.2i

Copyright bousmah@gmail.com

TP: XILINX ISE 9.2i

Copyright bousmah@gmail.com

TP: XILINX ISE 9.2i

Copyright bousmah@gmail.com

2i Copyright bousmah@gmail.com .TP: XILINX ISE 9.

com .2i Copyright bousmah@gmail.TP: XILINX ISE 9.

2i Copyright bousmah@gmail.TP: XILINX ISE 9.com .

TP: XILINX ISE 9.2i Copyright bousmah@gmail.com .

TP: XILINX ISE 9.com .2i Copyright bousmah@gmail.

2i Copyright bousmah@gmail.com .TP: XILINX ISE 9.

Le langage VHDL : du langage au circuit.com .Chillet Support de cours VHDL ENSSAT .Université de Rennes 1 – France Richard GRISEL « Les FPGA » IUP GEE Amiens Dantec – Lannion VHDL combinatoire M TAYARI.Références D. du circuit au langage .L «Guide pratique d’initiation à XILINX ISE 9.4e édition: Cours et exercices corrigés Copyright bousmah@gmail.2i» ISET DE NABEUL Philip Simpso FPGA Design: Best Practices for Team-Based Design Jacques Weber et all.

Annexes Annexe 1: Syntaxe détaillée VHDL Copyright bousmah@gmail.com .

com . la direction (IN. OUT et INOUT) et le type. ARCHITECTURE Nom de l'architecture OF Nom de l'entité IS Zone de déclaration.Annexe 1: Syntaxe détaillée VHDL Structure d’une description VHDL Entité et architecture En VHDL. BEGIN Description de la structure logique. END Nom de l'entity . une structure logique est décrite à l'aide d'une entité et d'une architecture de la façon suivante : ENTITY Nom de l'entité IS Description des entrées et des sorties de la structure en explicitant pour chacune d'entre elles le nom. Copyright bousmah@gmail. END nom de l'architecture .

Som. Ret <= A and B. Copyright bousmah@gmail. Ret : out bit).com . End additionneur . Architecture arch_addi of additionneur is begin Som <= A xor B.Annexe 1: Syntaxe détaillée VHDL Exemple d’un additionneur 1 bit: Entity additionneur is port (A. B : in bit. End arch_addi.

Annexe 1: Syntaxe détaillée VHDL Remarques: • L'entité donne les informations concernant les signaux d'entrées et de sorties de la structure ainsi que leurs noms et leurs types. • L'architecture décrit le comportement de l'entité. Chacune de ces architectures décrira l'entité de façon différente. Copyright bousmah@gmail.com . • Il est possible de créer plusieurs architectures pour une même entité.

end if. if (A = '1' and B = '0') then Som <= '1'. B) begin if (A = '0' and B = '0') then Som <= '0'. Ret <= '0'. • Description comportementale :Dans ce type de description. Ret <= '0'. if (A = '0' and B = '1') then Som <= '1'. if (A = '1' and B = '1') then Som <= ‘0'. Description comportementale à l'aide d'instructions séquentielles : architecture Arch_comp1 of entité_X is begin process (A.com .Annexe 1: Syntaxe détaillée VHDL Description comportementale et structurelle Il existe deux façons distinctes de décrire une structure. Ret <= '0'. end process. Ret <= '1'. end arch_comp1. le comportement de la structure est directement inscrit dans l'architecture à l'aide d'instructions séquentielles ou sous forme de flow de données. L'une dite comportementale et l'autre structurelle. Copyright bousmah@gmail.

end A_XOU. end XOU. end A_ET. Copyright bousmah@gmail.com . architecture A_ET of ET is begin S2 <= E3 AND E4. end ET. S2 : out bit). E4 : in bit. entity ET is port (E3. Entity XOU is port (E1. architecture A_XOU of XOU is begin S1 <= E1 XOR E2. S1 : out bit). E2 : in bit. on relie entre eux des composants préalablement décrits en VHDL. • Description structurelle: Dans ce type de description.Annexe 1: Syntaxe détaillée VHDL Description comportementale sous forme de flow de données : architecture Arch_comportementale of entité_X is begin Som <= A xor B. Ret <= A and B. end arch_comportementale.

Som.XOU(A_XOU). B : in bit. --Câblage des composants XOU et ET appelé U1 et U2. --Spécification de l'entité et de l'architecture utiliser pour les composants ET et XOU. Som). Copyright bousmah@gmail. end add.Annexe 1: Syntaxe détaillée VHDL Entity add is port (A. S1 : out bit). end arch_structurelle. U2 : ET port map (A. end component. begin U1 : XOU port map (A. B. S2 : out bit).com . E2 : in bit. E4 : in bit. Ret). for U1 : XOU use entity work. Ret : out bit). --Déclaration du composant ET component ET port (E3. B. end component.ET(A_ET). architecture Arch_structurelle of add is --Déclaration du composant XOU component XOU port (E1. for U2 : ET use entity work.

Copyright bousmah@gmail. il va être nécessaire de spécifier quelles sont les architectures à utiliser. Lors de la synthèse ou de la simulation de l'entité princ. package et package body Admettons que plusieurs architectures aient été créées pour une entité A utilisée au sein d’une architecture arch_princ de l'entité princ.Annexe 1: Syntaxe détaillée VHDL Configuration.com . Cette spécification peut être faite grâce à l'utilisation d'une configuration.

Annexe 1: Syntaxe détaillée VHDL • La configuration permet. comme son nom l'indique. On peut. • Pour qu'une description soit portable. il est préférable de n'avoir qu'une seule architecture par entité. spécifier les architectures à utiliser pour tous les composants déclarés au sein d'une description.com . de configurer l'entité à laquelle elle est associée. par exemple. c'est-à-dire synthétisable ou simulable sur des outils différents et pour des composants cibles différents. Les configurations deviennent alors inutiles. Copyright bousmah@gmail.

Annexe 1: Syntaxe détaillée VHDL
Dans le langage VHDL, il est possible de créer des “package” et “package body” dont les rôles sont de permettre le regroupement de données, variables, fonctions, procédures, etc., que l'on souhaite pouvoir utiliser ou appeler à partir d'architectures. Il est ainsi possible de se créer une sorte de bibliothèque d'objets (constantes, variables particulières, fonctions ou procédures spécifiques, etc.) que l'on pourra appeler à partir de plusieurs descriptions. Cette possibilité est particulièrement intéressante lorsque l'on utilise, au sein d'un projet contenant plusieurs entités, des ressources (constantes, variables particulières, fonctions...) identiques. Imaginons, par exemple, qu'un projet contenant deux entités A et B aux Architectures respectives arch_A et arch_B utilisant la même constante de temps tps_propa = 27ns. L'utilisation d'un package nommé pack_proj etd'un package body nommé pack_bod donnerait :

Copyright bousmah@gmail.com

Annexe 1: Syntaxe détaillée VHDL

Copyright bousmah@gmail.com

Annexe 1: Syntaxe détaillée VHDL

La ligne de commande “use work.pack_proj.all” qui se trouve en tête des déclarations des entités a pour but de prévenir l'analyseur ou le synthétiseur que l'on va utiliser des éléments du package pack_proj, en l'occurrence la constante de type time tps_propa initialisée à 27ns.

Copyright bousmah@gmail.com

com .Les instructions conditionnelles du type "With signal select affectation When condition else .. Copyright bousmah@gmail. On peut dissocier trois types d’instructions concurrentes : ..Les instructions conditionnelles du type "affectation When condition else . Les sorties sont réactualisées en continu en fonction des changements observés sur les entrées.Les instructions d'affectation utilisée au sein des exemples précédents qui correspondent à l'écriture d'une équation booléenne... .". .".Annexe 1: Syntaxe détaillée VHDL Les instructions concurrentes et séquentielles • Les instructions concurrentes:Elles s’exécutent de façon parallèle.

S : OUT bit). Sel : IN bit_vector (1 downto 0). end exemple. B. C : IN bit.com . Voici un exemple d'utilisation de ce type d'instruction lors de la description d'un multiplexeur : entity exemple is port (A. équation ou valeur) pour certaines conditions (conditions sur les signaux de type IN ou INOUT). end exemple. architecture exemple of exemple is begin S <= A when (Sel = "00") else B when (Sel = "01") else C when (Sel = "10") else '0'. Copyright bousmah@gmail.Annexe 1: Syntaxe détaillée VHDL L'instruction When else Cette instruction permet d'affecter un signal à une expression (expression = signal.

C : IN bit.com .Annexe 1: Syntaxe détaillée VHDL L'instruction With select when Cette instruction est semblable à la précédente avec en plus une précision préalable du signal sur lequel vont se porter les conditions. end exemple. C when "10". '0' when others. S : OUT bit). B. end exemple Copyright bousmah@gmail. B when "01". Sel : IN bit_vector (1 downto 0). En reprenant l'exemple précédent. on obtient donc : entity exemple is port (A. architecture exemple of exemple is begin With Sel select S <= A when "00".

Voici un exemple d'équivalence entre deux descriptions. d'un point de vue externe. comme des Instructions concurrentes. l'une à base d'instructions concurrentes et l'autre à base d'instructions séquentielles regroupées au sein d'un process.com .Annexe 1: Syntaxe détaillée VHDL Les instructions séquentielles Les process le langage VHDL propose une solution simple qui consiste à créer des ensembles appelés “process”. regroupant des instructions séquentielles et se comportant. Copyright bousmah@gmail.

Annexe 1: Syntaxe détaillée VHDL Copyright bousmah@gmail.com .

L'exécution d'un process est concurrente même si les instructions qu'il contient sont séquentielles.com .Annexe 1: Syntaxe détaillée VHDL A travers cet exemple. Copyright bousmah@gmail.Cette liste est appelée “liste de sensibilité”. suivi d'une liste de noms de signaux. B) va être exécuté à chaque changement d'état de l'un (ou des deux) signal(aux) A et B. Notons que la déclaration d'un process débute par le mot clé “process”. elle contient le nom des signaux dont le changement d'état va provoquer l'exécution du process. le process dont la déclaration est la suivante : process (A. on constate que les deux process se comportent comme deux instructions concurrentes. L'exécution d'un process n'a lieu qu'en cas de changement d'état de l'un (ou de plusieurs) signal(aux) compris dans la liste de sensibilité. En d'autres termes.

END IF.. ELSE END IF. Les instructions ELSIF et ELSE ne sont pas obligatoires.com . Remarques : Il est possible d’imbriquer plusieurs boucles IF les unes dans les autres.. Copyright bousmah@gmail. ELSIF condition2 THEN instructions séquentielles.Annexe 1: Syntaxe détaillée VHDL INSTRUCTION IF IF condition1 THEN instructions séquentielles. IF . THEN IF .. ELSIF condition3 THEN instructions séquentielles... ELSE instructions séquentielles. THEN ELSIF .. THEN END IF.

FIN DE LA BOUCLE.Annexe 1: Syntaxe détaillée VHDL BOUCLE FOR FOR paramètre IN intervalle LOOP instructions séquentielles. END IF. pour i = 0. Exécuter. FIN DE LA BOUCLE. END LOOP. END LOOP. Qui se lit: POUR le paramètre COMPRIS dans l'intervalle EXECUTER instructions séquentielles. END IF. i = 2 puis i = 3 les instructions suivantes : SI (A = i) THEN S <= B. Copyright bousmah@gmail. Exemple : FOR i IN 0 to 3 LOOP IF (A = i) THEN S <= B.com . i = 1.

FIN DE CAS. LORSQUE signal = valeur2 => instructions séquentielles. Remarques : L’instruction CASE. un grafcet ou tout autre formalisme de Structures séquentielles. Copyright bousmah@gmail. LORSQUE signal = AUTRES => instructions séquentielles.Annexe 1: Syntaxe détaillée VHDL INSTRUCTION CASE CASE signal IS WHEN valeur1 => instructions séquentielles. elle représente une facilité d'écriture. L'instruction “When others” n'est pas obligatoire. WHEN OTHERS =>instructions séquentielles.com . souvent appelée “switch case”. WHEN valeur3 => instructions séquentielles. convient parfaitement pour décrire un diagramme d'état. Qui se lit: CAS possibles de l’expression EST LORSQUE signal = valeur1 => instructions séquentielles. WHEN valeur2 => instructions séquentielles. END CASE. LORSQUE signal = valeur3 => instructions séquentielles.

end Arch_MUX.com . S = A si sel = ’1’ et S = B si sel = ’0’. A : in bit_vector (7 downto 0). end MUX. Exemple:Multiplexeur de vecteurs de signaux. Copyright bousmah@gmail. Entity MUX is port (sel : in bit. B : in bit_vector (7 downto 0). S : out bit_vector (7 downto 0)). architecture Arch_MUX of MUX is begin S <= A when SEL = '1' else S <= B when SEL <= '0'.Annexe 1: Syntaxe détaillée VHDL Les vecteurs de signaux le langage de description VHDL permet la déclaration et la manipulation des vecteurs de signaux ou des bus de signaux.

Annexe 1: Syntaxe détaillée VHDL Déclaration GENERIC Typiquement. on utilise une déclaration de GENERIC pour spécifier des temps de propagation et autres délais de portes logiques. Ces temps seront alors modifiables lors de l'utilisation de ces portes logiques dans une description structurelle.com . Voici un exemple d'utilisation de déclarations de GENERIC : Copyright bousmah@gmail.

La syntaxe d’une fonction est la suivante : FUNCTION nom de la fonction (liste des paramètres de la fonction avec leur type) RETURN type du paramètre de retour IS zone de déclaration des variables... Copyright bousmah@gmail...com .. Le rôle de ces fonctions ou procédures est de permettre. BEGIN . .. END... au sein d'une description........ RETURN nom de la variable de retour ou valeur de retour.. instructions séquentielles...... la création d'outils dédiés à certaines tâches pour un type déterminé de signaux .Annexe 1: Syntaxe détaillée VHDL Les fonctions et procédures Le langage VHDL permet l'utilisation et la création de fonctions ou de procédures que l'on peut appeler à partir d'une architecture..

Copyright bousmah@gmail.Annexe 1: Syntaxe détaillée VHDL Exemple: Dans le montage ci-dessous. on utilise à quatre reprises la fonction logique NONET à trois entrées.com . On décide donc de décrire ce montage en créant une description VHDL comportant une fonction nommée NONET.

procédures ou process. END. possède deux RETURN. Dans l'exemple précédent. Une fonction peut donc contenir plusieurs RETURN. exemple : FUNCTION bool_vers_bit (X : boolean) RETURN bit IS BEGIN if X then RETURN '1'. la fonction reçoit trois paramètres A. Le mot clé RETURN permet d'associer au paramètre de sortie une valeur. L'un pour renvoyer la valeur '1' et l'autre pour la valeur '0'. la fonction sera toujours vérifiée. ce type d'affectation "signal <= variable" est impossible en dehors des fonctions. Notons qu'il est possible de déclarer une variable interne à la fonction que l'on pourra affecter au paramètre de sortie (voir exemple précédent). il peut être fait à partir d'instructions séquentielles ou concurrentes. end if. Dans le cas des instructions concurrentes. B et C et retourne un paramètre S. Copyright bousmah@gmail. Cette fonction.Annexe 1: Syntaxe détaillée VHDL Une fonction reçoit donc des paramètres d'entrées et renvoie un paramètre de sortie.com . else RETURN '0'. En ce qui concerne l'appel d'une fonction. qui convertit un signal de type booléen en un signal de type bit.

S2 INOUT bit).com .Annexe 1: Syntaxe détaillée VHDL Procédures Les procédures. begin RS (E1. B : IN bit. E2 : IN bit. end test_de_RS. S2). diffèrent des fonctions par le fait qu'elles acceptent des paramètres dont la direction peut être IN. Q Architecture test_de_RS of test_de_RS is PROCEDURE RS (signal A. signal Q. E2. INOUT et OUT. Prenons l'exemple de la description d'une bascule RS à travers une procédure : Entity test_de_rs is port (E1. Q <= not (B or Q). : INOUT bit) IS Q BEGIN Q <= not (A or ). S1. Q Copyright bousmah@gmail. Une procédure ne possède donc pas un ensemble de paramètres d'entrées et un paramètre de sortie mais un ensemble de paramètres d'entrées-sorties et aucun paramètre spécifique de sortie. END. end test_de_RS. S1.

Remarque : Dans l'exemple ci-dessus. B. on obtient une description moins lisible qui est la suivante : Copyright bousmah@gmail. Dans le cas où les paramètres sont de genre variable. B. Q la liste des paramètres contient : – le genre de paramètre. dans notre cas. signal ou constante. Q et (ces noms ne sont connus en temps que Q Q paramètres qu'à l'intérieur de la procédure).com . – la direction de chaque paramètre. en utilisant des paramètres de genre variable. – le nom des paramètres. variable (valeur par défaut). Q et de la procédure ont été explicitement décrits. ce qui impliquait les affectations "<=" propres aux signaux. A. bit dans notre cas.Annexe 1: Syntaxe détaillée VHDL On constate que les paramètres A. Ainsi. les paramètres de la procédure étaient de genre signal. OUT ou INOUT (dans notre cas INOUT pour Q et Q qui sont utilisés en lecture IN et écriture OUT au sein de la procédure). IN. Si l’on reprend cet exemple. – le type des paramètres. il faut utiliser les symboles ":=" propres aux variables.

end if. Q := not (B or Q). E2) variable Q1. Q END. begin process (E1. end if. if (Q2 = '1') then S2 <= '1'. Q2 : bit. else S2 <= '0'. variable Q. Q2). if (Q1 = '1') then S1 <= '1'.com . : INOUT bit) IS BEGIN Q Q := not (A or ). B : IN bit. else S1 <= '0'.Annexe 1: Syntaxe détaillée VHDL architecture test_rs of test_rs is PROCEDURE RS (signal A. end test_rs. E2. Q1. begin RS (E1. Copyright bousmah@gmail. end process.

com .Déclaration des fonctions et procédures au sein de packages Dans les exemples qui précèdent. il est nécessaire de les déclarer au sein de packages et de déclarer en amont de l'architecture vouloir utiliser ce package. Pour les rendre accessibles à partir de plusieurs architectures. les fonctions ou procédures ont été insérées dans des architectures. En reprenant l'exemple de la création d'une fonction NONET et en insérant cette fonction au sein d'un package. Or. Copyright bousmah@gmail. voici ce que l'on obtient : Toute fonction ou procédure déclarée au sein d'un package est décrite dans le package body associé à ce package. les fonctions ou procédures en question ne sont accessibles que dans l'architecture dans laquelle elles ont été décrites. dans ce cas précis.

Voici les types prédéfinis proposés par le langage VHDL initial : Nom du type BIT INTEGER REAL BOOLEAN CHARACTER TIME Définition de l'ensemble Deux valeurs possibles ’0’ ou ’1’ Entiers (nombre positif ou négatif sur 32 bits) Réels 2 valeurs possibles true ou false Caractères a.. ps . 2 ..Annexe 1: Syntaxe détaillée VHDL Les types prédéfinis ou non.com .. Le langage VHDL initial propose des types prédéfinis... min. Copyright bousmah@gmail. 1. b. c .. surcharge des opérateurs. Nombre réel de temps fs. fonction de résolution • Les types prédéfinis et les opérateurs associés: Le type d'un signal définit l'ensemble auquel appartient un signal. c'est-à-dire des types pour lesquels l'ensemble est clairement défini. hr.

com . RTS) .. Type énumération Ces types sont utilisés lorsque l'on souhaite créer un nouveau type de signal ou lorsque l'on souhaite créer un signal ou une variable dont les valeurs possibles sont explicites. 7 downto 0) OF bit . Copyright bousmah@gmail. .. Dans cet exemple. TYPE Tableau_4x8xbit IS ARRAY (3 downto 0) OF Tableau_8xbit . .. L'instruction suivante va créer un signal de nom Tableau et de type Tableau_d'entiers : SIGNAL Tableau : Tableau_d'entiers . BSR. ADDA. la première ligne correspond à la définition d'un type de nom Signal_instruction et la deuxième à la création d'un signal nommé Instruction et de type Signal_instruction. Le signal Tableau comportera donc 8 éléments de type entier que l'on pourra manipuler individuellement ou tous en même temps. Type tableau Le langage VHDL autorise la définition de tableau de valeurs de type quelconque. L'instruction suivante correspond à la définition d'un type nommé Tableau_d'entiers : TYPE Tableau_d'entiers IS ARRAY (7 downto 0) OF integer . BNE. Exemple: TYPE Signal_instruction IS (LDAA. la syntaxe suivante est possible : TYPE Tableau_8xbit IS ARRAY (7 downto 0) OF bit . SIGNAL Instruction : Signal_instruction . ou encore : TYPE Tableau_4x8xbit IS ARRAY (3 downto 0.En plus des différents types listés dans le tableau précédent. Pour créer un tableau à plusieurs lignes. le langage VHDL propose trois types très utiles dont voici la définition.

com . Les éléments ainsi juxtaposés pourront. être accessibles grâce à l'utilisation du ". par la suite." comme pour les adresses électroniques. Copyright bousmah@gmail. de créer un type Constitué de plusieurs éléments différents. en VHDL comme dans la plupart des langages évolués.Annexe 1: Syntaxe détaillée VHDL Type enregistrement Il est possible.

et ’-’ = quelconque.Annexe 1: Syntaxe détaillée VHDL • Définition de types et surcharge des opérateurs. Copyright bousmah@gmail.com . ’Z ' = haute impédance. ’H’ = forçage fort. ’X ' = inconnu forçage fort. ’0’ = forçage faible. ’W’ = inconnu forçage faible. C'est dans cette optique que les types std_logic et std_ulogic conformes au standard IEEE 1164 ont été créés. Ces types proposent les valeurs suivantes : 'U' = Non initialisé. Les types prédéfinis proposés par le langage VHDL initial sont vite devenus insuffisants dans la plupart des cas. ’1’ = forçage fort. ’L’ = forçage faible.

par exemple.com . Il existe en réalité deux sortes d'attributs : • Les attributs destinés à retourner des informations concernant le comportement d'un signal (événements.). etc. boolean. En effet il détecte un changement d'état qui nécessite d'avoir au préalable mémorisé l'état précédent...). en quelque sorte. à ceci près que l'attribut 'event en question possède une notion de mémoire. dimension. retourner une information vraie ou fausse (donc de type booléen) sur le fait que le signal en question ait subi ou non un événement (un changement de valeur).. assimiler à des fonctions. Voici une liste non exhaustive des différents attributs prédéfinis proposés par le langage VHDL. Placé auprès d'un signal.).. • Les attributs destinés à retourner des informations concernant les caractéristiques d'un vecteur (longueur.Annexe 1: Syntaxe détaillée VHDL Les attributs Le langage VHDL propose un outil appelé attribut que l'on peut. dernière valeur. Le fonctionnement de cet attribut ressemble au comportement d'une fonction dont le paramètre de retour serait de type booléen. Pour ces deux sortes d'attributs. on parle d'attributs prédéfinis. l'attribut " 'event " va. Copyright bousmah@gmail. au même titre que l'on parle de types prédéfinis (bit.

Copyright bousmah@gmail.Annexe 1: Syntaxe détaillée VHDL Attributs 'active 'last_value 'last_event ou 'last-active Définitions . il retourne la valeur du rang le plus à droite (la valeur de retour est de type entier). Placé près d'un nom de tableau.com 'stable(T) 'quiet 'transaction 'high 'low 'left 'right . Placé près d'un nom de vecteur ou tableau. il retourne la valeur du rang le plus haut (la valeur de retour est de type entier). Vrai ou faux si le signal auquel il est associé n'est pas affecté pendant la durée T. Retourne la valeur précédente du signal auquel il est associé. Retournent des informations de temps concernant la date d'affectation ou de transition des signaux auxquels ils sont affectés Vrai ou faux si le signal auquel il est associé n'est pas modifié pendant la durée T. il retourne la valeur du rang le plus à gauche (la valeur de retour est de type entier).informations de retour Vrai ou faux si le signal auquel il est associé vient d'être affecté. Placé près d'un nom de tableau. il retourne la valeur du rang le plus bas (la valeur de retour est de type entier). Retourne une information de type bit qui change d'état lorsque le signal auquel il est associé est affecté. Placé près d'un nom de vecteur ou tableau.

Annexe 1: Syntaxe détaillée VHDL 'range Placé près d'un signal. 'length 'event Copyright bousmah@gmail.com .X'low + 1 (sous la forme d'un entier). Placé près d'un signal. 'reverse_range. il retourne la valeur de l'intervalle spécifié par l'instruction range lors de la déclaration du signal ou du type utilisé. il retourne la valeur de l'intervalle inverse spécifié par l'instruction range lors de la déclaration du signal ou du type utilisé Retourne X'high . Vrai ou faux si le signal auquel il est associé vient de subir un changement de valeur.

elsif (A = '1' and B = '1') then S <= '1'. end process. C) begin if (C = '1') then S <= '1'. Toutefois. Mais il est aussi possible de décrire une structure combinatoire en utilisant les instructions séquentielles d'un process. B. L'équation précédente peut. s'écrire : process (A. l'instruction "S <= A and B or C" est toujours vérifiée et correspond à l'équation booléenne S =A. On peut donc décrire ces structures à l'aide d'équations booléennes qui seront toujours vérifiées comme le sont les instructions concurrentes. En effet.Annexe 1: Syntaxe détaillée VHDL Synthèse d'une description VHDL • Fonctions combinatoires: Une fonction combinatoire est une structure pour laquelle chaque combinaison d'entrée fait correspondre en sortie une combinaison déterminée et indépendante des combinaisons d'entrées et de sorties précédentes.on peut être amené à se poser la question de savoir quel type de description est à utiliser. else S <= '0'. end if. L'issue de synthèse de ces deux types de description est identique. par exemple.com .B + C. Copyright bousmah@gmail.

• Description de fonctions combinatoires à l'aide d'instructions concurrentes : Avantages : – la description obtenue est lisible et simple. cette méthode est parfois plus simple. elles sont faites automatiquement par le synthétiseur lors de la synthèse. • Description de fonctions combinatoires à l'aide de process : Avantages : – pour des fonctions compliquées dans lesquelles les équations possèdent de nombreux termes. – il n'est pas nécessaire de faire les simplifications de la table de vérité. Inconvénients : – décrire une fonction combinatoire en utilisant des instructions concurrentes sous-entend que la taille de sa table de vérité le permet ou que les simplifications de cette dernière ont été faites. Copyright bousmah@gmail.com . cette écriture est peu lisible et par conséquent très difficilement modifiable par une personne extérieure. il y a une différence fondamentale entre ces deux descriptions. cette méthode est avantageuse .Annexe 1: Syntaxe détaillée VHDL En réalité. alors que l'autre se base sur l'expression de son comportement. Lorsque la description comportementale est plus simple que la description algorithmique. Pour tenter de résumer les différences existant entre ces deux méthodes de description des fonctions combinatoires. – la description obtenue reflète bien la réalité. on peut lister les avantages et les inconvénients de chacune d'elles. Il n'y a donc pas de règle générale mais plutôt la nécessité de procéder à une démarche logique d'observation avant la description pour choisir la méthode de description adéquate. Inconvénients : – dans certains cas. même si le résultat de la synthèse est identique. L'une n'est que le reflet des équations logiques de la structure Combinatoire à décrire.

L'attribut 'quiet(T). Les possibilités de description offertes par le langage VHDL Sont vastes et bien souvent irréalisables dans l'état actuel des technologies. de gros problèmes aux outils de synthèse qui ne savent pas comment réaliser des structures capables de représenter le fonctionnement de ces attributs. ils sont puissants. efficaces. ne représente aucune structure électronique simple. il existe des attributs qui sont très utilisés et qui représentent même un véritable standard. Prenons l'exemple des attributs. Copyright bousmah@gmail. pour certains. La description d'un front est très simple à réaliser si l'on utilise l'attribut 'event associé à une condition de niveau pour la détection d'un front montant ou descendant. Par contre. qui retourne une information de type booléen qui est vraie lorsque le signal auquel il est associé n'a pas été affecté depuis le temps T. Les synthétiseurs actuels refusent donc cet attribut faute de savoir quoi en faire.com . mais posent.Annexe 1: Syntaxe détaillée VHDL • Fonctions séquentielles: La synthèse d'une fonction logique séquentielle est beaucoup plus complexe que celle d'une fonction combinatoire.

Annexes Annexe 2 Copyright bousmah@gmail.com .

com .Merci de votre attention Copyright bousmah@gmail.