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

?

Nimabbbhhhhhh proclame : Pamale Hier, 11h10 via Résumé - Le Médecin Malgrè ...

Calvin gribouille : Free casino games and poker
casino games list
casino games real money
casino g
Hier, 2h00 via Accueil

Rachele dit : Online casino slots
casino online usa
casino online gambling
casino games
Le 20 avril, 19h50 via Accueil

booba déclame : 7 Le 20 avril, 19h12 via Résumé : La Guerre de Troie...

Javier écrit : Casino games roulette
new usa online casinos
casino g
casino online
Le 20 avril, 13h47 via Accueil

Lorna griffonne : Online casino slots
top rated free online casino games
best online casino games free
best online casino games free
Le 20 avril, 13h37 via Accueil

lolilol écrit : Ca fait 7 Le 19 avril, 11h07 via Résumé du livre : Le Cid de...

sltje suis scribouille : Slt je suis nouvelle sur ce sit esque vous pouver medir si se cite eet bien Le 16 avril, 10h01 via Résumé - Le Médecin Malgrè ...

Latzo 109 écrit : Slt comme rooro l a dit c est pas le bn site mais moi aussi je joue a Fortnite mn compte c est PlayerSarro.
BYE
Le 15 avril, 22h23 via Résumé du livre : Le Cid de...

Jasmin griffonne : She said she probably dealt with the stress with a "bad attitude" in the office,
before she quit in August 2014 because she "couldn't go on it anymore. Wells fargo login online wells fargo banking login wells fargo identity theft login Dealers using REV Financial Services may also have access to Wells Fargo CDF's digital tool customer online management system (COMS). Nevertheless, buoyed by higher probability of your deal, the analyst raised his valuation range to $18. Sign in wells fargo wells fargo login wells fargo auto login Could stricter sanctions follow, maybe even a criminal investigation.
Le 14 avril, 21h33

587564 griffonne : 3+4=7 Le 14 avril, 18h51

92000 scribouille : Trop facile Le 12 avril, 10h36 via Résumé - Le Médecin Malgrè ...

Okee25 bafouille : La réponse est 7 car 1+1+1(3)+1+1+1+1(4)=7.
C'est une logique mathématiques qui revient le plus souvent au classe de CP et GS.
Le 08 avril, 13h08 via Résumé scène par scène - Le...

milena bafouille : ùùmm Le 02 avril, 16h13 via Résumé - Les Fourberies De ...

sdefef" griffonne : Savazf Le 30 mars, 22h58 via Texte intégral - Le Médecin...

linabourhrou écrit : Bonjour Le 30 mars, 13h14 via Résumé - Les Fourberies De ...

Sora dit : Merci j'ai aussi un control tout à l'heure Le 26 mars, 8h09 via Résumé - Les Fourberies De ...

yoan déclare : Lol Le 25 mars, 21h01 via Résumé - Les Fourberies De ...

IKG murmure : GO Le 24 mars, 18h57 via Résumé : L'Avare

Canada griffonne : Qui aime la POUTINE Le 23 mars, 18h45 via Résumé scène par scène - Le...

Vladimir Poutine dit : Essaye Le 23 mars, 18h44 via Résumé scène par scène - Le...

Kim Jong Hun scribouille : Attention je vais envoyer un missile thermo-nucléaire Le 23 mars, 18h44 via Résumé scène par scène - Le...

Mac Gyver scribouille : Bon écoutez faut s'barrer d'ici donnez moi un trombone Le 23 mars, 18h41 via Résumé scène par scène - Le...

Don Diegue proclame : Je suis déshonoré Le 23 mars, 18h39 via Résumé scène par scène - Le...

Anonymous2.0 écrit : Wsh y a u bot Le 23 mars, 18h39 via Résumé scène par scène - Le...

bOTbUG dit : COPY/SITE/ROOM Le 23 mars, 18h38 via Résumé scène par scène - Le...

Yoo0Thy dit : Grace a se cite j ai remonter ma moyenne de 2 ptns franchement merci au createur de se cite merci beaucoup Le 18 mars, 14h32 via Résumé - Les Fourberies De ...

Bnmaster murmure : @Anonymous C'est un moyen simple de se prémunir contre les bots postant (au mieux) de la publicité. Le 16 mars, 12h56 via Résumé : Andromaque

Anonymous 2.0 chuchote : 3+4 est = à 7? Je ne comprend pas pourquoi ils ont mit ça.. Le 15 mars, 16h14 via Résumé - Le Médecin Malgrè ...

* dit : Que font les personnage les personnage dans cette scene 1 Le 13 mars, 17h58 via Résumé - Le Médecin Malgrè ...

* déclare : Rien Le 13 mars, 17h56 via Résumé - Le Médecin Malgrè ...

* griffonne : Je fait 555555 Le 13 mars, 17h55 via Résumé - Le Médecin Malgrè ...

marius déclame : Slt qui joue a last day on earth ? Le 12 mars, 19h57 via Résumé - La Chèvre De M. Se...

marius déclare : C trop bête Le 12 mars, 19h53 via Résumé - La Chèvre De M. Se...

marius s'exclame : Fastoche Le 12 mars, 19h44 via Résumé - La Chèvre De M. Se...

555555 gribouille : 3+4=7
sa va ?
Le 09 mars, 9h30 via Résumé - Les Fourberies De ...

louis s'exclame : Sklt Le 08 mars, 18h38 via Résumé scène par scène - Le...

louis klepak proclame : Salut les gars Le 08 mars, 18h38 via Résumé scène par scène - Le...

lol déclame : 3+4=7 Le 08 mars, 12h07 via Résumé - Les Fourberies De ...

rooro726bf s'exclame : Ca m'a aidé pour ma disertation Le 08 mars, 10h49 via Résumé du livre : Le Cid de...

rooro726bf déclare : Mais sinon très bien le résumé Le 08 mars, 10h49 via Résumé du livre : Le Cid de...

rooro726bf proclame : Ouais je sais que c'est pas le bon site mais si vous voulez jouer avec moi sur fortnite sur xbox one s mon pseudo c'est DemonZero61721 Le 08 mars, 10h44 via Résumé du livre : Le Cid de...

rooro726bf s'exclame : 7 Le 08 mars, 10h43 via Résumé du livre : Le Cid de...

rooro726bf griffonne : 7 Le 08 mars, 10h43 via Résumé du livre : Le Cid de...

nbh scribouille : 7 Le 07 mars, 19h53 via Résumé scène par scène - Le...

5OP s'exclame : 9RT788TY67 Le 07 mars, 17h20 via Résumé - La Chèvre De M. Se...

Mi écrit : Les gars vous me sauvez merci? Le 05 mars, 23h38 via Résumé scène par scène - Le...

Amisko chuchote : Ohh !!! Grace a vous uje sort de la gualere parceque je 'ai pas lu mon livre que je devait lire pour les petit vacance mtn !!OMG ce site est vraiment incroyab els!!! Le 04 mars, 19h20 via Résumé : L'Avare

Amisko écrit : Jadore !!! Oh.. Un père noel !!! Le 04 mars, 19h19 via Résumé : L'Avare

lili scribouille : J'aime beaucoup cette pièce, et elle est encore mieux quand on la joue tout les jours! Le 03 mars, 10h20 via Résumé - Le Médecin Malgrè ...

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