PRESET и CLEAR в D-триггере

Я пытаюсь понять, как PRESET и CLEAR работают на D-триггере с срабатыванием положительного фронта, но я могу что-то упустить, и я надеюсь, что кто-то может пояснить, пожалуйста.

На рисунке 1 ниже показан рассматриваемый триггер. Я использую красный для высокого и синий для низкого. Устройство обнаружения положительного фронта представляет собой вентиль И с вентилем НЕ. Выходной сигнал детектора фронта на этой диаграмме низкий, поэтому состояние триггера не может быть изменено изменением D.

На рис. 2 ниже показан краткий момент, когда фронт часов повышается. Выходной сигнал детектора фронта высокий, поэтому Q изменяется, чтобы соответствовать D.

А на Рисунке 3 ниже показан еще один момент, когда фронт тактового сигнала растет, поэтому снова Q сэмплирует D и изменяется, чтобы соответствовать.

Пока PRE и CLR оба высокие, триггер ведет себя именно так, как я и ожидал. Элементы И-НЕ с тремя входами выводят 0 только тогда, когда все три его входа имеют высокий уровень.

Но вот мой запрос. На рисунке 4 ниже активный низкий вход CLR становится низким, в то время как есть нарастающий фронт, поэтому триггер включен. Инверсия Q теперь высока, но Q не установлен в 0, как я ожидал. На верхний правый вентиль И-НЕ по-прежнему поступает низкий уровень, поэтому Q по-прежнему высокий.

На рисунке 5 ниже активный низкий вход PRE установлен на низкий уровень. Это снова происходит на переднем фронте, в то время как D низкий. Это сделает Q высоким, как и должно быть, но обратное значение Q также будет высоким.

Большую часть времени нарастающий фронт отсутствует, а PRE и CLEAR ведут себя правильно, как показано на рисунках 6 и 7. Меня это беспокоит, потому что во многих источниках (веб-сайты и т. д.) говорится, что входы PRE и CLR асинхронны и полностью независимы от входа D и часов. Может кто-нибудь, пожалуйста, проясните это для меня?

введите описание изображения здесь

Они асинхронные четкие и предустановленные. Это должно быть очевидно, поскольку они взаимодействуют с выходом через вентиль nand, который не запирается часами.

Ответы (1)

Они асинхронные PRESET и CLEAR (активный низкий уровень). В этой настройке существует ограничение, заключающееся в том, что PRE и CLR не могут одновременно быть активными (низкими) в одно и то же время (иначе оба Q и Q' равны 1). Вы можете дать один приоритет, если хотите, немного изменив топологию.

Кроме того, если PRE или CLR активны (низкие) на переднем фронте тактовых импульсов, выходные состояния не обязательно будут инвертированы (как вы указали). Но, поскольку импульс детектора фронта является узким, PRE или CLR будут быстро распространяться через Q и Q' после того, как импульс детектора фронта закончится, при условии, что они удерживаются на протяжении всего импульса .

По сути, выиграет тот, кто «удерживает» дольше: либо данные будут проходить, если импульс детектора фронта остается активным дольше, чем сигналы PRE/CLR остаются активными (низкий уровень), или сигналы PRE/CLR остаются активными дольше, чем фронт. импульс детектора и перезапишите все, что D вставил туда.

На практике эти ограничения будут представлены файлами характеристик библиотеки. Будет дуга настройки и удержания, определяющая синхронизацию между часами, d, PRE и CLR, чтобы предотвратить любые нежелательные состояния.

Или, если бы схема использовалась более нестандартным образом, ее разработчикам нужно было бы убедиться, что они понимают работу защелки импульса (на самом деле это не триггер, имхо) и как правильно включить или сбросить ее.

Вы можете легко сказать, что PRE и CLR являются асинхронными, посмотрев на поток сигналов. PRESET и CLR проходят на выход без какого-либо стробирования по сигналу CLK (что сделало бы их синхронными).

Чтобы убедиться в этом, предположим, что часы не переключаются, а значения PRESET и CLEAR равны «1» (неактивны). Кроме того, эта схема не может одновременно иметь низкий уровень PRE и CLR.

Также предположим начальные состояния для Q и Q':

PRE = 1, CLEAR = 1
Q = 1, Q' = 0

Пока вы ничего не трогаете, все останется как есть (защелкнуто).

Теперь опустите CLR до «0», не переключая часы или данные.

пример

Как показано на изображении выше, это очищает Q от «1» до «0». И часы не перевели. Это означает, что схема асинхронна. Отсюда сигнал CLR может быть деактивирован (возвращен в высокий уровень), а схема по-прежнему будет сохранять свое состояние.

Легко сказать, это стробирование часов по отношению к сигналам очистки/включения/сброса.

Миллион спасибо за четкий ответ. Дуга настройки, о которой вы упомянули, проясняет это для меня - я полагаю, что либо PRE, либо CLR обычно удерживаются на низком уровне дольше, чем продолжительность края. Вы сказали, что по-вашему на моей схеме показана защелка, а не ФФ, и интересно, почему? Я думал, что FF по определению является устройством, запускаемым по фронту, и что на моей схеме показано такое устройство? Это вызывает другой вопрос; Почему некоторые D FF используют конфигурацию ведущий-ведомый для обнаружения фронта, а не комбинацию логических элементов И и НЕ на моей диаграмме (которая намного проще)?
Я бы назвал это импульсной защелкой, потому что это не настоящая топология ведущий-ведомый, а защелка в сочетании с генератором импульсов. Таким образом, элемент памяти чувствителен к уровню длительности импульса. В отличие от обычного master-slave, который (если нет рассогласования часов) действительно срабатывает по фронту. Они используются на практике хорошо, но имеют недостатки. Здесь встроено «временное заимствование» через длительность импульса. Это может быть хорошо, если вам нужно еще несколько % цикла (время настройки тем меньше и меньше, чем дольше удерживается импульс, но эта задержка проявляется в следующем цикле).
Наиболее распространенная причина, по которой они не используются, заключается в том, что с обычной CMOS не гарантируется фактическая работа (они обычно используются в пользовательских блоках в некоторых компаниях). Вы должны сделать запас по всем углам (медленные nmos/быстрые pmos и т. д.), чтобы импульс от детектора краев был достаточно широким, чтобы фактически полностью захватить входные данные D. Это может быть трудно сделать, особенно для низкого напряжения, не прибегая к к непомерно большим цепочкам задержек в детекторе фронта (1 инвертора обычно недостаточно, возможно, потребуется 3).
@Drummy: Не уверен, что ты знаешь о функции «Принять ответ». На всякий случай, если вы подумали, что это то, что вы искали: P