Quand utiliser STD_LOGIC sur BIT dans VHDL

9

Quelle est la différence entre l'utilisation:

ENTITY MyDemo is 
    PORT(X: IN STD_LOGIC; F: OUT STD_LOGIC );
END MyDemo; 

et

ENTITY MyDemo is 
    PORT(X: IN BIT; F: OUT BIT );
END MyDemo; 

Quelles sont les limites de l'utilisation de BIT sur STD_LOGIC et vice-versa? Sont-ils totalement interchangeables? Je comprends que si j'ai défini STD_LOGIC, je ne peux pas l'utiliser avec un BIT_Vector pour accéder aux éléments du tableau. Mais je n'arrive pas à voir la différence.

doyen
la source
stackoverflow.com/questions/12504884/std-logic-in-vhdl
Ciro Santilli 法轮功 病毒 审查 六四 事件 法轮功

Réponses:

9

Bitest un type prédéfini et ne peut avoir que la valeur 0ou 1. Le Bittype est une valeur idéalisée.

type Bit is ('0', '1');

std_logicfait partie du std_logic_1164package et fournit une modélisation plus réaliste des signaux dans un système numérique. Il est capable d'avoir neuf valeurs différentes. En règle générale au sein de votre code que vous utiliserez uniquement 0, 1et Z(High-Z). Mais U(non initialisé) et X(inconnu) sont également très utiles lors de la modélisation du système dans un banc de test.

    -------------------------------------------------------------------    
    -- logic state system  (unresolved)
    -------------------------------------------------------------------    
    TYPE std_ulogic IS ( 'U',  -- Uninitialized
                         'X',  -- Forcing  Unknown
                         '0',  -- Forcing  0
                         '1',  -- Forcing  1
                         'Z',  -- High Impedance   
                         'W',  -- Weak     Unknown
                         'L',  -- Weak     0       
                         'H',  -- Weak     1       
                         '-'   -- Don't care
                       );

--    attribute ENUM_ENCODING of std_ulogic : type is "U D 0 1 Z D 0 1 D";

    -------------------------------------------------------------------    
    -- *** industry standard logic type ***
    -------------------------------------------------------------------    
    SUBTYPE std_logic IS resolved std_ulogic;

Le std_logic_1164package fournit également des fonctions de conversion pour convertir std_logicà Bit.

embedded.kyle
la source
5

La plupart des gens utilisent std_logic. Cela permet u(non défini), x(inconnu) et z(haute impédance), ce qui n'est pas le cas. Bien que vous ne puissiez jamais tristater dans une puce et que vous n'en ayez donc pas besoin z, uest utile pour trouver les réinitialisations manquantes. xest utile pour trouver plusieurs pilotes.

Brian Carlton
la source
7
Je pense que c'est drôle que vous mentionniez l'utilité de Xtrouver plusieurs pilotes. std_logicest en effet le type standard de l'industrie pour VHDL, mais il est également l'une des fonctionnalités les plus mal utilisées de VHDL. std_logicest un signal résolu, ce qui signifie qu'une fonction est utilisée pour résoudre la valeur du signal en cas de plusieurs pilotes. Mais dans la grande majorité des cas, plusieurs pilotes sont une erreur. En utilisant un type non résolu tel que std_ulogiccelui-ci serait marqué par le compilateur comme une erreur.
trondd
@trondd: Bon point à propos std_ulogic. Mais gardez à l'esprit que de nombreux cœurs seront écrits avec std_logic, vous en verrez probablement une partie.
Brian Carlton
1
std_logicest en effet le type le plus courant; Je dis simplement que son utilisation n'est pas conforme à l'intention initiale: la modélisation de signaux multi-états. Pour les conceptions internes, nous ne considérons généralement que 1ou 0et un seul pilote. Voir electronics.stackexchange.com/questions/17524/… pour une discussion approfondie sur le sujet.
trondd
5

std_logic a une fonction de résolution

Non seulement il std_logica des états plus utiles 1et 0il a également une fonction de résolution définie.

Une fonction de résolution est un concept de langage VHDL. Il s'agit d'une fonction associée à un type et qui détermine ce qui se produit lorsque plusieurs valeurs de ce type sont appliquées à un seul signal. La syntaxe est:

SUBTYPE std_logic IS resolved std_ulogic;

std_ulogicest la version non résolue (et donc beaucoup moins utile) de std_logic.

En particulier, cela implique de belles choses comme 0et 1conduit à X:

library ieee;
use ieee.std_logic_1164.all;

entity std_logic_tb is
end std_logic_tb;

architecture behav of std_logic_tb is
    signal s0 : std_logic;
begin
    s0 <= '0';
    s0 <= '1';
    process
    begin
        wait for 1 ns;
        assert s0 = 'X';
        wait;
    end process;
end behav;

Cela a un sens intuitif, car nous comprenons Xqu'il s'agit de l'état dans lequel plusieurs valeurs incompatibles sont appliquées à un seul fil.

std_logic sait également comment résoudre toutes les autres paires de signaux d'entrée possibles selon un tableau présent sur le LRM.

bit d'autre part, n'a pas de fonction de résolution, et si nous l'avions utilisée dans l'exemple ci-dessus, cela conduirait à une erreur de simulation sur GHDL 0,34.

Les valeurs possibles de std_logicsont un bon choix car elles sont normalisées par IEEE 1164 et traitent de nombreux cas d'utilisation courants.

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
la source
0

std_logic est plus riche que bit et devrait être utilisé la plupart du temps.

Il y a aussi le type booléen qui, comme bit , a deux valeurs. C'est le type de résultat des comparaisons, le type attendu après un IF [bool] ou un WHEN [bool] , souvent utilisé pour les constantes de sélection:constant ENABLE_DEBUG_INTERFACE : boolean := true;

Un endroit où le bit peut être préféré à std_logic est pour les grands tableaux, les mémoires. Lors de l'optimisation des simulateurs, le bit occupe moins de surface dans la mémoire du simulateur que std_logic . Et il peut être important que votre conception instancie un Go de RAM.

Il peut également être plus rapide pour les très grandes conceptions, par exemple quelque chose généré automatiquement à partir de la netlist au niveau de la porte post-synthèse.

Bien sûr, cet aspect de performance ne fait pas partie du langage et dépend de l'implémentation du simulateur VHDL.

TEMLIB
la source