Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> VHDL

Comment utiliser le type VHDL le plus courant :std_logic

Le type le plus couramment utilisé en VHDL est le std_logic . Considérez ce type comme un bit unique, l'information numérique transportée par un seul fil physique. Le std_logic nous donne un contrôle plus précis sur les ressources de notre conception que le integer type, que nous avons utilisé dans les tutoriels précédents.

Normalement, nous voulons qu'un fil dans une interface numérique ait soit la valeur '1' ou '0' . Ces deux valeurs sont les seules valeurs qu'un bit, un chiffre binaire, peut avoir. Mais en réalité, un signal numérique physique peut être dans un certain nombre d'états, dont le std_logic type fait un bon travail d'émulation. C'est donc le type le plus fréquemment utilisé en VHDL.

Cet article de blog fait partie de la série de didacticiels VHDL de base.

Le std_logic type peut prendre les valeurs suivantes :

‘1’ Logique 1
‘0’ 0 logique
‘Z’ Haute impédance
‘W’ Signal faible, impossible de dire si 0 ou 1
‘L’ Faible 0, pulldown
‘H’ Faible 1, pullup
‘-‘ M'en fiche
« O » Non initialisé
‘X’ Inconnu, plusieurs pilotes

Cela peut sembler être beaucoup d'états différents pour un type censé modéliser une seule valeur binaire. Ne vous inquiétez pas, nous n'utiliserons pas tous ces types dans cette série de tutoriels. Nous utiliserons '1' et '0' bien sûr. Et nous verrons également 'U' et 'X' , ce qui nous aidera à repérer les erreurs dans notre conception. Les autres valeurs sont des fonctionnalités VHDL avancées qui peuvent être utilisées pour des choses comme la modélisation de la communication avec par exemple I 2 périphériques C, ou pour créer des bus à trois états.

Si plusieurs processus essaient d'écrire des valeurs différentes sur un signal, on dit qu'il a plusieurs pilotes . Si un std_logic signal a plusieurs pilotes, ce ne sera pas une erreur de compilation ou d'exécution, du moins pas dans le simulateur. C'est parce que std_logic est un type résolu , ce qui signifie que sa valeur sera déterminée par une fonction de résolution.

La valeur d'un std_logic le signal avec deux pilotes sera déterminé sur la base de ce tableau de résolution :

U X 0 1 Z W L H
U X X 1 1 1 1 1 X 1
U X 0 X 0 0 0 0 X 0
U U U U U U U U U U
U X X X X X X X X X
U X 0 1 Z W L H X Z
U X 0 1 W W W W X W
U X 0 1 L W L W X L
U X 0 1 H W W H X H
U X X X X X X X X

Exercice

Dans ce didacticiel vidéo, nous allons apprendre à utiliser déclarer et afficher std_logic signaux dans une forme d'onde :

Le code final que nous avons créé dans ce tutoriel :

library ieee;
use ieee.std_logic_1164.all;

entity T10_StdLogicTb is
end entity;

architecture sim of T10_StdLogicTb is

    signal Signal1 : std_logic := '0';
    signal Signal2 : std_logic;
    signal Signal3 : std_logic;

begin

    process is
    begin

        wait for 10 ns;
        Signal1 <= not Signal1;

    end process;

    -- Driver A
    process is
    begin

        Signal2 <= 'Z';
        Signal3 <= '0';
        wait;

    end process;

    -- Driver B
    process(Signal1) is
    begin

        if Signal1 = '0' then
            Signal2 <= 'Z';
            Signal3 <= 'Z';
        else
            Signal2 <= '1';
            Signal3 <= '1';
        end if;

    end process;


end architecture;

La fenêtre de forme d'onde dans ModelSim après avoir appuyé sur run et zoomé sur la timeline :

La forme d'onde avec le curseur placé sur l'autre partie du cycle de signal répétitif :

Analyse

L'exercice a démontré comment la fonction de résolution de VHDL fonctionne avec le std_logic taper. Lorsque vous travaillez avec la logique numérique, il est souvent plus pratique d'étudier la chronologie dans une forme d'onde plutôt que d'utiliser des impressions. Par conséquent, nous avons utilisé la forme d'onde ModelSim pour vérifier les valeurs du signal dans cet exercice.

Le premier processus et Signal1 n'est utilisé que pour changer la valeur que le troisième processus pilote sur Signal2 et Signal3 .

Le deuxième processus, le pilote A, essaiera de piloter un 'Z' sur Signal2 , et un '0' sur Signal3 constamment.

Le troisième processus, Conducteur B, alternera entre la conduite '1' et 'Z' sur les deux Signal2 et Signal3 .

Nous voyons dans les captures d'écran de la forme d'onde que Signal1 change entre '0' et '1' , car il n'y a qu'un seul processus essayant de piloter ce signal. Nous pouvons également voir que les signaux de plusieurs pilotes sont résolus selon le tableau de résolution publié dans les commentaires du code VHDL :

Signal Conducteur A Conducteur B Résultat
Signal2 'Z' 'Z' 'Z'
Signal2 'Z' ‘1’ ‘1’
Signal3 ‘0’ 'Z' ‘0’
Signal3 ‘0’ ‘1’ 'X'

À emporter

Aller au tutoriel suivant »


VHDL

  1. Les goulots d'étranglement du flux de travail d'impression 3D les plus courants – et comment les résoudre
  2. Les problèmes de système de refroidissement de voiture les plus courants
  3. Comment tirer le meilleur parti de vos données
  4. Comment créer une liste chaînée en VHDL
  5. Comment utiliser une procédure dans un processus en VHDL
  6. Comment utiliser une fonction en VHDL
  7. Comment utiliser en toute sécurité un treuil à moteur sur le lieu de travail
  8. Les causes les plus courantes d'accidents de grue (et comment les éviter)
  9. Les applications les plus courantes de a286