La Bnbox !

Créateur de sourires...

Mon compte

S'inscrire

Recherche

Vous êtes ici : Accueil » Atelier Webmaster » Liste des articles

Atelier Webmaster



Mémo de VHDL

document/atelier/circuitImprime.jpg

VHDL est un acronyme signifiant VHSIC Hardware Description Language, où VHSIC est lui-même l'acronyme de Very High Speed Integrated Circuits, et en français, on pourrait dire : Langage de modélisation de design de circuits logiques digitaux. Bref, en VHDL, on programme des circuits intégrés afin qu'ils exécutent une action. Par exemple, on peut programmer un afficheur 7 segments (le même que celui de votre montre digitale) pour qu'il affiche le chiffre 1, puis le 2, le 3, etc.

Si vous pensiez apprendre le VHDL dans ce tutoriel, je vais devoir vous décevoir. En effet, je ne maitrise pas encore assez ce langage pour me lancer dans une telle aventure. Par contre, un mémo de VHDL, un tutoriel qui rappelle toutes les bases de ce langage rapidement et de manière concise, ça c'est de mon ressort !
Je vous souhaite une bonne lecture mini_bn

Sommaire



Le langage VHDL


Remonter Navigation rapide : Sommaire

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.

Remonter Navigation rapide : Sommaire
Ce mémo de VHDL se termine ici ! Pour l'instant, je prévoie simplement d'ajouter un chapitre donnant des détails sur les outils permettant de programmer en VHDL, mais il n'y a pas de cours plus conséquent prévu à l'ordre du jour.

Si vous souhaitez aller plus loin, voici quelques liens qui pourront vous aider :

Ceci dit, comme pour tous les langages informatiques, le meilleur tutoriel du monde ne remplacera jamais l'expérience acquise au fil d'heures de codage ! Amusez-vous bien bn_big_smile


  • Auteur : Bnmaster
  • Créé le : 12/11/2008
  • Modifié le : 15/11/2008

Ailleurs sur la Bnbox

Ailleurs sur la Toile

Mini-tchat

?

bonjour déclare : /+6+62
32
32
26f5+6er5fer:melkporkepfok^r"okjfôdjêzsjzjojeoeijoieoidkejôjfrôjroiéjtoignjnjnjncnvnfjjffnfnjefijpvnpreibrbvrbvvefbvjkvfjkfevjbebvbbbbbbbbbbbbrjidscnjncjfoicjn fjkdcjfnpé"'tojkérejivbhn'fiureznijecepijfibhiij"rnieijrbbfripbfepjbpdfjibjdbjbdckdjcnlcnlknlkvf+zzdd<dzqereredsqfdlhiuphiphdsiuiufhuhoihcvdyjchxhodsuhvusdujhjrhdsiugougfgefguugfogeozgouaguhsxhdjgqgugcuoagoGUCYUYDSGXU
YYGUYSGYGDUYGzosuqgdè_é""é_çè)é"_çrhduygmlk^poe)àé)à)ào"àç)àçà"çàççà))àçàç'po^pdpokjfivco)àé)ààààààààààààààààààààààààààààààààààààààààààààààààààr!kpzek^fijvepbdjo^sponcrojeoiduicdfhusijdpixehuheodsjpioxll<kmlkxjciiufjvo olmopidiizç_dhfueàuizoqsijhvsjfihuerhîhiughpéaizomhiuiufhyg_rhifugreiàguhzuygzugzyuqssjcvoezqlkd
*+
fzkbiofhvhihdbdjvx
sd*7
+
96545
8evrse
d
*zel*fpke$^zkofelmdkfredkerpz$ofkpo^pqzofopjôjgrjôjrôg^vgirt$àtjrfj$zapoje$zjoilkozeooiejnpzv+n+
rfevlkjpjcpoijvfôjôjre^jîverofihpirfjpiefiefifvbivbhbfiecbfbibfdehbjchjdbujehcbnreijc"bfhbfîfvb"heomc+rzùlkezùknerkjkjrb"mjbfmknopjpfojnôrjfù*+++lldpckdmdc232654mkqç=&éàç_"=àç&"é_=à_)à"é_)&éè)_è)'²"èçefjkxp l; q6
744654654
321324513265432325646546132131
2132fc1f
1d21ddz321re1g3r2g1g1f3dddsf2dsv13s1b21fd121q 2121 212F232V1C
X32B<321
321
3W<1X2VWX21321XWC84W1
32<1W
3X4BZQF
GR32E1V2C132S1D21GDS1D1V
E2Z1RG
U3KU13J219P
32OL1UH3
G7FV1DCS32X1D
1B3HZ1EQSQ<B1NET?RS.12?QFSZRN1J3TQR?12ENR3H4
Le 19 octobre, 19h01 via Résumé scène par scène - Le...

bonjour s'exclame : Je bafouille 3+4=7 Le 19 octobre, 18h56 via Résumé scène par scène - Le...

bonjour murmure : Peuple je sus en Stream a partir de 18 heures fortnite epicgames !!!!!! Le 19 octobre, 18h53 via Résumé scène par scène - Le...

bonjour gribouille : Bonsoir peuple lfb top one Le 19 octobre, 18h51 via Résumé du livre : Le Cid de...

