Почему я не могу делать шлепанцы в логических симуляторах?
Я играл с несколькими логическими симуляторами и не понимаю, почему триггеры не работают. Я пытаюсь реализовать T-триггер с воротами NAND:

Все тренажеры, которые я пробовал, дают одинаковый результат. Либо Q, либо Q 'принимают состояние часов, а не переключаются по нарастающему фронту, в зависимости от времени внутренних обновлений. Учитывая симметрию схемы, я не очень удивлен, но задаюсь вопросом, как это работает на практике.
Возможно ли это вообще, или эти имитаторы предоставляют триггерные компоненты, потому что это невозможно сделать с базовыми деталями? Если да, то почему и чего не хватает?
Симуляторы:
- https://logic.ly/demo
- https://circuitverse.org/simulator
- https://academo.org/demos/logic-gate-simulator/
- https://simulator.io/board
Схема затвора NAND по сравнению с предоставленным T-триггером (circuitverse.org):

То же самое в simulator.io (с использованием AND + NOT, поскольку NAND нет):

Ответы
Потому что на этой странице стиль, который вы показываете, работает только в том случае, если ширина тактового импульса настроена так, чтобы быть достаточно длинной для реакции выходного каскада, но достаточно короткой, чтобы предмет не колебался. Логический симулятор, который не моделирует время распространения, может не справиться.
Чтобы смоделировать вашу схему, вам понадобится симулятор схемы, который «понимает» задержку распространения, или вам нужно будет смоделировать вашу схему на уровне транзистора.
На той же странице показана эта схема для полностью синхронного J-Kflip-flop (просто соедините J и K вместе для T ff):

Вы можете попробовать это в своем симуляторе и посмотреть, что произойдет.
Схема, которую вы показываете, представляет собой защелку JK с воротами, а не триггер. У него есть недостаток: с высоким T и высоким тактовым сигналом перекрестно связанные логические элементы NAND образуют кольцевой генератор. Иногда это называют проблемой «гонок». Выход никогда не устанавливается, пока часы не вернутся на низкий уровень.
Эта схема иллюстрирует, как не сделать тактовый флоп. Иначе бесполезно. Настоящий тумблер-флоп будет использовать пару защелок в два этапа, синхронизированных на противоположных уровнях. Это иногда называют триггером с запуском по фронту или триггером «ведущий-ведомый».
Подробнее здесь: Как определяются Q и Q 'в первый раз в JK-триггере?
И вот: защелка JK, возможная ошибка Ben Eater?
Я полагаю, что для реализации T-триггера, запускаемого по фронту, который не зависит от времени задержки гейта, требуется как минимум 6 вентилей Nand. Схема ниже отлично моделируется в CircuitLab.

смоделировать эту схему - Схема, созданная с помощью CircuitLab
Редактировать:
Кто-то заметил, что эта схема не является T-триггером, потому что схема зависит только от часов и не имеет отдельных входов T и синхронизации.
Однако, когда я гуглил "T flip-flop", первое, что мне приходило в голову, это то, что гласило:
Триггер T или «toggle» изменяет свой выходной сигнал на каждом фронте тактового сигнала, давая выходной сигнал, который составляет половину частоты сигнала на входе T.
Это полезно для создания двоичных счетчиков, делителей частоты и общих устройств двоичного сложения. Его можно сделать из триггера JK, связав оба его входа высоким.
и который содержит графику:

Я не утверждаю, что это обязательно авторитетное опровержение утверждения о том, что T-триггер должен иметь отдельные входы T и синхронизации. (Конечно, существует много дезинформации о триггерах в сети. Например, схема OPs появляется повсюду, помеченная как T-триггер, несмотря на то, что у нее есть проблемы, описанные в других ответах.) Однако , Я предлагаю вышеуказанную информацию как альтернативу точке зрения комментатора.
Edit2: комментатор попросил диаграмму состояний для схемы. Я предоставлю эту информацию, но не в виде диаграммы.
Есть 4 стабильных состояния и 12 состояний, которые являются переходными между стабильными состояниями при нормальной работе.
Стабильные состояния:
Состояние: 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
Переходы идут следующим образом
S1 В \$\uparrow\$N1 \$\downarrow\$N6 \$\uparrow\$N5 \$\downarrow\$ S2
S2 В \$\downarrow\$N1 \$\uparrow\$N4 \$\downarrow\$N3 \$\uparrow\$ S3
S3 В \$\uparrow\$N2 \$\downarrow\$N5 \$\uparrow\$N6 \$\downarrow\$N4 \$\uparrow\$ S4
S4 В \$\downarrow\$N2 \$\uparrow\$N3 \$\downarrow\$ S1
Еще одна проблема, с которой вы можете (но должны ) столкнуться, заключается в следующем : как определяются Q и Q 'в первый раз в JK-триггере? .
Это особенно верно для T-триггера.
Для T-триггера только с 2 входами, T и Clock, выход не может перейти в известное состояние в симуляции, которая поддерживает «X».
Хороший тренажер будет показан «X» на обоих выходах, что свидетельствует о том , что значение неизвестно.
Как я уже упоминал в своем ответе , можно использовать синхронные или асинхронные входы, чтобы установить выход в известное состояние.
Для справки, я построил T-триггер с асинхронными входами, используя JK-триггер Master Slave, который вы можете смоделировать в своем браузере:
