¿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? ¿Son completamente intercambiables? 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.

Respuestas:
Bites un tipo predefinido y solo puede tener el valor0o1. ElBittipo es un valor idealizado.std_logices parte delstd_logic_1164paquete y proporciona un modelado más realista de señales dentro de un sistema digital. Es capaz de tener nueve valores diferentes. Por lo general dentro de su código sólo se va a utilizar0,1yZ(High-Z). PeroU( Sin inicializar) yX(Desconocido) también son muy útiles al modelar el sistema en un banco de pruebas.El
std_logic_1164paquete también proporciona funciones de conversión para convertirstd_logicaBit.fuente
La mayoría de la gente usa
std_logic. Eso permiteu(indefinido),x(desconocido) yz(alta impedancia), que bit no. Si bien nunca puede tristarse en un chip y, por lo tanto, no es necesarioz,ues útil para encontrar restablecimientos faltantes.xEs útil para encontrar múltiples controladores.fuente
Xencontrar múltiples controladores.std_logicde hecho es el tipo estándar de la industria para VHDL, pero también es una de las características más mal utilizadas de VHDL.std_logices una señal resuelta, lo que significa que se utiliza una función para resolver el valor de la señal en caso de múltiples controladores. Pero en la gran mayoría de los casos, múltiples controladores es un error. Al usar un tipo no resuelto comostd_ulogiceste, el compilador lo marcaría como un error.std_ulogic. Pero tenga en cuenta que se escribirán muchos núcleos,std_logicpor lo que probablemente verá algunos de ellos.std_logices de hecho el tipo más común alrededor; Solo estoy argumentando que su uso no está de acuerdo con la intención original: el modelado de señales de múltiples estados. Para diseños internos, generalmente solo consideramos1o0un solo controlador. Visite electronics.stackexchange.com/questions/17524/… para una discusión exhaustiva sobre el tema.std_logictiene una función de resoluciónNo sólo
std_logictienen estados más útiles, además1y0, 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 asociada a un tipo, y determina qué sucede cuando se aplican múltiples valores de ese tipo a una sola señal. La sintaxis es:
¿Dónde
std_ulogicestá la versión no resuelta (y, por lo tanto, mucho menos útil) destd_logic.En particular, esto implica cosas buenas como
0y1conduce aX:Esto tiene sentido intuitivo, ya que entendemos
Xque es el estado donde se aplican múltiples valores incompatibles a un solo cable.std_logictambién sabe cómo resolver cualquier otro par posible de señales de entrada de acuerdo con una tabla presente en el LRM.bitpor otro lado, no tiene una función de resolución, y si la hubiésemos usado en el ejemplo anterior, daría lugar a un error de simulación en GHDL 0.34.Los posibles valores de
std_logicson una buena opción porque están estandarizados por IEEE 1164 y tratan muchos casos de uso comunes.fuente
std_logic es más rico que bit , y básicamente debería usarse la mayor parte del tiempo.
También está el tipo booleano , que, como bit , tiene dos valores. Es el tipo de resultado de las comparaciones, el tipo esperado después de un IF [bool] o un WHEN [bool] , a menudo utilizado para las constantes de selección:
constant ENABLE_DEBUG_INTERFACE : boolean := true;Un lugar donde se puede preferir bit a std_logic es para grandes matrices, 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 generado automáticamente a partir de la lista de redes de nivel de compuerta posterior a la síntesis.
Por supuesto, este aspecto del rendimiento no forma parte del lenguaje y depende de la implementación del simulador VHDL.
fuente