omg déclare : Ntm Le 19 octobre, 15h58 via Accueil

omg déclare : Ntm Le 19 octobre, 15h58 via Accueil

omg écrit : Ntm Le 19 octobre, 15h58 via Accueil

omg bafouille : L or Le 19 octobre, 15h58 via Accueil

omg tergiverse : L or Le 19 octobre, 15h58 via Accueil

omg déclare : Omg Le 19 octobre, 15h58 via Accueil

HéGiroudNiqueTaMere murmure : Merci sucepute Le 17 octobre, 15h59 via Résumé scène par scène - Le...

cc s'exclame : Cc Le 16 octobre, 21h31 via Mais qu'est ce qu'un ROC en...

7 murmure : Code noir nul c nul Le 15 octobre, 12h28 via Le Code Noir

tamère murmure : Le vou bèz ke le l1di Le 15 octobre, 12h26 via Le Code Noir

lol déclare : Nul Le 15 octobre, 12h26 via Le Code Noir

bg18 tergiverse : Jtm Le 15 octobre, 12h16 via Le Code Noir

bg18 dit : Jtm Le 15 octobre, 12h16 via Le Code Noir

lol dit : Non en fait Le 15 octobre, 12h16 via Le Code Noir

lol scribouille : Lol Le 15 octobre, 12h16 via Le Code Noir

caca dit : Caca Le 13 octobre, 14h11 via Les racines que personne ne...

isy déclame : Dom Juan Le 11 octobre, 15h09 via Résumé scène par scène - Le...

tamer murmure : Rerere Le 10 octobre, 20h55 via Résumé : La Promesse de l'a...

tamer proclame : Rerere Le 10 octobre, 20h55 via Résumé : La Promesse de l'a...

tamer dit : Rerere Le 10 octobre, 20h55 via Résumé : La Promesse de l'a...

tamer proclame : Rerere Le 10 octobre, 20h55 via Résumé : La Promesse de l'a...

tamer tergiverse : Rerere Le 10 octobre, 20h55 via Résumé : La Promesse de l'a...

Patsy déclare : Http://Www.Carpfishing.cz/profil/27068/ Le 07 octobre, 3h00 via Informations juridiques imp...

UoZa1F4ERm6z proclame : affordable car insurance Fair Oaks CA auto insurance Gadsden AL Le 06 octobre, 5h21

badr murmure : Il y a pas les chapitres 20, 21... Le 03 octobre, 21h01 via Résumé : La Promesse de l'a...

badr scribouille : Sa fait sept Le 03 octobre, 20h59 via Résumé : La Promesse de l'a...

Jamila gribouille : Play casino games online
casino slots
play casino games online
best online casino
casino games slots
Le 03 octobre, 11h33

biloutedu14 tergiverse : Trois + quatre égale sept Le 02 octobre, 14h21 via Unités SI, conversion des m...

G gribouille : Facile Le 27 septembre, 22h28 via Recherche

def chuchote : Fr Le 21 septembre, 19h00 via Résumé scène par scène - Le...

Triss déclame : Blip bloup Le 21 septembre, 18h50 via Sans-jambe repose

ManouDu95 proclame : WSH LES GENS,PERSO CTTE HISTOIRE C DLA MERDE SUIS EN 5ÈME ET J'ETUDIE SA VS ETES SEH LA Le 20 septembre, 19h09 via Résumé - Les Fourberies De ...

hylona bafouille : Ki a lu tartuffe Le 15 septembre, 12h15 via Résumé : Le Tartuffe de Mol...

hylona chuchote : 3+4=7 Le 15 septembre, 12h14 via Résumé : Le Tartuffe de Mol...

Bnmaster proclame : @Etudiant Merci ! Le 06 septembre, 8h48 via Résumé du livre : Le Cid de...

Etudiant murmure : Salut, je voulais vous remercier pour vos magnifiques cours, je suis en prépa MPSI et ça m'est d'une aide tellement précieuse!!! 1000 mercis !!! Le 05 septembre, 19h08 via Le raisonnement par analyse...

478 s'exclame : Glo
ver vfrehy bg
Le 02 septembre, 16h35 via Ah les p'tits potes

petitchat gribouille : Facile Le 20 juin, 13h06 via Unités SI, conversion des m...

College Charles Péguy dit : J'etudie cette piece de théatre avec mess 6eme de beauvoir Le 11 juin, 21h45 via Résumé - Les Fourberies De ...

cc déclare : Cc Le 04 juin, 17h59 via Résumé scène par scène - Le...

Marius Okoko déclame : J'aime L'histoire. Le 31 mai, 16h23 via Utiliser le module Math de ...

kk écrit : 0. Le 30 mai, 16h15 via Résumé du livre : Le Cid de...

JUIELJD E griffonne : KDOEKNCZF£2 Le 30 mai, 14h56 via Résumé scène par scène - Le...

Tamagochi chuchote : -.../---/-./.---/---/..-/.-. Le 29 mai, 14h45 via Apprendre le Morse

lea83 écrit : Jihohio bafouille t'as deux ans d'age mentale ou quoi mdrr Le 27 mai, 15h36 via Résumé du livre : Le Cid de...

lea83 déclame : Cc Le 27 mai, 15h35 via Résumé du livre : Le Cid de...

Publicité



©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