Le langage VHDL. Eduardo Sanchez Laboratoire de Systèmes Logiques. Ecole Polytechnique Fédérale de Lausanne

Documents pareils
Le langage VHDL. Eduardo Sanchez EPFL

T. BLOTIN Lycée Paul-Eluard SAINT-DENIS

Manipulations du laboratoire

Génie Logiciel avec Ada. 4 février 2013

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Arbres binaires de recherche

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Algorithmique & programmation

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

SIN-FPGA DESCRIPTION PAR SCHEMA

Conception Systèmes numériques VHDL et synthèse automatique des circuits

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

IFT1215 Introduction aux systèmes informatiques

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

Conception Systèmes numériques VHDL et synthèse automatique des circuits

Les portes logiques. Voici les symboles des trois fonctions de base. Portes AND. Portes OR. Porte NOT

Qualité du logiciel: Méthodes de test

Présentation du PL/SQL

Compilation (INF 564)

OCL - Object Constraint Language

QUESTION 1 {2 points}

Cours Bases de données 2ème année IUT

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Corrigé des TD 1 à 5

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Examen Médian - 1 heure 30

Conception de circuits numériques et architecture des ordinateurs

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Gestion mémoire et Représentation intermédiaire

Le langage procédural PL-PGSQL

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Système binaire. Algèbre booléenne

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Cours Informatique Master STEP

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Bases de données avancées

Introduction à la programmation concurrente

Cours d algorithmique pour la classe de 2nde

Cours de Programmation 2

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

MAC-TC: programmation d un plate forme DSP-FPGA

PL langage de programmation côté serveur. SQL à la base : types, expressions, requêtes

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Plan du cours Cours théoriques. 29 septembre 2014

Oracle Le langage procédural PL/SQL

Création d installateurs pour Windows avec InnoSetup

Visual Basic for Applications

Application 1- VBA : Test de comportements d'investissements

Problèmes liés à la concurrence

EES : Engineering Equation Solver Fiche récapitulative - Marie-Sophie Cabot

Bases de Données Avancées PL/SQL

Bases de programmation. Cours 5. Structurer les données

Cours 1 : La compilation

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Algorithmes et programmation en Pascal. Cours


1. Structure d'un programme FORTRAN 95

GPA770 Microélectronique appliquée Exercices série A

Algorithmique des Systèmes Répartis Protocoles de Communications

4 Exemples de problèmes MapReduce incrémentaux

Licence Sciences et Technologies Examen janvier 2010

Algorithmique et programmation : les bases (VBA) Corrigé

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

Jeu d instructions NIOS II

Ordonnancement temps réel

Logique séquentielle

Représentation d un entier en base b

Architecture des ordinateurs

Architecture : Circuits numériques et éléments d architecture

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Rapport de Mini-Projet en ArcGIS Engine

.NET - Classe de Log

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Plan du cours. Historique du langage Nouveautés de Java 7

Introduction au langage C

Ordinateurs, Structure et Applications

Rappels d architecture

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Java Licence Professionnelle CISII,

Préparer un état de l art

CM2 L architecture MIPS32

4. Groupement d objets

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Introduction au PL/SQL Oracle. Alexandre Meslé

Cartographie des solutions BigData

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Programmer en JAVA. par Tama

Introduction à MATLAB R

Derrière toi Une machine virtuelle!

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Préparation à l examen EFA en Macro

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

TD Architecture des ordinateurs. Jean-Luc Dekeyser

Transcription:

Le langage VHDL Laboratoire de Systèmes Logiques

VHSIC Very High-Speed Integrated Circuits VHDL Hardware Description Language Langage formel pour la spécification des systèmes digitaux, aussi bien au niveau comportemental que structural Utilisation: description des systèmes simulation aide à la conception documentation Caractéristiques principales: description à plusieurs niveaux simulation activée par événements (event-driven) modularité extensibilité langage général, fortement typé, similaire à Ada Page 2

Histoire 1980: Début du projet, financé par le DoD (400M $US) 1982: Contrat pour Intermetrics, IBM et Texas 1985: Version 7.2 dans le domaine public 1987: Standard IEEE 1076 (VHDL 87) 1993: Nouvelle version du standard (VHDL 93) Etude d une version analogique: VHDL-A Page 3

