¿Qué le pasa a mi interruptor basculante tipo D?

Hasta hace unas semanas, nunca había dibujado un diagrama de circuito en mi vida, así que tengan paciencia conmigo. Actualmente estoy tratando de diseñar (en Logisim) un circuito que actúe como un interruptor de palanca, usando solo puertas lógicas básicas y sin reloj. Básicamente, quiero que la salida LED se encienda cuando se presione el botón SINGLE y se apague cuando se vuelva a presionar, y he estado experimentando con todo tipo de combinaciones SR latch/D latch/otras sin éxito.

Estoy tratando de hacerlo ahora haciendo un flip-flop D desde cero, con el botón sirviendo como el "reloj" y la salida final Q volviendo a la entrada D en el primer pestillo, como se muestra en la imagen. :

Revisé este flip-flop con mucho cuidado y pensé que tenía el maestro y el esclavo alineados correctamente, con los inversores en los lugares correctos, etc., pero según Logisim , no es correcto y no funciona . ¿Que me estoy perdiendo aqui?

Obviamente, no hay nada malo, por lo que el problema puede ser una configuración de la herramienta o un problema de cableado sutil. Rompería los dos pestillos y los probaría por separado, si no funciona, luego los dividiría más solo en la puerta, etc. Una cosa a tener en cuenta, no necesita estrictamente el inversor en las entradas al AND gates, ya tienes disponibles las señales complementarias (Q & Q').
No veo ningún problema con tu circuito. ¿Está seguro de que su herramienta puede simular un circuito de retroalimentación de este tipo? Una vez escribí un simulador lógico simple usando la propagación primero en profundidad, que para mi sorpresa y horror NO fue capaz de simular tales circuitos.
Para hacer eco de lo que dice @WoutervanOoijen, tal vez sea algo tan simple como que no haya suministrado el riel de alimentación a los dispositivos o la tierra. Dado que las conexiones de alimentación están ocultas en el esquema, es posible que haya olvidado o asumido que se conectan automáticamente.

Respuestas (3)

Dupliqué tu circuito en Logisim (como una oportunidad para hacer algo en Logisim). No hay nada malo con tu circuito. Hay algo sobre Logisim que no entiendo.

En primer lugar, las líneas rojas no son líneas en estado alto; son errores Uno esperaría este tipo de error si dos salidas estuvieran unidas. Hice un montón de romper el circuito y atar líneas altas o bajas, y finalmente, todos los errores fueron "borrados" y volver a conectar el circuito normalmente produjo el cambio para el que fue diseñado.

Específicamente, rompa el cable superior izquierdo, el que conecta Q' con D, luego conecte D a una fuente alta o baja (la "resistencia de tracción" funciona bien aquí), y muévala hasta que esté completamente verde. Luego, vuelva a conectar la retroalimentación y todo funcionará. Tenga en cuenta que alto y bajo están representados por verde y verde oscuro (?).

Al presionar "Restablecer simulación" se recuperarán todos los errores. Supongo que, en algún lugar de la lógica del programa, tiene un "estado indefinido". Estos estados indefinidos se propagan a través de las compuertas hasta el punto de que no se "resuelven solos" como lo hace la electrónica real. Undef AND 0 debería dar como resultado 0, no Undef. Lo mismo ocurre con 1 O Undef.

En caso de que esto se haya solucionado en una versión posterior, notaré que Logisim es 2.7.1


Actualización: "arreglé" el problema (dentro del alcance de este simulador, de todos modos) insertando una puerta NOR en la ruta de retroalimentación. Luego conecte un pulsador a la otra entrada. Reemplacé el botón original con una señal de reloj (que se encuentra en "cableado"). Ahora, al presionar el botón se borra el error. (Restablecer la lógica devuelve el error).

Si hay alguna forma de especificar las condiciones iniciales para una simulación, debería poder borrar los errores sin tener que editar el circuito durante la simulación. Es natural que el simulador no sepa en qué estado se encuentra inicialmente la salida si no se lo dice; y para un alternador, no puede saber a qué estado va a continuación sin saber en qué estado estaba previamente.
Pero uno de la vida real no tiene este problema.
Porque en la vida real, habrá un voltaje real en cada nodo en un momento dado. Pero un simulador no sabe cuál es ese voltaje en t = 0 a menos que se lo diga. Un simulador solo puede simular tanto sobre el mundo real como lo defina en su modelo.
Agregar esta información a su modelo de circuito debería ser fácil. En SPICE, usaría una tarjeta ".IC". En Verilog, podría en un bloque "inicial". Sin conocer Logisim, no puedo decirte cómo hacerlo en esa herramienta, pero sospecho que hay una manera simple.

Según la respuesta de gbarry, parece que LogicSim está utilizando una evaluación lógica pesimista "no sé", lo que significa que los cables solo están bajos si el simulador puede decir que, dados los estímulos recibidos hasta la fecha, definitivamente deberían estar bajos; del mismo modo, solo son altos si el simulador puede decir que definitivamente deberían ser altos. Tal evaluación lógica pesimista a menudo excluye la simulación de dispositivos que probablemente funcionarían satisfactoriamente en el mundo real, pero tiende a garantizar que los dispositivos solo se comportarán como se desea en la simulación si de hecho funcionaran en el mundo real.

Si el circuito se implementara con lógica del mundo real, el circuito probablemente se estabilizaría de modo que el cable rojo superior fuera alto o bajo, pero su nivel real sería arbitrario. Presionar el botón debe hacer que el cable superior asuma el estado opuesto al que tenía antes de presionar, pero dado que ese estado inicial no se puede definir de manera predecible como alto o bajo, ni tampoco el estado después de presionar.

En algunos casos, puede ser más útil hacer que un simulador se encienda arbitrariamente en algún estado en particular, que hacer que simplemente indique un estado indeterminado no resuelto. Sin embargo, un gran peligro con los simuladores que lo hacen es que pueden hacer creer que un circuito funcionará en la vida real cuando en realidad no lo hará. Por el contrario, si una simulación pesimista indica que los estados indeterminados se resuelven, es casi seguro que lo harán en el mundo real; si no es así, tales estados pueden o no resolverse en el mundo real, pero uno no debe confiar en tal comportamiento a menos que haya examinado las restricciones de tiempo con mucho cuidado.

Ordeno este problema accidentalmente.

Solo tiene que reemplazar sus AndGates con IC 74LS08junto con NOT. La frecuencia del reloj es 0.5e ingresa primero j=0y k=0después de unos segundos, su Flip flop comenzará a funcionar.