Я пытаюсь понять, как 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 и часов. Может кто-нибудь, пожалуйста, проясните это для меня?
Они асинхронные 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 может быть деактивирован (возвращен в высокий уровень), а схема по-прежнему будет сохранять свое состояние.
Легко сказать, это стробирование часов по отношению к сигналам очистки/включения/сброса.
jbord39