Objets traités par VHDL Constantes: constant pi : real := 3.1416; constant index_max : integer is 10*N; Variables: valeur modifiable immédiatement par une affectation (:=) variable stop : boolean; variable etat : CodeDEtat := ST0; Signaux: modélisation de l entrée/sortie d un dispositif. C est une forme d onde qui change avec le temps: la modification a lieu à la prochaine itération de la simulation (retard delta) Page 4

Types de données VHDL est un langage fortement typé: tout objet doit être déclaré avant utilisation Les types predéfinis sont: scalaire: integer real enumerated physical composé: array record pointeur: I/O: acces file Page 5

Exemples: type HuitBits is range 0 to 255; type CodeDEtat is (init, ST1, ST2, exit); type word is array (0 to 31) of bit; type EtatsLogiques is record valeur : integer range -127 to 128; force : integer; end record; Page 6

Opérateurs Opérations logiques: and or nand nor xor xnor Opérations de comparaison: = /= < <= > >= Opérations de décalage sll srl sla sra rol ror Opérations d addition: + - & Opérations de signe: + - Opérations de multiplication: * / mod rem Opérations diverses: not abs ** Page 7

Signaux Modélisation d une interconnexion (ou d un groupe d interconnexions) Moyen d interconnexion entre les ports des composants Chaque signal possède une histoire: les valeurs passées, présentes et futures (prévues) sont stockées de façon permanente Page 8

Exemple: signal s : bit := '0'; s <= '1' after 10 ns, '0' after 18 ns, '1' after 25 ns; 1 0 0 10 18 25 temps actuel de simulation t (ns) 0 10 18 25 1 0 1 0 1 valeurs passées valeur actuelle valeurs futures Page 9

Les signaux possèdent deux types de retard: inertiel (par défaut) de transport B A1 A2 10 ns A1 <= B after 10 ns; A2 <= transport B after 10 ns; Page 10

On peut associer certains attributs aux signaux, qui produisent une valeur. Des exemples d attributs sont: s'event: vrai si un événement arrive pendant le delta présent (c est-à-dire, si le signal s change de valeur) s'active: vrai si une transaction arrive pendant le delta présent (c est-à-dire, si le signal s est évalué, qu il change ou pas de valeur) Page 11

Processus (process) Un processus est un ensemble de phrases séquentielles Sémantiquement, c est une boucle infinie, à moins qu il n y ait une phrasewait ou une liste de sensibilité Un modèle VHDL peut être vu comme un ensemble de processus exécutés en parallèle Les signaux sont utilisés pour contrôler l activation des processus Page 12

ident: process déclarations begin (A, B) liste de sensibilité phrases séquentielles end process ident; wait on A, B; Phrases wait: wait on A, B; wait for délai; wait until condition; -- changement de A ou B -- une certaine durée wait on ListeDeSignaux until condition for délai; -- cas général Page 13

Un programme principal en VHDL est un ensemble de processus, chacun s exécutant indéfiniment dans une boucle infinie (à moins d avoir unwait explicite ou une liste de sensibilité). La liste de sensibilité est incompatible avec leswaits: c est l une ou l autre. L ordre d écriture des processus est bien entendu indifférent Une affectation de signal, à l intérieur d un programme principal, est donc un processus. Par exemple: CLK <= not CLK after 10 ns; produit un signal d horloge avec une période de 20 ns. Attention: l affectation CLK <= not CLK; produirait une erreur Page 14

Phrases séquentielles if condition then phrases { elsif condition then phrases} [ else phrases] end if; case opcode of when X"00" => add; when X"01" => subtract; when others => illegal_opcode; end case; Page 15

loop faire; end loop; while toto < tata loop toto := toto + 1; end loop; for item in 1 to last_item loop table(item) := 0; end loop; next [ label ] [ when condition ]; exit [ label ] [ when condition ]; Page 16

Entité (entity) déclaration d entité architecture comportementale architecture structurale architecture dataflow architecture toto déclaration d entité corps de l architecture entité de conception Page 17

