Буферы с тремя состояниями и конфликт шины
← Все статьи

Буферы с тремя состояниями и конфликт шины

5 мин

Третье состояние помимо 0 и 1

Выход обычного вентиля всегда активно задаёт либо 0, либо 1. Буфер с тремя состояниями добавляет третью возможность: когда его вход Enable низкий, выход полностью отключается — высокий импеданс (Hi-Z), как будто провод просто выдернут, а не подключён к какому-то напряжению. В Boolflow это напрямую моделирует элемент TRIBUF: один вход данных, один вход разрешения, один выход, который либо повторяет данные, либо «плавает».

Зачем вообще делить один провод

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

D1TRIBUFEN1D2TRIBUFEN2общий провод

Конфликт и «плавающая» шина

Неправильная логика разрешения приводит к двум разным поломкам. Если разрешить сразу два несогласных драйвера, оба активно пытаются задать один и тот же провод в противоположные напряжения — это конфликт (contention), который в реальном железе впустую тратит энергию и может повредить драйверы. Если не разрешить ни одного, шина «плавает»: тот, кто её читает, видит неопределённое, чувствительное к шуму значение вместо чистого 0 или 1.

Как Boolflow обрабатывает общий провод

Чтобы разделить провод в Boolflow, подключите несколько выходов TRIBUF к одному и тому же входу. Симулятор разрешает это так, как ведёт себя настоящая шина: выключенный драйвер отпускает провод, а включённый задаёт своё значение. Если два включённых драйвера не согласны, провод читается как неизвестное значение, а не как догадка. Инструмент Check сообщает именно об этих ситуациях — драйверы, которые сейчас спорят, шина, которую никто не питает, и обычные выходы вентилей, соединённые вместе: это никогда не допустимо, потому что отпустить провод может только tri-state выход.

Попробуйте сами

Соберите общую шину из двух элементов TRIBUF в редакторе схем и переключайте их линии Enable вручную: пока включён один, шина повторяет его, пока не включён ни один — показывает «?», а когда включены оба с разными данными, страница Check помечает конфликт.

Открыть общую шину из двух TRIBUF →