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

?

mortia bafouille : MRC SA MA GRAVE AIDER Hier, 17h40 via Résumé - Les Fourberies De ...

mortia murmure : XD Hier, 17h39 via Résumé - Les Fourberies De ...

bulmam s'exclame : Hi Le 19 mai, 23h34

tristan chuchote : Quelqun a vue un resumer de 20 ligne mon prof ma dit que il y en avait un special pour le bac Le 19 mai, 18h56 via Résumé du livre : Le Cid de...

Cjfjfh tergiverse : VbufysjwkwofwkcbKcjUxjux Le 18 mai, 19h08 via Résumé - Les Fourberies De ...

lililebgdu64 scribouille : Gg mec Le 16 mai, 15h09 via Résumé - Les Fourberies De ...

Galaxy104 dit : Easy Le 08 mai, 10h10 via Résumé scène par scène - Le...

fgyhgfvhy chuchote : 7 Le 07 mai, 19h20 via Résumé - Le Médecin Malgrè ...

Tom déclame : Sa va me servir pour le français merci au créateur dun site Le 05 mai, 21h02 via Résumé - Les Fourberies De ...

lucas dit : Salut a tous si tu aime fortnite aboinne toi et like Le 04 mai, 13h06 via Résumé - Les Fourberies De ...

Zofaxt bafouille : C'est vraiment top je m'en suis servi pour les resumes de francais a faire ( ce qui est tres chient) Le 04 mai, 10h21 via Résumé - Les Fourberies De ...

Toinou proclame : Merci beaucoup Le 03 mai, 16h07 via Résumé scène par scène - Le...

biscuit griffonne : C'est vraiment un site très utile mini_bn je suis satysfaite Le 03 mai, 0h38 via Résumé - Les Fourberies De ...

LOL dit : UUUUUU Le 02 mai, 15h17 via Résumé - Les Fourberies De ...

Emmanuel Macron gribouille : LILYROSE JE T'ENCULE SALE PUTE QUI PROSTOTUE Le 02 mai, 14h56 via Résumé - Les Fourberies De ...

Emmanuel Macron dit : Je trouve que c de la shit vous savez pq parce que j'encule M.Buffet Le 02 mai, 14h54 via Résumé - Les Fourberies De ...

ERTYU scribouille : ZE Le 01 mai, 19h22 via [Philosophie] Doit-on le re...

Anonymus chuchote : OK Le 28 avril, 15h44 via Liste des gaz nobles

TEUPE déclare : ONT A GANGER LA COUPE DU MONDE A NOTRE DAME DE M.PARISSO Le 25 avril, 15h43 via Résumé - Les Fourberies De ...

zebi déclare : MEET UP A PARIS LE 12/05/2019 Le 25 avril, 15h39 via Résumé - Les Fourberies De ...

Thekair bafouille : Wshhhh Le 24 avril, 22h51 via Résumé - Les Fourberies De ...

bkbzlkndl bafouille : Pd Le 24 avril, 18h23 via Résumé - Les Fourberies De ...

bonjour gribouille : Vos mères les mères Le 24 avril, 18h18 via Résumé - Les Fourberies De ...

bonjour écrit : Bonjour les coupins et les coupines j'éspère que vous allait bien Le 24 avril, 18h00 via Résumé - Les Fourberies De ...

bgvdgh déclare : Ygsdhtggghj dvv Le 24 avril, 11h29 via Résumé - Les Fourberies De ...

hyvbterdyht s'exclame : J'aime les ccarottes maùmen ghrfvrg ubydftuyr Le 24 avril, 11h29 via Résumé - Les Fourberies De ...

gg écrit : Lol c n'importe quoi ce chat
pire que celui de The kairi78
Le 23 avril, 12h18 via Résumé - Les Fourberies De ...

gg s'exclame : Teh Le 23 avril, 12h17 via Résumé - Les Fourberies De ...

gg proclame : Teh Le 23 avril, 12h17 via Résumé - Les Fourberies De ...

jaja tergiverse : Nnnnnnnnnnnn Le 19 avril, 11h38 via Résumé : La Guerre de Troie...

jaja déclare : Pigjh Le 19 avril, 11h38 via Résumé : La Guerre de Troie...

aliou super saiyan white scribouille : Hi, ls gars cmmnt aller vous? Le 18 avril, 20h49

jhbgyvfvxesryv dit : Génial !!! Le 17 avril, 15h05 via Résumé - Le Médecin Malgrè ...

fnhjyj(jy gribouille : Corniche Le 09 avril, 15h46 via Résumé scène par scène - Le...

ZEDAKA scribouille : N Le 07 avril, 13h42 via Résumé - Les Fourberies De ...

wawa bafouille : Bonjour Le 07 avril, 12h09 via Le personnage mythologique ...

mimine dit : Mdrrr Le 04 avril, 19h43 via Résumé : La Guerre de Troie...

NOOB gribouille : Bonjour je voudrai savoir le ton que doit pendre la fleche au IIIscene svp Le 02 avril, 20h04 via Texte intégral - L'Avare de...

R?elalàal déclame : Sa fait 7 Le 31 mars, 20h24 via Résumé - Les Fourberies De ...

gzhgz scribouille : Bonsoir paris Le 25 mars, 19h33 via Résumé scène par scène - Le...

kim proclame : J'ai une questions: est ce que rodrigue et chimène font passer l'honneur avant tout dans la scène 3 actes3 Le 25 mars, 14h46 via Résumé scène par scène - Le...

kim gribouille : Lol Le 25 mars, 14h44 via Résumé scène par scène - Le...

BELAMIFAN38 chuchote : Coucou les amis je suis un fan du roman Bel-ami Le 18 mars, 10h37 via Fiches sur les personnages ...

7 écrit : Tout ça est faux Le 17 mars, 15h16 via Résumé : L'Avare

mmm bafouille : Dd Le 14 mars, 19h28 via Fiches sur les personnages ...

uyftè bafouille : Bonsoir Le 12 mars, 8h21 via Fiches sur les personnages ...

Demetrius gribouille : Download fortnite crack Le 11 mars, 23h00

???????? proclame : Ce livre est bien Le 11 mars, 13h21 via Résumé - Les Fourberies De ...

???????? bafouille : Je me sair pour mon devoir de école Le 11 mars, 13h17 via Résumé - Les Fourberies De ...

lulu dit : Bonjour Le 10 mars, 21h31 via Résumé - Les Fourberies De ...

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