¿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:
Bit
es un tipo predefinido y solo puede tener el valor0
o1
. ElBit
tipo es un valor idealizado.std_logic
es parte delstd_logic_1164
paquete 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
,1
yZ
(High-Z). PeroU
( Sin inicializar) yX
(Desconocido) también son muy útiles al modelar el sistema en un banco de pruebas.El
std_logic_1164
paquete también proporciona funciones de conversión para convertirstd_logic
aBit
.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
,u
es útil para encontrar restablecimientos faltantes.x
Es útil para encontrar múltiples controladores.fuente
X
encontrar múltiples controladores.std_logic
de 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_logic
es 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_ulogic
este, el compilador lo marcaría como un error.std_ulogic
. Pero tenga en cuenta que se escribirán muchos núcleos,std_logic
por lo que probablemente verá algunos de ellos.std_logic
es 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 consideramos1
o0
un solo controlador. Visite electronics.stackexchange.com/questions/17524/… para una discusión exhaustiva sobre el tema.std_logic
tiene una función de resoluciónNo sólo
std_logic
tienen estados más útiles, además1
y0
, 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_ulogic
está la versión no resuelta (y, por lo tanto, mucho menos útil) destd_logic
.En particular, esto implica cosas buenas como
0
y1
conduce aX
:Esto tiene sentido intuitivo, ya que entendemos
X
que es el estado donde se aplican múltiples valores incompatibles a un solo cable.std_logic
también sabe cómo resolver cualquier otro par posible de señales de entrada de acuerdo con una tabla presente en el LRM.bit
por 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_logic
son 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