¿Significado de unidad fuerte y débil en VHDL?

2

¿Cuál es el significado y el efecto de la unidad "fuerte" y "débil" mostrada por (0,1) y (L, H) en el paquete ieee.std_logic_1164 de VHDL?

    
pregunta manav.tix

3 respuestas

5

El paquete ieee.std_logic_1164 permite dos fortalezas de unidad.

(0,1) es la fuerza de accionamiento normal y se utiliza para todos los fines normales. (L, H) son controladores débiles, normalmente se usan para modelar resistencias de pull-up y pull-down.

Formalmente, ieee.std_logic_1164 distingue entre los tipos std_ulogic y std_logic , aunque comparten el mismo conjunto de valores (U, L, H, 0,1, X, Z, etc.).

La diferencia entre ellos es la siguiente: std_ulogic es un tipo sin resolver. Es un error que una señal std_ulogic sea impulsada por dos fuentes de señal (como un cortocircuito de 2 cables juntos, generalmente es un error); el compilador detectará dichos errores y los arreglará incluso antes de que llegue a la simulación.

Por otro lado, std_logic es un tipo resuelto. Es legal tener dos o más conductores en una señal. El resultado está determinado por una "función de resolución" que analiza todos los valores de conducción y los combina en el valor que verá en la señal. Por ejemplo, 0 y '1' se combinan para producir X (el estado Desconocido), y X y cualquier otra cosa produce X para que, una vez que ocurran los Desconocidos, se propaguen a través del diseño para mostrar que hay un problema.

Pero '0' y 'H' se combinan para producir '0' (porque H es débil) y, de manera similar, '1' y 'L' se combinan para producir '1'. Por lo tanto, un conductor fuerte puede vencer legalmente a uno débil: no se hace daño.

Veamos el estado 'Z': significa no impulsado, o alta impedancia (High-Z). Ahora Z y H se combinan para producir H porque H , aunque débil, es aún más fuerte que ningún controlador.

Este es solo un breve resumen: para todos los detalles, consulte un buen libro de VHDL o incluso el código fuente del paquete ieee.std_logic_1164.

Por lo tanto, un uso de un H débil es en la denominada configuración "cableada o", como se usa en los buses I2C.

SDA <= 'H';   -- permanent pullup resistor
SDA <= '0' when I2C_Master_SDA = '0' else 'Z';
SDA <= '0' when I2C_Slave1_SDA = '0' else 'Z';
SDA <= '0' when I2C_Slave2_SDA = '0' else 'Z';

Estamos combinando de forma segura 4 controladores en la misma señal: un maestro I2C, dos esclavos y un pullup débil permanente.

    
respondido por el Brian Drummond
1

Este es uno de esos casos donde IEEE Std 1076-2008 da una respuesta concisa.

16.8.2.2 Los valores STD_LOGIC_1164

  

Los valores lógicos '1', 'H', '0' y 'L' del tipo STD_ULOGIC se interpretan como representando uno de dos niveles lógicos, donde cada nivel lógico representa uno de los dos rangos de voltaje distintos en el circuito para ser sintetizado

     

La función de resolución RESUELVE trata los valores '0' y '1' como valores forzados que anulan los valores débiles 'L' y 'H' cuando varias fuentes controlan la misma señal.

     

Los valores 'U', 'X', 'W' y '-' son valores metalógicos; definen el comportamiento del propio modelo en lugar del comportamiento del hardware que se sintetiza. El valor 'U' representa el valor de un objeto antes de que se le asigne explícitamente un valor durante la simulación; los valores 'X' y 'W' representan valores forzados y débiles, respectivamente, para los cuales el modelo no puede distinguir entre niveles lógicos.

     

El valor '-' también se denomina valor no importado. Este estándar lo trata de la misma manera que los otros valores metalógicos, excepto cuando se proporciona como un parámetro real a las funciones STD_MATCH en el paquete IEEE.NUMERIC_STD o como un operando a un operador relacional coincidente predefinido (ver 9.2.3). Las funciones STD_MATCH y los operadores relacionales predefinidos de coincidencia usan '-' para implementar una coincidencia de "coincidencia de todos" o "comodín".

     

El valor 'Z' se llama valor de alta impedancia y representa la condición de una fuente de señal cuando esa fuente no contribuye de manera efectiva al valor resuelto de la señal.

Desde 4.6 Funciones de resolución:

  

Una función de resolución es una función que define cómo los valores de múltiples fuentes de una señal dada se deben resolver en un solo valor para esa señal. ...

Puede leer cómo la síntesis trata los valores std_ulogic en 16.8.2.4 Interpretación de valores lógicos.

16.8.2.4.2 Interpretación de los valores forzosos y débiles ('0', '1', 'L', 'H', FALSO, VERDADERO)

  

Una herramienta de síntesis interpretará los siguientes valores como que representan un valor lógico 0:

     
    
  • El valor BIT '0'
  •     
  • El valor BOOLEAN FALSO
  •     
  • Los valores STD_ULOGIC '0' y 'L'
  •     
     

Interpretará los siguientes valores como que representan un valor lógico 1:

     
    
  • El valor BIT '1'
  •     
  • El valor BOOLEAN TRUE
  •     
  • El valor STD_ULOGIC '1' y 'H'
  •     

Y esto debería decirnos que no hay salidas cortas juntas. También hay provisión para 'Z' inferir buffers tristate.

    
respondido por el user8352
0

No sé qué es ese estándar, al que hace referencia, pero 'fuerte' y 'débil' se refieren a cuánta corriente puede proporcionar una salida de compuerta lógica para mantener el nivel de voltaje adecuado correspondiente a lo que debe ser el nivel lógico be.

Por ejemplo, si se supone que una salida lógica 1 (H) es de 5 V, ese voltaje disminuirá si le conecta una carga pesada, quizás al punto en el que ya no se considerará un nivel lógico válido.

    
respondido por el RMW

Lea otras preguntas en las etiquetas