¿Por qué no puedo hacer chanclas en simuladores lógicos?
He estado jugando con algunos simuladores lógicos y no entiendo por qué los flip-flops no funcionan. Estoy tratando de implementar un flip-flop T con puertas NAND:
![](https://post.nghiatu.com/assets/images/s/T0cRcm.png)
Todos los simuladores que he probado dan el mismo resultado. Cualquiera de Q o Q 'toma el estado del reloj en lugar de alternar en el flanco ascendente, dependiendo de la sincronización de las actualizaciones internas. Dada la simetría del circuito, no estoy tan sorprendido, pero me pregunto cómo se supone que funcione en la práctica.
¿Es esto posible, o estos imuladores proporcionan componentes flip-flop porque no es posible hacerlo con piezas básicas? Si es así, ¿por qué y qué falta?
Simuladores:
- https://logic.ly/demo
- https://circuitverse.org/simulator
- https://academo.org/demos/logic-gate-simulator/
- https://simulator.io/board
Circuito de puerta NAND en comparación con un flip-flop T proporcionado (circuitverse.org):
![](https://post.nghiatu.com/assets/images/s/pCY7qm.png)
Lo mismo en simulator.io (usando AND + NOT ya que no hay NAND):
![](https://post.nghiatu.com/assets/images/s/imvMgm.png)
Respuestas
Porque desde esta página , el estilo que muestra solo funciona si el ancho del pulso del reloj se sintoniza para que sea lo suficientemente largo para que reaccione la etapa de salida, pero lo suficientemente corto para que la cosa no oscile. Es posible que un simulador lógico que no modele el tiempo de propagación no pueda hacer frente.
Para simular su circuito, necesitaría un simulador de circuito que 'comprenda' el retardo de propagación, o necesitaría simular su circuito a nivel de transistor.
Esa misma página muestra este circuito para un J-Kflip-flop completamente sincrónico (solo conecta J y K juntos para un T ff):
![](https://post.nghiatu.com/assets/images/s/TCDq1.png)
Es posible que desee probar eso en su simulador, vea qué sucede.
El circuito que muestra es un pestillo JK con puerta, no un flip-flop. Sufre de un defecto: con T alto y reloj alto, las puertas NAND de acoplamiento cruzado forman un oscilador de anillo. A esto a veces se le llama el problema de la "carrera alrededor". La salida nunca se estabiliza hasta que el reloj vuelve a bajar.
Este circuito ilustra cómo no hacer un flop cronometrado. De lo contrario, es inútil. Un flop de palanca real utilizará un par de pestillos en dos etapas, sincronizados en niveles opuestos. Esto a veces se denomina flip-flop 'activado por borde' o 'maestro-esclavo'.
Más aquí: ¿Cómo se determina la Q y la Q 'la primera vez en el flip flop JK?
Y aquí: pestillo JK, ¿posible error de Ben Eater?
Para implementar un T Flip-Flop activado por borde que no se base en el tiempo de retardo de la puerta, creo que requiere un mínimo de 6 puertas Nand. El circuito a continuación simula bien en CircuitLab.
![](https://post.nghiatu.com/assets/images/s/lzgQy.png)
simular este circuito : esquema creado con CircuitLab
Editar:
Alguien ha comentado que este circuito no es un flip-flop T porque el circuito depende solo del reloj y no tiene entradas T y de reloj separadas.
Sin embargo, cuando busco en Google "T flip-flop", el primer resultado que se me ocurre es este que dice:
El flip-flop T o "toggle" cambia su salida en cada borde del reloj, dando una salida que es la mitad de la frecuencia de la señal a la entrada T.
Es útil para construir contadores binarios, divisores de frecuencia y dispositivos generales de suma binaria. Se puede hacer a partir de un flip-flop JK atando ambas entradas en alto.
y que contiene el gráfico:
![](https://post.nghiatu.com/assets/images/s/onfma.png)
No afirmo que esto sea necesariamente una refutación autorizada de la afirmación de que un flip-flop T debe tener entradas T y de reloj separadas. (Ciertamente, hay mucha información errónea sobre los flip-flops en las interwebs. Por ejemplo, el circuito OP, aparece en todas partes etiquetado como un flip-flop T a pesar del hecho de que tiene problemas descritos en otras respuestas). , Estoy ofreciendo la información anterior como un punto de vista alternativo al del comentarista.
Edición 2: un comentarista ha solicitado un diagrama de estado para el circuito. Proporcionaré esta información, pero no como un diagrama.
Hay 4 estados estables y 12 estados que son de transición entre estados estables en funcionamiento normal.
Los estados estables son:
Estado: Vin N1 N2 N3 N4 N5 N6
S1: 0 1 1 0 1 1 0
S2: 1 0 1 0 1 0 1
S3: 0 1 1 1 0 0 1
S4: 1 1 0 1 1 1 0
Las transiciones son las siguientes
S1 en \$\uparrow\$N1 \$\downarrow\$N6 \$\uparrow\$N5 \$\downarrow\$ S2
S2 en \$\downarrow\$N1 \$\uparrow\$N4 \$\downarrow\$N3 \$\uparrow\$ S3
S3 en \$\uparrow\$N2 \$\downarrow\$N5 \$\uparrow\$N6 \$\downarrow\$N4 \$\uparrow\$ S4
S4 en \$\downarrow\$N2 \$\uparrow\$N3 \$\downarrow\$ S1
Otro problema con el que podrías (pero deberías ) encontrarte es este : ¿Cómo se determinan Q y Q 'la primera vez en el flip flop JK? .
Esto es especialmente cierto para un T Flip-Flop.
Para un T Flip-Flop con solo 2 entradas, T y Reloj, no hay forma de que la salida entre en un estado conocido en una simulación que admita 'X'.
Un buen simulador mostrará una 'X' en ambas salidas, lo que muestra que el valor es desconocido.
Como mencioné en mi respuesta , se pueden usar entradas sincrónicas o asincrónicas para configurar la salida en un estado conocido.
Como referencia, he construido un T Flip-Flop con entradas asíncronas usando un Master Slave JK Flip-Flop, que puede simular en su navegador:
![](https://post.nghiatu.com/assets/images/s/MCHJt.png)