Déclaration d entité C est la vue externe du système, avec une déclaration de ses ports (canaux de communication entrée/sortie, pour le transport des signaux) Exemple: A B comparateur C entity comparateur is port (A, B : in bit; C : out bit); end comparateur; Page 18

Corps de l architecture C est la vue interne du système. Plusieurs vues sont possibles pour la même conception Exemple: A I1 XOR2 O S I INV O C I2 B comparateur Page 19

architecture comportementale of comparateur is begin process begin if (A = B) then C <= '1'; else C <= '0'; end if; wait on A, B; end process; end comportementale; Page 20

architecture dataflow of comparateur is begin C <= not (A xor B); end dataflow; Page 21

architecture structurale of comparateur is component XOR2 port (O : out bit; I1, I2 : in bit); end component; component INV port (O : out bit; I : in bit); end component; signal S : bit; begin C1 : XOR2 port map (O => S, I1 => A, I2 => B); C2 : INV port map (C, S); end structurale; Page 22

Différences entre variables et signaux Les variables sont toujours locales à un processus: il n y a pas de variables globales Les signaux peuvent être déclarés n importe où dans le programme, sauf à l intérieur d un processus. S ils sont déclarés au début de l architecture, ils sont communs à toute l architecture Contrairement aux signaux, les variables sont mises à jour de façon instantanée, au moment de l affectation, sans retard possible Page 23

Les phrases à l intérieur d un processus sont toujours exécutées en séquence, y compris les affectations de signaux. Toutefois, les signaux sont mis à jour en même temps, au moment d unwait. En absence d unwait, le processus est exécuté sans arrêt, sans que les signaux soient mis à jour. C est-à-dire: lorsqu on exécute les phrases à l intérieur d un processus, on utilise les valeurs initiales des signaux pour tous les calculs et, à la fin, on met à jour les nouvelles valeurs. Si, par exemple a=4 et b=1 et on a dans un processus: b <= a; c <= b; à la fin on aura b=4 et c=1 En absence d un autrewait, il faut au moins wait for 0 ns; à la fin d un processus pour s assurer de la mise à jour des signaux. Toutefois, cette phrase n est pas acceptée par les synthétiseurs Page 24

Exemple avec des variables: entity toto is end toto; architecture var of toto is signal trigger, sum : integer := 0; begin process variable var1 : integer := 1; variable var2 : integer := 2; variable var3 : integer := 3; begin wait on trigger; var1 := var2 + var3; var2 := var1; var3 := var2; sum <= var1 + var2 + var3; end process; end var; Si trigger change à t=10, alors var1=5, var2=5, var3=5 et à t=10+d,sum=15 Page 25

Exemple avec des signaux: entity toto is end toto; architecture sig of toto is signal trigger, sum : integer := 0; signal sig1 : integer := 1; signal sig2 : integer := 2; signal sig3 : integer := 3; begin process begin wait on trigger; sig1 <= sig2 + sig3; sig2 <= sig1; sig3 <= sig2; sum <= sig1 + sig2 + sig3; end process; end sig; Si trigger change à t=10, tous les signaux sont mis à jour à t=10+d : sig1=5, sig2=1, sig3=2 etsum=6 Page 26

Exemple à l intérieur d un programme principal: a <= b; b <= c; c <= d; En supposant que la période d exécution est de 10 ns, que les valeurs initiales des variables sont a=1, b=2, c=3, d=0, et qu un événement d=4 arrive, le timing de l exécution serait: temps delta a b c d 0 +0 1 2 3 0 10 +0 1 2 3 4 10 +1 1 2 4 4 10 +2 1 4 4 4 10 +3 4 4 4 4 Page 27

Un port de sortie ne peut être utilisé que comme destination d une expression. Exemple: entity nonet is port (a, b : in bit; z, zbarre : out bit); end nonet; architecture fausse of nonet is begin z <= a and b; zbarre <= not z; end fausse; architecture correcte of nonet is signal resultat : bit; begin resultat <= a and b; z <= resultat; zbarre <= not resultat; end correcte; Page 28

Packages et libraries On peut mettre dans un package des composants et des fonctions qui pourront être utilisés par la suite, dans d autres programmes Des packages peuvent être mis à l intérieur d unelibrary Pour utiliser un package, il faut le déclarer, ainsi que sa library: library bitlib; use bitlib.bit_pack.all; library package composant ou fonction Page 29

