La Bnbox !

Créateur de sourires...

Mon compte

S'inscrire

Recherche

Vous êtes ici : Accueil » Atelier Webmaster » Mémo de VHDL » Le langage VHDL

Atelier Webmaster



Sommaire du cours

Mémo de VHDL : Le langage VHDL

Le but de ce mémo est de rappeler de manière concise tout ce qu'il est utile de savoir pour programmer en VHDL. N'hésitez pas à préciser en commentaire les oublis ou les points qui vous semblerez inutiles ou au contraire pas assez détaillés. Bonne lecture bn_big_smile

Types d'objets


Le VHDL admet de nombreux types d'objets et permet la définition de types nouveaux. Voici quelques types existants :

STD_LOGIC

Le type STD_LOGIC : objets représentés sur 1 bit, sur lesquels on peut appliquer toutes les opérations logiques : AND, NAND, OR, NOR, XOR, XNOR, NOT ...
Exemple d'affectation :
Code :
PORT(
    E : IN STD_LOGIC;
    S : IN STD_LOGIC;
);


Valeurs admises pour un STD_LOGIC

Valeur Signification
0 ou L niveau bas
1 ou H niveau haut
Z tri-state = haute impédance
U non initialisé
X initialisé à l'état indéterminé
- sans importance


STD_LOGIC_VECTOR

Le type STD_LOGIC_VECTOR : tableaux à une dimension d'objets de type STD_LOGIC.
Exemple d'affectation :
Code :
PORT(
    E : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
    S : IN STD_LOGIC;
);

On a alors un tableau E : E(0), E(1), E(2) et E(3) de type STD_LOGIC.

INTEGER

Le type INTEGER : objets sur lesquels seront appliqués les opérations arithmétiques élémentaires.
Exemple d'affectation :
Code :
PORT(
    E : IN INTEGER RANGE 0 TO 3;
    S : IN STD_LOGIC;
);

Le domaine de définition d'un INTEGER est en général \mathbb{[} 0,3 \mathbb{]} par défaut.

Opérateurs


Opérateur Opération
+ Addition
- Soustraction
* Multiplication
/ Division
MOD Modulo
REM Reste
= Égalité
/= Différence
< Strictement inférieur
<= Inférieur
> Strictement supérieur
>= Supérieur
& Concaténation
NOT Complément logique
AND ET logique
NAND NON ET logique
OR OU inclusif logique
NOR NON OU inclusif logique
XOR OU exclusif logique
XNOR NON OU exclusif logique
SLL Décalage logique gauche
SRL Décalage logique droite
SLA Décalage arithmétique gauche
SRA Décalage arithmétique droite
ROL Rotation par la gauche
ROR Rotation par la droite

Structure d'une description


Une description est le code décrivant le design, ou fonctionnement, d'un circuit logique (que ce soit une bascule, un afficheur 7 segments, ou je ne sais !).
Structure générale

Une description est toujours articulée autour de 3 rubriques :
  • LIBRARY : énumère les bibliothèques définissant, entre autre, les types d'objets utilisés.
  • ENTITY : définit l'entrée et la sortie du composant.
  • ARCHITECTURE : définit ce que fait le composant (cette définition peut être structurelle ou comportementale).


On insère un commentaire dans le code, c'est-à-dire du texte utile à la compréhension du code mais qui ne sera pas compilé, à l'aide de deux tirets :
Code :
-- Ceci est un commentaire dans le code
Ceci est du code
-- Ceci est un autre commentaire


On peut donc définir un structure générale pour une description
Code :
LIBRARY ieee;   -- Bibliothèque contenant la définition des types STD_LOGIC et STD_LOGIC_VECTOR.
USE ieee.std_logic_1164.ALL;


ENTITY nom_fichier IS    -- Interface du design
PORT(
    <Définition des entrées et des sorties>
    );
END nom_fichier;


ARCHITECTURE archi OF nom_fichier IS    -- Description du design

   <Appel d'un composant déjà créé avec COMPONENT, ou définition de variables intermédiaires avec SIGNAL>

BEGIN

    <Instructions avec éventuellement des PROCESS, et des conditions>

