Задержка распространения: почему сигналы опаздывают

В идеальном мире схем все сигналы менялись бы мгновенно: переключили вход — выход переключился в ту же наносекунду. В реальности каждый вентиль тратит небольшое, но ненулевое время на переключение. Это время называется задержкой распространения (propagation delay), и именно из-за него сигналы «опаздывают».

Каждый вентиль — это маленькая задержка

Логический вентиль — это физическое устройство. Когда меняется напряжение на его входе, транзисторам внутри нужно время, чтобы переключиться: разрядить или зарядить ёмкости, стабилизировать выход. Это занимает пикосекунды или наносекунды — в зависимости от технологии.

Главное следствие: задержки складываются. Если сигнал проходит цепочку из 10 вентилей, он опоздает в 10 раз сильнее, чем сигнал, прошедший один вентиль.

Цепочка переноса сумматора

Лучший пример — многоразрядный сумматор. Вспомните, как он устроен: каждый полный сумматор складывает два бита и перенос с предыдущего разряда. Перенос CarryOut каждого блока подаётся на вход CarryIn следующего.

Получается цепочка: чтобы узнать перенос на выходе последнего разряда, нужно сначала посчитать перенос в первом разряде, затем во втором, и так далее до восьмого. Каждый шаг — это пара вентилей задержки. Итого сигнал переноса проходит «по цепочке» через все блоки.

А что с суммой? Младший разряд суммы Sum[0] зависит только от входов A[0] и B[0] — для него цепочки переноса нет. Поэтому сумма в младших разрядах появляется почти сразу, а перенос и старшие разряды суммы приходят позже.

FA0 + 1 FA1 + 2 FA2 + 4 FA3 + 8 C C C t t + Δ t + 2Δ t + 3Δ время
Цепочка переноса: каждый полный сумматор (FA) добавляет свою задержку Δ — перенос младших разрядов «ждёт» старших

Как это выглядит на временной диаграмме

В симуляторе (и на реальном осциллографе) это проявляется так: на диаграмме сигнал Carry переключается позже, чем сигнал Sum. Не потому, что сумма считается «быстрее» или «первой», а потому, что у переноса длиннее путь: больше вентилей на пути к выходу.

Если у вас на уровне 43 «Остановка времени» выход переноса появляется с задержкой относительно суммы — это не ошибка симулятора. Это настоящий эффект реальных схем, и чем больше разрядов в сумматоре, тем заметнее отставание переноса.

Почему это важно

Попробовать в симуляторе →