Une library tres utilisée est celle définissant le standard IEEE 1164: library IEEE; use IEEE.std_logic_1164.all; Cette library contient notamment la définition des typesstd_logic et std_logic_vector, qui remplacent couramment les types bit et bit_vector, respectivement. L avantage principal de ces types est de permettre l utilisation de 9 valeurs différentes pour tout signal logique: 'U' uninitialized 'X' forcing unknown 'W' weak unknown '0' forcing 0 'L' weak 0 '1' forcing 1 'H' weak 1 'Z' high impedance '-' don t care Page 30

Exemple de système combinatoire Additionneur de deux nombres à deux bits: x1 x0 y1 y0 AddLog s2 s1 s0 library ieee; use ieee.std_logic_1164.all; entity AddLog is port (x1, x0, y1, y0 : in std_logic; s2, s1, s0 : out std_logic); end AddLog; Page 31

architecture table of AddLog is signal entree: std_logic_vector(3 downto 0); begin entree <= x1 & x0 & y1 & y0; process (entree) begin case entree is when "0000" => s2 <= '0'; s1 <= '0'; s0 <= '0'; when "0001" => s2 <= '0'; s1 <= '0'; s0 <= '1'; when "0010" => s2 <= '0'; s1 <= '1'; s0 <= '0'; when "0011" => s2 <= '0'; s1 <= '1'; s0 <= '1'; Page 32

when "0100" => s2 <= '0'; s1 <= '0'; s0 <= '1'; when "0101" => s2 <= '0'; s1 <= '1'; s0 <= '0'; when "0110" => s2 <= '0'; s1 <= '1'; s0 <= '1'; when "0111" => s2 <= '1'; s1 <= '0'; s0 <= '0'; when "1000" => s2 <= '0'; s1 <= '1'; s0 <= '0'; when "1001" => s2 <= '0'; s1 <= '1'; s0 <= '1'; when "1010" => s2 <= '1'; s1 <= '0'; s0 <= '0'; when "1011" => s2 <= '1'; s1 <= '0'; s0 <= '1'; Page 33

when "1100" => s2 <= '0'; s1 <= '1'; s0 <= '1'; when "1101" => s2 <= '1'; s1 <= '0'; s0 <= '0'; when "1110" => s2 <= '1'; s1 <= '0'; s0 <= '1'; when "1111" => s2 <= '1'; s1 <= '1'; s0 <= '0'; when others => s2 <= 'U'; s1 <= 'U'; s0 <= 'U'; end case; end process; end table; Page 34

Page 35

architecture equations of AddLog is begin s2 <= (x1 and y1) or (x1 and x0 and y0) or (x0 and y1 and y0); s1 <= (x0 and y0) xor (x1 xor y1); s0 <= x0 xor y0; end equations; Page 36

Page 37

Description fonctionnelle: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity AddFonc is port (x, y : in std_logic_vector(1 downto 0); s : out std_logic_vector(2 downto 0)); end AddFonc; architecture comportement of AddFonc is begin s <= ('0' & x) + ('0' & y); end comportement; Page 38

Page 39

Synthèse: exemple de machine séquentielle 1/0 S0 0/1 X/Z 0/1 1/0 S2 1/1 0/0 1/0 S1 0/1 0/0 S4 S3 1/1 1/0 0/1 1/1 0/0 S6 S5 Page 40

CLK X MS Z entity MS is port (X, CLK : in std_logic; Z : out std_logic); end MS; Page 41

Z X SLC Nextstate 3 registre State 3 CLK Page 42

architecture graphe of MS is signal State, Nextstate: integer := 0; begin process (State, X) begin case State is when 0 => if X='0' then Z <= '1'; Nextstate <= 1; else Z <= '0'; Nextstate <= 2; end if; when 1 => if X='0' then Nextstate <= 3; else Z <= '0'; Nextstate <= 4; end if; when 2 => Nextstate <= 4; if X='1' then Z <= '1'; end if; when 3 => Nextstate <= 5; if X='0' then Z <= '0'; end if; Page 43

