Я пытаюсь понять, почему запуск по фронту предпочтительнее, чем запуск по уровням. В моей книге это не объясняется четко. После поиска в Интернете я узнал, что запуск по фронту нечувствителен к глюкам, тогда как запуск по уровню чувствителен. Что это означает?
Также я не могу понять следующее: «Если часы чувствительны к уровню, новый может пробежаться по логической сети и изменить выход. Чтобы избежать этого, нам нужен короткий импульс, чтобы захватить выход и удержать его постоянным. Но такой короткий импульс создать нелегко, поэтому мы приступаем к запуску фронта. Проблема обратной связи решена, потому что у нового выхода недостаточно времени, чтобы вернуться к входу в течение времени одного нарастающего фронта ».
Я не понимал, почему выход не сработал при срабатывании уровня и почему нам нужен короткий импульс для удержания выхода.
Во-вторых, проблема обратной связи, поскольку длительность срабатывания уровня велика по сравнению с срабатыванием фронта, в случае первого выход снова будет возвращаться на вход, и он будет продолжать делать это, пока активны часы , В чем проблема обратной связи?
Но как это будет решено в запуске по краям? Если время падения или подъема очень мало, как выход сможет распространяться через все ворота? Это похоже на то, что после применения запуска по фронту выход будет распространяться через все шлюзы, а следующие входы будут рассматриваться только на следующем фронте тактового сигнала?
Ответы:
Хотя фронт - это четко определенный момент времени, неверно утверждать, что запуск уровня также не имеет четко определенного момента времени. Оно делает. Существует четко определенный момент времени, когда уровень часов падает, входы в синхронизированную цепь дискретизируются, и дальнейшие изменения входов больше не допускаются.
Проблема с запуском уровня заключается в том, что, хотя уровень синхронизации высок, входы меняют выходы. В цепях с обратной связью (выходы подключены обратно к входам) срабатывание уровня вызывает хаос, потому что уровень достаточно широк (полчаса), чтобы выход мог возвращаться на входы в течение того же периода.
Первое очевидное решение, которое предлагает себе сократить уровень до такой степени, что нежелательная обратная связь невозможна (и сохранить уровень «вкл» коротким, даже если мы произвольно замедлим тактовый период). Предположим, что мы очень быстро переключаем тактовую частоту с 0 на 1 и обратно на 0, чтобы синхронизированные устройства принимали свои входы, но у выходов не было достаточно времени, чтобы пройти через цепь обратной связи, чтобы изменить эти входы. Проблема в том, что узкие импульсы ненадежны и, в основном, требуют отклика, который может быть на несколько порядков быстрее тактовой частоты. Мы можем обнаружить, что нам нужен импульс шириной в наносекунду, хотя система работает на частоте всего 1 МГц. Итак, у нас есть проблема распределения чистых, острых, достаточно высоких импульсов шириной в наносекунду по шине, рассчитанной на 1 МГц.
Следующий логический шаг заключается в том, чтобы устройства генерировали для себя узкий импульс в качестве производной по времени фронта тактового сигнала. Когда часы переходят с одного уровня на другой, сами устройства могут внутренне генерировать короткий импульс, который вызывает выборку входов. Нам не нужно распространять этот импульс непосредственно через шину часов.
Таким образом, в конце концов, вы можете считать, что все это вызвано уровнем. Краевой запуск - это хитрость, позволяющая устройствам создавать очень точный уровень запуска, который быстрее, чем все внешние петли обратной связи, позволяя устройствам быстро принимать входные данные, а затем своевременно закрывать вход, прежде чем их изменяющиеся выходы изменят значения входов. ,
Мы также можем провести аналогию между сигналом «активировать» (часы, запускаемые по уровню) и дверью на корабле, который удерживает давление воздуха. Запуск по уровню подобен открытию двери и выходу воздуха. Однако мы можем построить воздушный замок, который состоит из двух (или более) дверей, которые не открываются одновременно. Вот что произойдет, если мы разделим часы уровня на несколько фаз.
Простейшим примером этого является триггер мастер-раб . Он состоит из двух D-триггеров, запускаемых по уровню, расположенных в каскаде. Но тактовый сигнал инвертирован, поэтому вход одного включен, а другой отключен, и наоборот. Это как дверь воздушного шлюза. В целом, триггер никогда не открывается, так что сигнал может свободно проходить. Если у нас есть обратная связь с выхода триггера обратно на вход, это не проблема, потому что он переходит на другую фазу синхронизации. Конечным результатом является то, что триггер «ведущий-ведомый» демонстрирует поведение, запускаемое с фронта! Полезно изучить триггер «ведущий-ведомый», потому что он может что-то сказать о взаимосвязи между уровнем и срабатыванием фронта.
источник
Запуск по фронту хорош для тактовых импульсов, поскольку он позволяет использовать значение, выводимое защелкой в ответ на один (например, восходящий) фронт тактового сигнала, для вычисления того, что он должен делать на следующем восходящем фронте тактового сигнала. Если кто-то строит последовательную схему, такую как счетчик, с использованием нескольких защелок, инициируемых фронтом, можно произвольно смешивать быстрые и медленные логические компоненты при условии, что для каждого возможного пути время распространения минус величина, на которую отстает тактовая частота приемной защелки гарантированное значение отправителя будет больше, чем время удержания получателя, а время цикла плюс величина, на которую часы приемного фиксатора отстают от отправителей, за вычетом времени распространения гарантированно будет больше времени установки получателя.
Напротив, построение схемы для подсчета импульсов на одном входе без использования защелок, инициируемых фронтом, потребовало бы определенных гарантий относительно относительных скоростей некоторых частей схемы. Обычный подход заключается в преобразовании входящего тактового сигнала (ClkIn) в неперекрывающуюся пару тактовых сигналов (Phi1 и Phi2). Phi1 истинно, когда ClkIn высокий и был высоким в течение некоторого гарантированного минимального времени . Phi2 высокий, когда ClkIn низкий и был низким в течение некоторого гарантированного минимального времени, Когда ClkIn переключается с низкого уровня на высокий, Phi2 понижается до того, как Phi1 становится высоким; аналогично, когда он переключается с высокого уровня на низкий. Можно построить счетчик, имея два набора защелок (которые я назову Count1 и Count2). Всякий раз, когда Phi1 является высоким, Count1 фиксирует Count2. Всякий раз, когда Phi2 высокий, Count2 фиксируется (Count1 + 1). Если бы Phi1 и Phi2 оба поднялись одновременно или слишком мало времени между ними, значение счетчика стало бы неопределенным, но при условии правильного разделения счетчик будет работать очень хорошо. Системы с двухфазной синхронизацией часто имеют достаточно большое количество разделений; при условии, что все достаточно быстро, такое разделение может избежать проблем с перекосом часов.
Внутренне, многие инициируемые фронтом защелки могут рассматриваться как пара защелок «ведущий / ведомый», которые соединены проводом так, что мастер защелкивает вход всякий раз, когда часы находятся в состоянии перед фронтом, а ведомый защелкивает мастер, когда часы в состоянии после. Сигналы, поступающие на две защелки, должны иметь подходящее соотношение, но если они генерируются в той же окрестности, что и защелки, не нужно чрезмерно увеличивать степень разделения почти настолько, насколько это необходимо, если бы две фазы синхронизации были отправлено по более широкой области.
Обратите внимание, что хотя запуск по фронту хорош для часов, есть и другие цели, для которых он менее хорош. Иногда полезно, чтобы периодические события превращались в прерывания при условии, что никакие два события не используют один и тот же сигнал, инициируемый фронтом. Инициирование по краю является паршивым для общих прерываний, и в некоторых случаях может быть проблематично даже с неразделенными, если нет способа опроса состояния провода прерывания. Запуск по уровню также может быть полезен в случаях, когда строб-сигнал будет активен в том же цикле, что и некоторая информация, которая должна быть зафиксирована, но когда информация имеет более длинный путь вычисления, чем строб-сигнал. Если информация является чем-то похожим на адрес для асинхронного чипа памяти, ее доступность когда-нибудь во время тактового цикла может быть лучше, чем ожидание начала следующего тактового цикла.
источник
Чтобы понять, почему запуск по фронту предпочтительнее, представьте 8-разрядный сумматор, подключенный к регистру, постоянно добавляющий 1 к значению регистра, с кнопкой, подключенной к выводу включения регистра.
Если вывод разрешения регистра чувствителен к уровню, то содержимое регистра будет постоянно увеличиваться в течение нажатия кнопки. Следующее состояние регистра не будет детерминированным для данного нажатия кнопки. Это связано с тем, что сумматор может увеличивать регистр много раз, прежде чем вы сможете убрать палец - другими словами, обратная связь покидает регистр и слишком быстро возвращается к сумматору.
Если вместо этого контакт включения чувствителен к фронту, содержимое регистра будет увеличиваться ровно один раз при каждом нажатии кнопки, независимо от того, как долго была нажата кнопка (при условии правильного деблокирования ввода). Было бы невозможно, чтобы выходные данные регистра вернулись к сумматору вовремя для любого недетерминированного поведения.
источник
Как говорили другие, край - это очень специфический момент времени. Все мы знаем, что цифровые схемы могут испытывать затруднения, когда выходной сигнал затвора является неправильным, поскольку только несколько его входов достигли его, другие сигналы находятся на пути и занимают больше времени из-за более длинного пути (электричество распространяется довольно быстро но все же 3x10 ^ 8 м / с требуется немного времени, чтобы обойти провода). Если у нас есть единица измерения уровня, на ее вывод будут влиять глюки. С созданием краевого запуска у нас есть очень узкое окно во времени, когда «вещи могут случиться», иными словами, схема будет изменять свое состояние (значения на разных проводах внутри схемы, включая выход) в определенные четко определенные моменты времени. время. Обратите внимание на фразу «Моменты во времени»
На данный момент вы не будете знать о том, что называется «анализом времени», но я объясню немного. Когда мы делаем цифровые схемы, мы хотим имитировать их, чтобы увидеть, как они будут себя вести и соответствует ли это поведение тому, что мы хотим, чтобы оно делало. При анализе синхронизации мы проверяем, способны ли сигналы достичь определенной точки цепи в течение требуемого времени. Если они слишком задержаны, схема не будет работать правильно. Используя блоки цепи, запускаемые по фронту, вместо уровня, анализ синхронизации становится очень простым, поскольку мы точно знаем, когда что-то может произойти в цепи. Это означает, что дизайн схемы также становится проще. Помните, что в реальном мире очень редко встречаются защелки, запускаемые по уровню.
источник
Хотя другие ответы охватывают почти все, что можно сказать о вашем вопросе, чтобы прояснить его, я добавил несколько диаграмм и краткое объяснение.
Представьте, что вы хотите разработать схему, которая включает в себя какую-то обратную связь. Скажи
A = A.B
(в основном, И ворота с обратной связью). Если вы реализуете его с помощью простой чувствительной к уровню защелки, в которой хранится значение A, ваша схема будет выглядеть примерно такЭто может создать проблему. Когда часы высокие, защелка становится прозрачной, и логический элемент И вычисляет новое значение
A and B
. Но значение возвращается в защелку, и, поскольку защелка все еще прозрачна (CLK все еще высока),A AND B
вычисляется новое значение . Это то, что обычно называют условием гонки , которое создает глюки (неожиданные максимумы и минимумы на выходе), о которых вы упоминали.Одним из решений этой проблемы было бы удержание импульса CLK очень коротким, достаточно коротким, чтобы после генерирования выхода логического элемента И защелка деактивировалась до повторного распространения значения на вход. Должно быть интуитивно понятно, почему это может быть трудно достичь. Это будет зависеть от скорости переключения защелки (наконец, защелка также сделана из комбинационных ворот), длины провода и сотен других параметров.
Второй более выполнимый вариант - использовать чувствительный к краям элемент (в данном случае триггер), который представляет собой пару защелок, соединенных очень умным способом.
В основном, когда
CLK
сигнал высокий, защелка U1 прозрачна, что выводит логическое значение на входе A на выход защелки U1, когдаCLK
сигнал НИЗКИЙ, защелка U2 становится прозрачной, иA AND B
вычисляется новое значение . Но это значение будет распространяться на вход логического элемента И только тогда, когда защелка U1 станет прозрачной (CLK - ВЫСОКАЯ), и, следовательно, защелка U1 станет прозрачной (CLK - НИЗКАЯ). Что в основном эквивалентно тому, чтобы сказать, что схема теперь чувствительна к фронту (выходное значение изменяется только на отрицательном фронте тактовой частоты).Это позволяет избежать проблемы состояния гонки, описанной ранее, и поэтому запуск по уровням предпочтительнее, чем запуск по фронту.
источник