Por que não consigo fazer flip-flops em simuladores lógicos?
Tenho brincado com alguns simuladores de lógica e não entendo por que os flip-flops não estão funcionando. Estou tentando implementar um flip-flop T com portas NAND:
Todos os simuladores que experimentei deram o mesmo resultado. Tanto Q quanto Q 'tomam o estado do relógio em vez de alternar na borda ascendente, dependendo do tempo das atualizações internas. Dada a simetria do circuito, não estou tão surpreso, mas me pergunto como ele deve funcionar na prática.
Isso é mesmo possível ou esses imuladores fornecem componentes flip-flop porque não é possível fazer com as peças básicas? Em caso afirmativo, por que e o que está faltando?
Simuladores:
- https://logic.ly/demo
- https://circuitverse.org/simulator
- https://academo.org/demos/logic-gate-simulator/
- https://simulator.io/board
Circuito de porta NAND em comparação com um flip-flop T fornecido (circuitverse.org):
O mesmo em simulator.io (usando AND + NOT, pois não há NAND):
Respostas
Porque a partir desta página , o estilo que você mostra só funciona se a largura do pulso do clock for ajustada para ser longa o suficiente para o estágio de saída reagir, mas curto o suficiente para a coisa não oscilar. Um simulador lógico que não modela o tempo de propagação pode não ser capaz de lidar com isso.
Para simular seu circuito, você precisaria de um simulador de circuito que 'entenda' o atraso de propagação, ou você precisaria simular seu circuito no nível do transistor.
Essa mesma página mostra este circuito para um J-Kflip-flop totalmente síncrono (basta conectar J & K juntos para um T ff):
Você pode querer tentar isso em seu simulador, ver o que acontece.
O circuito que você mostra é uma trava JK fechada, não um flip-flop. Ele sofre de uma falha: com T alto e clock alto, as portas NAND de acoplamento cruzado formam um oscilador em anel. Isso às vezes é chamado de problema de 'corrida'. A saída nunca se estabiliza até que o clock seja trazido para baixo.
Este circuito é ilustrativo de como não fazer um flop com clock. Caso contrário, é inútil. Um flop de alternância real usará um par de travas em dois estágios, cronometrados em níveis opostos. Isso às vezes é chamado de flip-flop 'acionado por borda' ou 'mestre-escravo'.
Mais aqui: Como o Q e o Q 'são determinados pela primeira vez no flip-flop JK?
E aqui: JK latch, possível erro de Ben Eater?
Para implementar um flip-flop T disparado por borda que não dependa do tempo de retardo de porta, acredito que seja necessário um mínimo de 6 portas Nand. O circuito abaixo simula bem no CircuitLab.
simular este circuito - Esquemático criado usando o CircuitLab
Editar:
Alguém comentou que este circuito não é um flip-flop T porque o circuito depende apenas do relógio e não tem entradas T e de relógio separadas.
No entanto, quando procuro "T flip-flop" no Google, o primeiro hit que surge para mim é o seguinte :
O flip-flop T ou "toggle" muda sua saída em cada transição do clock, dando uma saída que é a metade da frequência do sinal para a entrada T.
É útil para construir contadores binários, divisores de frequência e dispositivos de adição binários gerais. Ele pode ser feito a partir de um flip-flop JK ligando ambas as entradas ao alto.
e que contém o gráfico:
Não afirmo que esta seja necessariamente uma refutação autorizada da afirmação de que um flip-flop T deve ter entradas T e de clock separadas. (Certamente há muita desinformação sobre flip-flops nas interwebs. Por exemplo, o circuito OPs aparece em todo lugar rotulado como um flip-flop T, apesar de ter problemas descritos em outras respostas.) , Estou oferecendo as informações acima como um ponto de vista alternativo ao do comentador.
Edit2: Um comentarista pediu um diagrama de estado para o circuito. Vou fornecer essas informações, mas não como um diagrama.
Existem 4 estados estáveis e 12 estados que são transitórios entre estados estáveis em operação normal.
Os estados estáveis são:
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
As transições são as seguintes
S1 In \$\uparrow\$N1 \$\downarrow\$N6 \$\uparrow\$N5 \$\downarrow\$ S2
S2 In \$\downarrow\$N1 \$\uparrow\$N4 \$\downarrow\$N3 \$\uparrow\$ S3
S3 In \$\uparrow\$N2 \$\downarrow\$N5 \$\uparrow\$N6 \$\downarrow\$N4 \$\uparrow\$ S4
S4 In \$\downarrow\$N2 \$\uparrow\$N3 \$\downarrow\$ S1
Outro problema que você pode (mas deve ) se deparar é este : Como o Q e o Q 'são determinados pela primeira vez no flip-flop JK? .
Isso é especialmente verdadeiro para um T Flip-Flop.
Para um flip-flop T com apenas 2 entradas, T e Clock, não há como a saída entrar em um estado conhecido em uma simulação que suporta 'X'.
Um bom simulador mostrará um 'X' em ambas as saídas, o que mostra que o valor é desconhecido.
Como mencionei em minha resposta , pode-se usar entradas síncronas ou assíncronas para definir a saída para um estado conhecido.
Para referência, eu construí um T Flip-Flop com entradas assíncronas usando um Master Slave JK Flip-Flop, que você pode simular em seu navegador: