En lógica digital , un peligro es un efecto indeseable causado por una deficiencia en el sistema o influencias externas tanto en circuitos sincrónicos [ cita requerida ] como asincrónicos . [1] : 43 Los peligros lógicos son manifestaciones de un problema en el que los cambios en las variables de entrada no cambian la salida correctamente debido a alguna forma de retraso causado por elementos lógicos ( puertas NOT , AND , OR , etc.). Esto da como resultado que la lógica no realice su función correctamente. Los tres tipos de peligros más comunes generalmente se denominan peligros estáticos, dinámicos y de función.
Los peligros son un problema temporal, ya que el circuito lógico acabará estableciéndose en la función deseada. Por lo tanto, en los diseños sincrónicos, es una práctica estándar registrar la salida de un circuito antes de que se utilice en un dominio de reloj diferente o se envíe fuera del sistema, de modo que los peligros no provoquen ningún problema. Sin embargo, si ese no es el caso, es imperativo eliminar los peligros, ya que pueden afectar a otros sistemas conectados.
Un peligro estático es un cambio del estado de una señal dos veces seguidas cuando se espera que la señal permanezca constante. [1] : 48 Cuando una señal de entrada cambia, la salida cambia momentáneamente antes de estabilizarse en el valor correcto. Existen dos tipos de peligros estáticos:
En una lógica AND-OR de dos niveles correctamente formada y basada en una expresión de suma de productos, no habrá peligros de 0 estático (pero puede que sí haya peligros de 1 estático). Por el contrario, no habrá peligros de 1 estático en una implementación OR-AND de una expresión de producto de sumas (pero puede que sí haya peligros de 0 estático).
El método más comúnmente utilizado para eliminar los peligros estáticos es agregar lógica redundante (términos de consenso en la expresión lógica).
Consideremos un circuito imperfecto que sufre un retraso en los elementos lógicos físicos, es decir, puertas AND, etc.
El circuito simple realiza la función notando:
De un vistazo al diagrama de partida, es claro que si no se produjeran retrasos, entonces el circuito funcionaría normalmente. Sin embargo, nunca se fabrican dos puertas exactamente iguales. Debido a esta imperfección, el retraso de la primera puerta AND será ligeramente diferente al de su contraparte. Por lo tanto, se produce un error cuando la entrada cambia e y la solución para resolver este problema sería mirar el mapa de Karnaugh . Las dos puertas se muestran con anillos sólidos y el peligro se puede ver debajo del anillo discontinuo. Un teorema demostrado por Huffman [2] nos dice que al agregar un bucle redundante 'BC' esto eliminará el peligro.
Así que nuestra función original ahora es:
Ahora podemos ver que incluso con elementos lógicos imperfectos, nuestro ejemplo no mostrará signos de peligro cuando A cambie de estado. Esta teoría se puede aplicar a cualquier sistema lógico. Los programas informáticos se ocupan de la mayor parte de este trabajo en la actualidad, pero para los ejemplos sencillos es más rápido realizar la depuración a mano. Cuando hay muchas variables de entrada (digamos 6 o más), será bastante difícil "ver" los errores en un mapa de Karnaugh.
Un peligro dinámico es una serie de cambios de estado de una señal que ocurren varias veces seguidas cuando se espera que la señal cambie de estado solo una vez. [1] : 48 Un peligro dinámico es la posibilidad de que una salida cambie más de una vez como resultado de un solo cambio de entrada.
Los peligros dinámicos suelen ocurrir en circuitos lógicos más grandes donde hay diferentes rutas hacia la salida (desde la entrada). Si cada ruta tiene un retraso diferente, entonces rápidamente se hace evidente que existe la posibilidad de que se modifiquen los valores de salida que difieren de la salida requerida/esperada.
Por ejemplo, un circuito lógico está diseñado para cambiar el estado de salida de 1 a 0 , pero en lugar de eso cambia de 1 a 0, luego a 1 y finalmente se queda en el valor correcto 0. Esto es un riesgo dinámico.
Como regla general, los peligros dinámicos son más complejos de resolver, pero tenga en cuenta que si se han eliminado todos los peligros estáticos de un circuito, entonces no pueden ocurrir peligros dinámicos.
A diferencia de los peligros estáticos y dinámicos, los peligros funcionales son aquellos provocados por un cambio aplicado a más de una entrada. No existe una solución lógica específica para eliminarlos. Un método realmente confiable es evitar que las entradas cambien simultáneamente, lo que no es aplicable en algunos casos. Por lo tanto, los circuitos deben diseñarse cuidadosamente para tener retardos iguales en cada ruta. [3]