Третье состояние помимо 0 и 1
Выход обычного вентиля всегда активно задаёт либо 0, либо 1. Буфер с тремя состояниями добавляет третью возможность: когда его вход Enable низкий, выход полностью отключается — высокий импеданс (Hi-Z), как будто провод просто выдернут, а не подключён к какому-то напряжению. В Boolflow это напрямую моделирует элемент TRIBUF: один вход данных, один вход разрешения, один выход, который либо повторяет данные, либо «плавает».
Зачем вообще делить один провод
Шина — это набор проводов, на которые в разное время должны писать несколько устройств: шина памяти с несколькими микросхемами или регистровый файл с несколькими портами чтения на один выход. Вместо того чтобы пропускать все источники через мультиплексор, можно подключить несколько выходов TRIBUF прямо к одному проводу и разрешать в каждый момент ровно одному из них: какой буфер разрешён, тот и пишет на шину, а все остальные остаются отключены.
Конфликт и «плавающая» шина
Неправильная логика разрешения приводит к двум разным поломкам. Если разрешить сразу два несогласных драйвера, оба активно пытаются задать один и тот же провод в противоположные напряжения — это конфликт (contention), который в реальном железе впустую тратит энергию и может повредить драйверы. Если не разрешить ни одного, шина «плавает»: тот, кто её читает, видит неопределённое, чувствительное к шуму значение вместо чистого 0 или 1.
Что на самом деле проверяет инструмент Check в Boolflow
Инструмент Check в Boolflow проверяет обычную разводку — что у каждого входа, которому нужен источник, он есть, и что каждый выход, который должен куда-то вести, ведёт, — но у него нет специального понимания разделения через tri-state, поэтому два TRIBUF, разрешённых на один и тот же провод одновременно, не будут помечены как конфликт, как это сделал бы настоящий инструмент проверки правил проектирования (DRC) в реальной EDA-системе. Следить за тем, чтобы в каждый момент был разрешён ровно один источник, — дисциплина, которую разработчик должен соблюдать вручную, а не то, что проверяет за него симулятор.
Попробуйте сами
Соберите общую шину из двух элементов TRIBUF в редакторе схем, переключайте их линии Enable вручную и понаблюдайте, что симулятор на самом деле делает — а не сообщает, — когда оба ненадолго активны одновременно.