END archi;

Structure de descriptions par l'exemple

L'exemple de description suivant ne fait rien en particulier et comportera certainement des erreurs à la compilation, son but est simplement de référencer toutes les commandes réalisables dans une description.

Code :
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;


ENTITY nom_fichier IS                         -- Fichier nom_fichier.vhdl
PORT(
    E1, E2, E3, E4 : IN STD_LOGIC;            -- Flux entrant
    E5 : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
    E6, E7 : IN INTEGER RANGE 0 TO 3;
    S1, S2, S3, S4, S5, S6 : OUT STD_LOGIC;   -- Flux sortant.
    S7 : OUT INTEGER RANGE 0 TO 6     -- /!\ La dernière ligne du PORT ne finit pas par ; /!\
    );
END nom_fichier;


ARCHITECTURE archi OF nom_fichier IS

COMPONENT nom_fichier_composant   -- Fichier nom_fichier_composant.vhdl préalablement créé
PORT(
    A, B : IN STD_LOGIC;
    RM, SM : OUT STD_LOGIC
    );
END COMPONENT;

SIGNAL N0, NS0, N1, NS1 : STD_LOGIC;           -- Objets intermédiaires
SIGNAL N3, N4 : INTEGER RANGE 0 TO 5;
SIGNAL N5, N6 : STD_LOGIC_VECTOR (4 DOWNTO 0);
SIGNAL sig : STD_LOGIC;      -- Déclaration obligatoire pour travailler sur la sortie

BEGIN

  -- Assignation classique à la sortie
    S0 <= '1';                                 -- On assigne 1 à la sortie S0

  -- Utilisation d'un COMPONENT
    M0:nom_fichier_composant                   -- Première instance du module nom_fichier_composant.vhdl
    PORT MAP (A =>
E1, B => E2, RM => N0, SM => NS0);
    M1:nom_fichier_composant                   -- Deuxième instance du module...
    PORT MAP (A => E3, B => E4, RM => N1, SM => NS1);
    S1 <= N0 OR N1;

  -- Descriptions comportementales
    S2 <= '1' WHEN (E1='1' OR E2='1') ELSE '0';

    PROCESS (E6)  -- Tout ce qui est testé par des IF, ELSE, CASE se trouve dans un PROCESS
    BEGIN
        IF (E6=0) THEN S3 <= E5(0);
        ELSIF (E6=1) THEN S3 <= E5(1);
        ELSIF (E6=2) THEN S3 <= E5(2);
        ELSE S3 <= E5(3);
        END IF;
    END PROCESS;

    PROCESS (E6) -- Même structure que précédement, mais avec if, then, else et non if, then, elsif, else.
    BEGIN
        IF (E6=0) THEN S3 <= E5(0);
        ELSE
            IF (E6=1) THEN S3 <= E5(1);
            ELSE
                IF (E6=2) THEN S3 <= E5(2);
                ELSE S3 <= E5(3);
                END IF;
            END IF;
        END IF;
    END PROCESS;
   
    PROCESS (E6)
    BEGIN
        CASE E6 IS
          WHEN 0 =>
S4 <= E5(0);
          WHEN 1 =>
S4 <= E5(1);
          WHEN 2 =>
S4 <= E5(2);
          WHEN 3 =>
S4 <= E5(3);
          WHEN OTHERS =>
S4 <= "1";     -- Tous les autres cas (facultatif).
        END CASE;
    END PROCESS;

    PROCESS (E5)
    VARIABLE compteur : INTEGER;        -- Objet gérant le comptage de bits à 1
    BEGIN
        compteur:=0;
        FOR I IN 0 TO 3 LOOP            -- I ne doit pas être déclaré


          IF (E5(I)='1') THEN compteur:=compteur + 1;
          END IF;
        END LOOP;
    END PROCESS;

    PROCESS (E6, E7)
    BEGIN
        S5 <= E6 + E7;
    END PROCESS;

    PROCESS(E3, E4)
    BEGIN
        IF E4='1' THEN sig <= E3;        -- La sortie prend l'état de E3
        ELSE sig <= sig                   -- La sortie reste inchangée
        END IF;
    END PROCESS;
    S6 <= sig;

    PROCESS                              -- Ce PROCESS réagira à tous les signaux
    BEGIN
        WAIT UNTIL E4='1';
        sig <= E5;
    END PROCESS;
    S6 <= sig;

    PROCESS (E4)
    BEGIN
        IF E4 'EVENT AND E4='1' THEN sig <= E5;  -- Voir "A ne pas oublier"
        ELSE sig <= sig;
        END IF;
    END PROCESS;
    S6 <= sig;

