le langage vhdllsl · 2000. 3. 20. · le langage vhdl. eduardo sanchez page 2 ecole polytechnique...

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

Upload: others

Post on 25-Jan-2021

7 views

Category:

Documents


0 download

TRANSCRIPT

  • Eduardo SanchezLaboratoire de Systèmes Logiques

    Ecole Polytechnique Fédérale de Lausanne

    Le langage VHDL

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 2

    u Langage formel pour la spécification des systèmes digitaux, aussi bien au niveau comportemental que structural

    u Utilisation:X description des systèmesX simulationX aide à la conceptionX documentation

    u Caractéristiques principales:X description à plusieurs niveauxX simulation activée par événements (event-driven)X modularitéX extensibilitéX langage général, fortement typé, similaire à Ada

    VHDLVHSIC

    Very High-Speed Integrated Circuits Hardware Description Language

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 3

    Histoireu 1980:

    Début du projet, financé par le DoD (400M $US)u 1982:

    Contrat pour Intermetrics, IBM et Texasu 1985:

    Version 7.2 dans le domaine publicu 1987:

    Standard IEEE 1076 (VHDL 87)u 1993:

    Nouvelle version du standard (VHDL 93)u Etude d’une version analogique: VHDL-A

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 4

    Objets traités par VHDL

    u Constantes:constant pi : real := 3.1416;constant index_max : integer is 10*N;

    u Variables:valeur modifiable immédiatement par une affectation (:=)

    variable stop : boolean;variable etat : CodeDEtat := ST0;

    u Signaux:modélisation de l’entrée/sortie d’un dispositif. C’est une formed’onde qui change avec le temps: la modification a lieu à la prochaine itération de la simulation (retard delta)

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 5

    Types de données

    u VHDL est un langage fortement typé: tout objet doit être déclaréavant utilisation

    u Les types predéfinis sont:X scalaire: integer

    realenumeratedphysical

    X composé: arrayrecord

    X pointeur: accesX I/O: file

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 6

    u 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 recordvaleur : integer range -127 to 128;force : integer;end record;

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 7

    Opérateursu Opérations logiques:

    X and or nand nor xor xnoru Opérations de comparaison:

    X = /= < >=u Opérations de décalage

    X sll srl sla sra rol roru Opérations d’addition:

    X + - &u Opérations de signe:

    X + -u Opérations de multiplication:

    X * / mod remu Opérations diverses:

    X not abs **

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 8

    Signaux

    u Modélisation d’une interconnexion (ou d’un groupe d’interconnexions)u Moyen d’interconnexion entre les ports des composantsu Chaque signal possède une histoire: les valeurs passées, présentes et

    futures (prévues) sont stockées de façon permanente

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 9

    u Exemple:signal s : bit := '0';

    •••s

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 10

    u Les signaux possèdent deux types de retard:X inertiel (par défaut)X de transport

    A1

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 11

    u On peut associer certains attributs aux signaux, qui produisent une valeur. Des exemples d’attributs sont:X s'event:

    vrai si un événement arrive pendant le delta présent (c’est-à-dire, si le signal s change de valeur)

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

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 12

    Processus (process)

    u Un processus est un ensemble de phrases séquentiellesu Sémantiquement, c’est une boucle infinie, à moins qu’il n’y ait une

    phrase wait ou une liste de sensibilitéu Un modèle VHDL peut être vu comme un ensemble de processus

    exécutés en parallèleu Les signaux sont utilisés pour contrôler l’activation des processus

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 13

    u Phrases wait:wait on A, B; -- changement de A ou Bwait for délai; -- une certaine duréewait until condition;wait on ListeDeSignaux until condition

    for délai; -- cas général

    ident: processdéclarations

    begin

    phrases séquentielles

    end process ident;

    (A, B)

    wait on A, B;

    liste de sensibilité

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 14

    u Un programme principal en VHDL est un ensemble de processus, chacun s’exécutant indéfiniment dans une boucle infinie (à moinsd’avoir un wait explicite ou une liste de sensibilité). La liste de sensibilité est incompatible avec les waits: c’est l’une ou l’autre.L’ordre d’écriture des processus est bien entendu indifférent

    u Une affectation de signal, à l’intérieur d’un programme principal, est donc un processus. Par exemple:

    CLK

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 15

    Phrases séquentielles

    uif condition then

    phrases{ elsif condition then

    phrases }[ else

    phrases ]end if;

    ucase opcode of

    when X"00" => add;when X"01" => subtract;when others => illegal_opcode;

    end case;

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 16

    uloop

    faire;end loop;

    uwhile toto < tata loop

    toto := toto + 1;end loop;

    ufor item in 1 to last_item loop

    table(item) := 0;end loop;

    unext [ label ] [ when condition ];

    uexit [ label ] [ when condition ];

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 17

    Entité (entity)

    déclaration d’entité

    architecturecomportementale

    architecturestructurale

    architecturedataflow

    architecturetoto

    déclarationd’entité

    corps del’architecture entité de conception

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 18

    Déclaration d’entitéu 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)

    u Exemple:

    comparateurA

    BC

    entity comparateur isport (A, B : in bit;

    C : out bit);end comparateur;

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 19

    Corps de l’architecture

    u C’est la vue interne du système.Plusieurs vues sont possibles pour la même conception

    u Exemple:

    XOR2I1

    I2

    SINVO OI C

    A

    Bcomparateur

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 20

    architecture comportementale of comparateur isbegin

    processbeginif (A = B) then

    C

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 21

    architecture dataflow of comparateur isbegin

    C

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 22

    architecture structurale of comparateur is

    component XOR2port (O : out bit; I1, I2 : in bit);

    end component;component INV

    port (O : out bit; I : in bit);end component;signal S : bit;

    beginC1 : XOR2 port map (O => S, I1 => A, I2 => B);C2 : INV port map (C, S);

    end structurale;

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 23

    Différences entre variables et signaux

    u Les variables sont toujours locales à un processus: il n’y a pas de variables globales

    u 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

    u Contrairement aux signaux, les variables sont mises à jour de façon instantanée, au moment de l’affectation, sans retard possible

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 24

    u 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’un wait. En absence d’un wait, 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

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 25

    u Exemple avec des variables:

    Si trigger change à t=10, alors var1=5, var2=5, var3=5 et à t=10+∆, sum=15

    entity toto isend toto;

    architecture var of toto issignal trigger, sum : integer := 0;

    beginprocess

    variable var1 : integer := 1;variable var2 : integer := 2;variable var3 : integer := 3;begin

    wait on trigger;var1 := var2 + var3;var2 := var1;var3 := var2;sum

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 26

    u Exemple avec des signaux:

    Si trigger change à t=10, tous les signaux sont mis à jour à t=10+∆ : sig1=5, sig2=1, sig3=2 et sum=6

    entity toto isend toto;

    architecture sig of toto issignal trigger, sum : integer := 0;signal sig1 : integer := 1;signal sig2 : integer := 2;signal sig3 : integer := 3;begin

    processbeginwait on trigger;sig1

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 27

    u Exemple à l’intérieur d’un programme principal:

    a

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 28

    u Un port de sortie ne peut être utilisé que comme destination d’une expression. Exemple:

    entity nonet isport (a, b : in bit;

    z, zbarre : out bit);end nonet;

    architecture fausse of nonet isbegin

    z

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 29

    Packages et libraries

    u On peut mettre dans un package des composants et des fonctions qui pourront être utilisés par la suite, dans d’autres programmes

    u Des packages peuvent être mis à l’intérieur d’une libraryu 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

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 30

    u 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 types std_logic etstd_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:X 'U' uninitializedX 'X' forcing unknownX 'W'weak unknownX '0' forcing 0X 'L'weak 0X '1' forcing 1X 'H'weak 1X 'Z' high impedanceX '-' don’t care

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 31

    Exemple de système combinatoireu Additionneur de deux nombres à deux bits:

    library ieee;use ieee.std_logic_1164.all;

    entity AddLog isport (x1, x0, y1, y0 : in std_logic;

    s2, s1, s0 : out std_logic);end AddLog;

    AddLogAddLog

    x1x0y1y0

    s2s1s0

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 32

    architecture table of AddLog issignal entree: std_logic_vector(3 downto 0);

    beginentree s2

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 33

    when "0100" => s2

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 34

    when "1100" => s2

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 35

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 36

    architecture equations of AddLog isbegin

    s2

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 37

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 38

    u Description fonctionnelle:

    library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;

    entity AddFonc isport (x, y : in std_logic_vector(1 downto 0);

    s : out std_logic_vector(2 downto 0));end AddFonc;

    architecture comportement of AddFonc isbegin

    s

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 39

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 40

    Synthèse: exemple de machine séquentielle

    S0S0

    S1S1

    S3S3

    S5S5

    S2S2

    S4S4

    S6S6

    0/1

    0/1

    0/01/1

    0/0

    1/1

    0/1

    0/1

    1/0

    0/01/1

    1/0

    1/0

    X/Z

    1/0

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 41

    MSMSCLK

    XZ

    entity MS isport (X, CLK : in std_logic;

    Z : out std_logic);end MS;

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 42

    SLCX Nextstate

    registreState

    Z

    CLK

    3

    3

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 43

    architecture graphe of MS is

    signal State, Nextstate: integer := 0;

    begin

    process (State, X)begin

    case State iswhen 0 =>

    if X='0' then Z

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 44

    when 4 =>if X='0' then Z

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 45

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 46

    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 iswhen S0 =>

    if X='0' then Z

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 47

    when S3 =>if X='0' then Z

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 48

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 49

    MSMSCLK

    XZ

    entity MS isport (X, reset, CLK : in std_logic;

    Z : out std_logic);end MS;

    reset

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 50

    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

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 51

    when S3 =>Nextstate

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 52

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 53

    Procédures

    u Il existe trois modes pour les paramètres des procédures:X in: le paramètre est passé en valeur et ne peut donc pas être modifié par la

    procédureX out: le paramètre est modifié par la procédure mais aucune valeur n’est

    transmise à la procédureX inout: le paramètre est passé par référence et il peut donc être lu et modifié

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 54

    u Exemple:

    type byte is array (7 downto 0) of std_logic;•••

    procedure ByteToInteger (ib: in byte; oi: out integer) isvariable result : integer := 0;begin

    for i in 0 to 7 loopif ib(i) = '1' then

    result := result + 2**i;end if;

    end loop;oi := result;

    end ByteToInteger;

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 55

    Fonctions

    function f (a, b, c : std_logic) return std_logic isvariable x : std_logic;begin

    x := ((not a) and (not b) and c);return x;

    end f;

    u 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

    u Exemple:

  • Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 56

    Genericsu 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

    u Exemple:entity nand2 is

    generic (trise, tfall : time;load: natural);

    port (a, b : in std_logic;c : out std_logic);

    end nand2;•••

    component nand2 isgeneric (trise : time := 3 ns;

    tfall : time := 2 ns;load : natural := 1);

    port (a, b : in std_logic;c : out std_logic);

    end component;