when 4 => if X='0' then Z <= '1'; Nextstate <= 5; else Z <= '0'; Nextstate <= 6; end if; when 5 => Nextstate <= 0; if X='0' then Z <= '0'; else Z <= '1'; end if; when 6 => Nextstate <= 0; if X='0' then Z <= '1'; end if; when others => null; end case; end process; process (CLK) begin if CLK='1' and CLK'event then State <= Nextstate; end if; end process; end graphe; Page 44

Page 45

architecture synt1 of MS is type s_type is (S0, S1, S2, S3, S4, S5, S6); signal State, Nextstate: s_type; begin process (State, X) begin case State is when S0 => if X='0' then Z <= '1'; Nextstate <= S1; else Z <= '0'; Nextstate <= S2; end if; when S1 => if X='0' then Z <= '1'; Nextstate <= S3; else Z <= '0'; Nextstate <= S4; end if; when S2 => if X='0' then Z <= '0'; Nextstate <= S4; else Z <= '1'; Nextstate <= S4; end if; Page 46

when S3 => if X='0' then Z <= '0'; Nextstate <= S5; else Z <= '1'; Nextstate <= S5; end if; when S4 => if X='0' then Z <= '1'; Nextstate <= S5; else Z <= '0'; Nextstate <= S6; end if; when S5 => if X='0' then Z <= '0'; Nextstate <= S0; else Z <= '1'; Nextstate <= S0; end if; when S6 => if X='0' then Z <= '1'; Nextstate <= S0; end if; end case; end process; process (CLK) begin if CLK='1' and CLK'event then State <= Nextstate; end if; end process; Page 47 end synt1;

Page 48

CLK X reset MS Z entity MS is port (X, reset, CLK : in std_logic; Z : out std_logic); end MS; Page 49

architecture synt2 of MS is type s_type is (S0, S1, S2, S3, S4, S5, S6); signal State, Nextstate: s_type; begin process (State, X) begin Z <= '0'; Nextstate <= S0; case State is when S0 => if X='0' then Z <= '1'; Nextstate <= S1; else Nextstate <= S2; end if; when S1 => if X='0' then Z <= '1'; Nextstate <= S3; else Nextstate <= S4; end if; when S2 => Nextstate <= S4; if X='1' then Z <= '1'; end if; Page 50

when S3 => Nextstate <= S5; if X='1' then Z <= '1'; end if; when S4 => if X='0' then Z <= '1'; Nextstate <= S5; else Nextstate <= S6; end if; when S5 => if X='1' then Z <= '1'; end if; when S6 => if X='0' then Z <= '1'; end if; end case; end process; process (CLK, reset) begin if reset='1' then State <= S0; elsif CLK='1' and CLK'event then State <= Nextstate; end if; end process; end synt2; Page 51

Page 52

Procédures Il existe trois modes pour les paramètres des procédures: in: le paramètre est passé en valeur et ne peut donc pas être modifié par la procédure out: le paramètre est modifié par la procédure mais aucune valeur n est transmise à la procédure inout: le paramètre est passé par référence et il peut donc être lu et modifié Page 53

Exemple: type byte is array (7 downto 0) of std_logic; procedure ByteToInteger (ib: in byte; oi: out integer) is variable result : integer := 0; begin for i in 0 to 7 loop if ib(i) = '1' then result := result + 2**i; end if; end loop; oi := result; end ByteToInteger; Page 54

Fonctions Tous les paramètres d une fonction sont de mode in: en dehors de ses variables locales, une fonction ne peut modifier que la valeur retournée. En plus, les paramètres ne peuvent pas être de type variable: ils ne peuvent être que des constantes ou des signaux Exemple: function f (a, b, c : std_logic) return std_logic is variable x : std_logic; begin x := ((not a) and (not b) and c); return x; end f; Page 55

Generics C est une façon de spécifier des paramètres pour un composant: à chaque fois que le composant est utilisé, on peut donner des valeurs différentes pour ces paramètres Exemple: entity nand2 is generic (trise, tfall : time; load: natural); port (a, b : in std_logic; c : out std_logic); end nand2; component nand2 is generic (trise : time := 3 ns; tfall : time := 2 ns; load : natural := 1); port (a, b : in std_logic; c : out std_logic); end component; Page 56