END archi;

A ne pas oublier
  • Ne jamais mettre de point virgule ( ; ) à la fin de la dernière ligne d'un PORT.
  • Utiliser un PROCESS (A, B) quand A et B (appelés sensibilités du PROCESS) sont testés avec des conditions IF THEN ELSEIF THEN ELSE END IF ou CASE WHEN, ou qu'il y a un calcul arithmétique (ex : A+B).
  • Pour un IF THEN ELSEIF THEN ELSE END IF ou un CASE WHEN, tous les cas possibles doivent être envisagés. Sinon il y aura création d'une fonction registre perturbatrice.
  • cmd 'EVENT AND cmd='1' pour détecter un front montant. cmd 'EVENT AND cmd='0' pour détecter un front descendant.


Et voilà, ce mémo de VHDL est terminé ! Rédiger un mémo c'est assez sympa car c'est plutôt rapide et pas trop prise de tête, mais une question reste tout de même en suspend : est-ce aussi facile à lire ? J'ose espérer que ce modeste résumé vous aura tout de même été utile.

Ailleurs sur la Bnbox

Ailleurs sur la Toile

Mini-tchat

?

yo proclame : Yo yo Le 17 février, 20h54 via Résumé - Le Médecin Malgrè ...

eva scribouille : Qu el qu un a un resume sur le voyage de mr perrichon ? Le 11 février, 18h38 via Fiches sur les personnages ...

evalol déclare : 1a2z Le 11 février, 18h36 via Résumé - Les Fourberies De ...

sysy s'exclame : Quelqun a un resume des evenements importants ds bel ami? Le 11 février, 1h38 via Fiches sur les personnages ...

jojolerigolo tergiverse : Qui est a Léon Blum Le 10 février, 18h00 via Politique d'accessibilité

tom s'exclame : Bonjour Le 09 février, 13h39 via Résumé scène par scène - Le...

dams chuchote : Et dams lithopedion Le 02 février, 11h08 via Résumé scène par scène - Le...

dams écrit : Qui et votre rapeure prefere ou chanteure moi DAMSO DAMSO DAMSO DAMSO DAMSO c'est cqfd !! Le 02 février, 11h07 via Résumé scène par scène - Le...

dams dit : Bonjour Le 02 février, 11h05 via Résumé scène par scène - Le...

dams déclame : Elle et bien mais c'est notre prof de francais quoi qui nous demande de la faire Le 02 février, 11h05 via Résumé scène par scène - Le...

Laura.lly gribouille : BONJOUR Le 01 février, 21h00 via Résumé scène par scène - Le...

juliaaaaaa griffonne : HEYYYY!!Vous allez bien? Le 31 janvier, 18h47 via Résumé scène par scène - Le...

maelys griffonne : Le cid en soit n est pas si mal c'est juste qu il est compliqué a comprendre j ai un oral a faire devant toute ma classe et j ai a peux pres compris Le 31 janvier, 16h11 via Résumé scène par scène - Le...

leane écrit : Et le je travail sur le cid je comprend rien sa me soule Le 30 janvier, 14h51 via Résumé scène par scène - Le...

leane dit : Moi jai fait les fourberie de scapin lannee derniere quand jetais en 5eme Le 30 janvier, 14h51 via Résumé scène par scène - Le...

Charlienette déclare : Nan .. je hurle la Le 30 janvier, 9h58 via Résumé - Les Fourberies De ...

Charlienette chuchote : Je murmure pas ! Le 30 janvier, 9h58 via Résumé - Les Fourberies De ...

