Задержка распространения: почему сигналы опаздывают
В идеальном мире схем все сигналы менялись бы мгновенно: переключили вход — выход переключился в ту же наносекунду. В реальности каждый вентиль тратит небольшое, но ненулевое время на переключение. Это время называется задержкой распространения (propagation delay), и именно из-за него сигналы «опаздывают».
Каждый вентиль — это маленькая задержка
Логический вентиль — это физическое устройство. Когда меняется напряжение на его входе, транзисторам внутри нужно время, чтобы переключиться: разрядить или зарядить ёмкости, стабилизировать выход. Это занимает пикосекунды или наносекунды — в зависимости от технологии.
Главное следствие: задержки складываются. Если сигнал проходит цепочку из 10 вентилей, он опоздает в 10 раз сильнее, чем сигнал, прошедший один вентиль.
Цепочка переноса сумматора
Лучший пример — многоразрядный сумматор. Вспомните, как он устроен: каждый полный сумматор складывает два бита и перенос с предыдущего разряда. Перенос CarryOut каждого блока подаётся на вход CarryIn следующего.
Получается цепочка: чтобы узнать перенос на выходе последнего разряда, нужно сначала посчитать перенос в первом разряде, затем во втором, и так далее до восьмого. Каждый шаг — это пара вентилей задержки. Итого сигнал переноса проходит «по цепочке» через все блоки.
А что с суммой? Младший разряд суммы Sum[0] зависит только от входов A[0] и B[0] — для него цепочки переноса нет. Поэтому сумма в младших разрядах появляется почти сразу, а перенос и старшие разряды суммы приходят позже.
Как это выглядит на временной диаграмме
В симуляторе (и на реальном осциллографе) это проявляется так: на диаграмме сигнал Carry переключается позже, чем сигнал Sum. Не потому, что сумма считается «быстрее» или «первой», а потому, что у переноса длиннее путь: больше вентилей на пути к выходу.
Если у вас на уровне 43 «Остановка времени» выход переноса появляется с задержкой относительно суммы — это не ошибка симулятора. Это настоящий эффект реальных схем, и чем больше разрядов в сумматоре, тем заметнее отставание переноса.
Почему это важно
- Тактовая частота ограничена самым длинным путём сигнала. Процессор должен ждать, пока самый медленный сигнал дойдёт до конца — иначе следующий такт начнётся раньше, чем схема «успокоится».
- Чем длиннее цепочка переноса, тем медленнее сумматор. Именно поэтому существуют схемы «ускоренного переноса» (carry-lookahead), которые вычисляют переносы параллельно.
- Задержка — это не баг, а свойство физики. Понимая её, вы поймёте, почему цифровые схемы проектируют с осторожностью и почему тактирование так важно.