Принцип синхронного проектирования
Синхронная схема управляет каждым триггером от одного общего тактового сигнала, и только от него. Все изменения состояния происходят в один момент, на одном и том же фронте — именно это сделало синхронные счётчики невосприимчивыми к волновой задержке, которая влияет на их асинхронные аналоги. Это единственное правило позволяет большим цифровым системам с миллионами триггеров вести себя предсказуемо.
Время установки и удержания
У каждого триггера есть два требования к синхронизации вокруг фронта такта: время установки (setup time) — минимальный интервал, в течение которого вход данных должен быть стабилен до фронта, и время удержания (hold time) — минимальный интервал, в течение которого он должен оставаться стабильным после фронта. Пока данные меняются только за пределами этого окна, триггер надёжно фиксирует чистый 0 или 1.
Что происходит при нарушении синхронизации: метастабильность
Если вход меняется внутри окна установки/удержания, выход триггера может перейти в метастабильное состояние — ни чистый 0, ни чистая 1, а некое промежуточное напряжение, которое со временем разрешается в одно из двух значений после непредсказуемой дополнительной задержки. Настоящая опасность не в самом метастабильном напряжении; опасность в том, что разные вентили, читающие этот же выход в неразрешённом окне, могут «не сойтись» в том, был ли это 0 или 1, что повреждает логику дальше по цепи — причём очень трудно воспроизвести или отладить.
Безопасный переход между тактовыми доменами
Метастабильность становится неизбежной, когда сигнал переходит из одного тактового домена в другой — например, нажатие кнопки (асинхронное относительно любого такта), считываемое синхронной схемой. Стандартное решение — синхронизатор: два триггера последовательно, оба тактируемые принимающим доменом. Первый триггер может перейти в метастабильность, но у него есть целый тактовый цикл, чтобы разрешиться, прежде чем второй триггер его считает — это делает вероятность ошибки дальше по цепи астрономически малой, хотя и не нулевой.
Почему это важно даже вне проектирования чипов
Симуляция в Boolflow идеализирована — сигналы устанавливаются мгновенно, поэтому в самом редакторе метастабильность не увидеть. Но дисциплина всё равно важна при проектировании схемы: каждый блок, управляемый CLOCK, должен читать входы только от другой синхронной логики, а любой сигнал, приходящий снаружи (в случае Boolflow — ручное переключение INPUT) и попадающий в тактируемую логику — это ровно та ситуация, для защиты от которой существует настоящий синхронизатор. Загрузите пример триггера и заметьте, что каждое изменение состояния совпадает с одним и тем же фронтом CLOCK — это и есть принцип синхронного проектирования в действии.