Charlienette murmure : JE l'ai demain Le 30 janvier, 9h58 via Résumé - Les Fourberies De ...

Charlienette griffonne : Vous avez déjà fait un cibtrole sur les fourberies de scapin acte 2 ? Le 30 janvier, 9h58 via Résumé - Les Fourberies De ...

Charlienette déclame : Coucou Le 30 janvier, 9h57 via Résumé - Les Fourberies De ...

lkjhgfds chuchote : Coucou Le 28 janvier, 20h43 via Résumé - Le Médecin Malgrè ...

kikoudu73 écrit : Octogone Le 28 janvier, 14h30 via Fiches sur les personnages ...

kikoudu73 tergiverse : Avec ta region perdue Le 28 janvier, 14h29 via Fiches sur les personnages ...

bobby dit : Mairci bocou se cour de francé ma biain édé.2 + javé pa lu le livreu Le 28 janvier, 13h12 via Fiches sur les personnages ...

hghyfrfde scribouille : Lkjugtrdf Le 27 janvier, 12h16 via Résumé - Les Fourberies De ...

youyou déclare : Champs requis Le 06 janvier, 20h33 via Français

Samantha déclare : C'est tres simple Le 06 janvier, 17h51 via Résumé scène par scène - Le...

Samantha dit : CC Le 06 janvier, 17h51 via Résumé scène par scène - Le...

bande de ouff déclare : Ou vous étè vivant Le 06 janvier, 16h38 via Résumé : Le Tartuffe de Mol...

bande de ouff chuchote : Yo bande de ouff Le 06 janvier, 16h35 via Résumé : Le Tartuffe de Mol...

LE BG griffonne : HELLO MA MAN Le 04 janvier, 7h18 via Résumé scène par scène - Le...

. gribouille : ; Le 02 janvier, 19h37 via Résumé : Le Mariage de Figa...

loo griffonne : Looo Le 02 janvier, 19h18 via Les avantages et les risque...

aaaaa murmure : Cacas Le 02 janvier, 13h25 via Les avantages et les risque...

lu proclame : Que tal? Le 01 janvier, 17h06 via Les avantages et les risque...

lu écrit : Hey Le 01 janvier, 17h06 via Les avantages et les risque...

ribou proclame : Coucou Le 30 décembre 2018, 11h52 via Fiches sur les personnages ...

aziz proclame : Toutoutoutou Le 28 décembre 2018, 15h30 via Comment fonctionne le mini-...

aziz chuchote : Waw made in china Le 28 décembre 2018, 15h29 via Comment fonctionne le mini-...

aziz murmure : Je suis hiybjgujh Le 28 décembre 2018, 15h29 via Résumé - La Chèvre De M. Se...

Moi s'exclame : Nb k Le 18 décembre 2018, 23h12 via Résumé scène par scène - Le...

yuiooyo tergiverse : Jouon ensemble Le 17 décembre 2018, 21h19 via Résumé scène par scène - Le...

Tom déclare : Ça va Le 17 décembre 2018, 10h25 via Résumé - Les Fourberies De ...

Carla proclame : Caca Le 17 décembre 2018, 10h22 via Résumé - Les Fourberies De ...

Moi écrit : Génial ? Le 17 décembre 2018, 10h21 via Résumé - Les Fourberies De ...

yi déclare : Ipmuo Le 16 décembre 2018, 17h45 via Résumé scène par scène - Le...

Moi chuchote : Bvvgvv Le 16 décembre 2018, 15h22 via Résumé scène par scène - Le...

Moi tergiverse : Bbcgd Le 16 décembre 2018, 15h22 via Résumé scène par scène - Le...

)à)ào$ bafouille : Jiojiij Le 16 décembre 2018, 13h22 via Résumé scène par scène - Le...

atuil dit : Zzeee Le 15 décembre 2018, 21h47 via Résumé scène par scène - Le...

Publicité



Articles précédents

©Bnbox (Infos) - Cahier de l'élèves - Atelier webmaster - Boîte à Nuts - Bar à Nougat - Plus ou moins valide XHTML 1.0, CSS 2, RSS 2.0
Flux RSS