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

?

Pierre Corneille scribouille : Je m'appelle Pierre Corneille je suis mort le 2 décembre je meur avec la chimère Le 02 décembre, 13h49 via Résumé du livre : Le Cid de...

reptilause murmure : TG Le 02 décembre, 13h48 via Résumé du livre : Le Cid de...

reptilause scribouille : Salut bande
de BN
Le 02 décembre, 13h48 via Résumé du livre : Le Cid de...

reptilause tergiverse : Reptileuse Le 02 décembre, 13h47 via Résumé du livre : Le Cid de...

Xeno déclare : Ok on y gagne quoi Le 30 novembre, 16h38 via Texte intégral - L'Avare de...

bobo écrit : WTF le calcul !*
Des barres!
Le 28 novembre, 20h31 via Résumé : La Promesse de l'a...

bobo scribouille : Merci!
Ca va me servir!
Le 28 novembre, 20h30 via Résumé : La Promesse de l'a...

bobo s'exclame : Tchippppppppp Le 28 novembre, 20h30 via Résumé : La Promesse de l'a...

mimi déclame : Qui aime chica vampiro ou bien qui a deja vu chica vampiro Le 28 novembre, 12h24 via Résumé - Les Fourberies De ...

lol bafouille : Lol le calcul Le 27 novembre, 15h50 via Mémo de VHDL

jenpierrdecou écrit : Et les armes en diamant sur bo2 Le 26 novembre, 14h22 via Résumé : L'Avare

jenpierrdecou déclame : Ctrl+w et vous avez argent illimité sur gta Le 26 novembre, 14h21 via Résumé : L'Avare

jenpierrdecou bafouille : Lololollolol Le 26 novembre, 14h21 via Résumé : L'Avare

jen déclare : Oké Le 26 novembre, 14h20 via Résumé : L'Avare

123 gribouille : Slttttttt Le 26 novembre, 13h23 via Résumé : Le Mariage de Figa...

Bnmaster chuchote : @lali Le voici Les Fourberies de Scapin Le 24 novembre, 10h13 via Résumé - Les Fourberies De ...

lali écrit : S il vous plait est ce que vous pouvez me donner le resume de fourberie de scapin merci d avance Le 23 novembre, 13h29 via Fiches sur les personnages ...

lali griffonne : Bibi est ce que c est l histoire du fourberie de scapin? Le 23 novembre, 13h28 via Fiches sur les personnages ...

bibi dit : Yo bb Le 23 novembre, 11h40 via Fiches sur les personnages ...

Bnmaster proclame : @eddiegreatbanks Nope, désolé.N'hésite pas à me l'envoyer un si tu en écris un. Le 22 novembre, 9h50 via Accueil

Zefir scribouille : Coucou Celia Faure, je viens de terminer le tom 7 de Autre monde de Maxime Chattam. J'ai énormément apprécié ce livre et je te le conseille vivement, même si je ne connais pas tes goûts. Si tu veux d'autres conseils plus en détail, on peux me contacter par skype: zefir-0011, mail: Adresse emailm.
Très bonne journée à tous !
Le 20 novembre, 16h28

bakalaye écrit : Oee les gens Le 17 novembre, 22h01 via Résumé : Le Tartuffe de Mol...

cheick écrit : Tout seul Le 17 novembre, 20h25 via Résumé : La Promesse de l'a...

cheick murmure : Personne Le 17 novembre, 20h25 via Résumé : La Promesse de l'a...

cheick écrit : Vous Etes d acore Le 17 novembre, 20h25 via Résumé : La Promesse de l'a...

cheick proclame : Aillllll Le 17 novembre, 20h24 via Résumé : La Promesse de l'a...

cheick proclame : Pogba ballon d or Le 17 novembre, 20h23 via Résumé : La Promesse de l'a...

cheick s'exclame : Je rigole Le 17 novembre, 20h23 via Résumé : La Promesse de l'a...

cheick dit : Aller voire Le 17 novembre, 20h22 via Résumé : La Promesse de l'a...

cheick chuchote : Hhh Le 17 novembre, 20h21 via Résumé : La Promesse de l'a...

Niainez gribouille : Weshhhh Le 17 novembre, 19h17 via Résumé : La Promesse de l'a...

sophie écrit : C'est trop facile Le 17 novembre, 14h12 via Texte intégral - Le Médecin...

k proclame : K Le 13 novembre, 19h33 via Romain Gary : La Promesse d...

@eddiegreatbanks dit : Est ce que vous avez un resume de nantas de zola? Le 09 novembre, 17h21 via Recherche

Bnmaster scribouille : @celia faure Il va falloir nous dire ce que tu préfères comme style pour qu'on puisse te conseiller : fiction, fantasy, historique, ... ? Le 09 novembre, 8h54 via Centrale PC 1997 - Exercice...

tgttttg écrit : Vt Le 09 novembre, 0h17 via Accueil

tgttttg dit : Vfev Le 09 novembre, 0h17 via Accueil

lola dit : Bruuuuuuuuuh Le 08 novembre, 17h41 via Fiches sur les personnages ...

kk scribouille : Salam Le 08 novembre, 15h22 via Les avantages et les risque...

quentin déclame : Littérature : Résumé : La Promesse de l'aube Le 07 novembre, 21h36 via Résumé : La Promesse de l'a...

-yu scribouille : -èuè Le 07 novembre, 14h31 via Résumé - Le Médecin Malgrè ...

$ chuchote : 7 Le 07 novembre, 7h45 via Le raisonnement par l'absur...

Bnmaster scribouille : Ok Le 06 novembre, 21h20 via Résumé du livre : Le Cid de...

celia faure dit : Personne ne repond sa devient un peu beaucoup soulant Le 06 novembre, 9h34

celia faure griffonne : Salut auriez vous un livre bien a me conseiller pour lire ?
Merci d'avance !
PS : j'adore lire, voilà pourquoi je vous pose cette question
et aussi je n'ai plus aucun livre que je n'ai pas lu chez moi du coup voili voilou
et encore une fois merci d'avance d'avoir lu mon message
bisous a tous XXX
Le 06 novembre, 9h31

Fgcgbcgnbfg s'exclame : Salut Le 05 novembre, 18h48 via Résumé du livre : Le Cid de...

Le BG du 93 déclame : Salam les kheys, merci de le partage de le livre. nique ta mere la pute le prof qui nous dit de lire moliere sa mere. Ciao bye cimer Le 05 novembre, 14h01 via Biographie de Molière

Belle-Amie :') écrit : Coucou Le 03 novembre, 20h34 via Fiches sur les personnages ...

cecile.27* gribouille : Ftcdxdkrysryesryhsi(èrf-ylgtuèytçomdfvypccaaa Le 03 novembre, 19h09 via Français

cecile.27* écrit : Vous éte tous nul Le 03 novembre, 19h08 via Français

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