Cuándo usar STD_LOGIC sobre BIT en VHDL

9

¿Cuál es la diferencia entre usar:

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

y

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

¿Cuáles son las limitaciones de usar BIT sobre STD_LOGIC y viceversa? ¿Se pueden intercambiar completamente? Entiendo que si he definido STD_LOGIC no puedo usarlo con un BIT_Vector para acceder a los elementos de la matriz. Pero parece que no puedo ver la diferencia.

    
pregunta Dean

4 respuestas

9

Bit es un tipo predefinido y solo puede tener el valor 0 o 1 . El tipo Bit es un valor idealizado.

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

std_logic es parte del paquete std_logic_1164 y proporciona Modelado más realista de señales dentro de un sistema digital. Es capaz de tener nueve valores diferentes. Normalmente, dentro de su código solo usará 0 , 1 y Z (High-Z). Pero U (sin inicializar) y X (desconocido) también son muy útiles cuando se modela el sistema en un banco de pruebas.

    -------------------------------------------------------------------    
    -- 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;

El paquete std_logic_1164 también proporciona funciones de conversión para convertir std_logic a Bit .

    
respondido por el embedded.kyle
5

La mayoría de la gente usa std_logic . Eso permite u (no definido), x (desconocido) y z (alta impedancia), que bit no. Si bien es posible que nunca se triplique en un chip y, por lo tanto, no necesite z , u es útil para encontrar reinicios faltantes. x es útil para encontrar múltiples controladores.

    
respondido por el Brian Carlton
4

std_logic tiene una función de resolución

No solo std_logic tiene estados más útiles además de 1 y 0 , también tiene una función de resolución definida.

Una función de resolución es un concepto de lenguaje VHDL. Es una función que está asociada a un tipo y determina lo que sucede cuando se aplican varios valores de ese tipo a una sola señal. La sintaxis es:

SUBTYPE std_logic IS resolved std_ulogic;

donde std_ulogic es la versión no resuelta (y por lo tanto mucho menos útil) de std_logic .

En particular, esto implica cosas agradables como 0 y 1 lleva a 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;

Esto tiene un sentido intuitivo, ya que entendemos que X es el estado donde se aplican múltiples valores incompatibles a un solo cable.

std_logic también sabe cómo resolver cada otro par posible de señales de entrada según una tabla presente en el LRM.

bit por otro lado, no tiene una función de resolución, y si lo hubiéramos usado en el ejemplo anterior, daría lugar a un error de simulación en GHDL 0.34.

Los valores posibles de std_logic son una buena opción porque están estandarizados por IEEE 1164 y tratan con muchos casos de uso.

    
0

std_logic es más rico que bit , y básicamente debería usarse la mayor parte del tiempo.

También existe el tipo booleano , que, como bit , tiene dos valores. Es el tipo de comparación de resultados, el tipo esperado después de un IF [bool] o un WHEN [bool] , que se usa a menudo para las constantes de selección: constant ENABLE_DEBUG_INTERFACE : boolean := true;

Un lugar donde bit se puede preferir a std_logic es para arreglos grandes, memorias. Al optimizar los simuladores, el bit ocupa menos área en la memoria del simulador que std_logic . Y puede importar si su diseño crea una instancia de un GB de RAM.

También puede ser más rápido para diseños muy grandes, por ejemplo, algo que se genera automáticamente a partir de una lista de redes de nivel de puerta de síntesis posterior.

Por supuesto, este aspecto de rendimiento no es parte del lenguaje y depende de la implementación del simulador VHDL.

    
respondido por el TEMLIB

Lea otras preguntas en las etiquetas