Гейтирование и tri-state: два способа отключить сигнал
← Все статьи

Гейтирование и tri-state: два способа отключить сигнал

4 мин

Два очень разных смысла «отключить»

«Отключить» сигнал звучит как одна идея, но в Boolflow для этого есть два по-настоящему разных элемента. GATE — это разрешение на основе AND: при EN=0 его выход принудительно становится чистым 0, таким же логическим значением, как и любое другое. TRIBUF — это буфер с тремя состояниями: при EN=0 его выход полностью отключается — высокий импеданс, не задающий ни 0, ни 1.

INEN = 0GATEY = 0держит 0INEN = 0TRIBUFY = Zотпускает провод

Когда правильный ответ — 0

Если сигнал идёт в обычную комбинационную логику — скажем, один операнд АЛУ, который при отключении не должен ничего вносить, — GATE подходит идеально: принудительный 0 является полностью корректным логическим значением, которое последующие вентили AND/OR обрабатывают как обычно.

Когда правильный ответ — отключение

Если несколько источников должны разделять один и тот же провод и говорить может только один за раз, GATE с этой задачей не справится — задать на общем проводе обычный 0 это такое же активное утверждение, как и задать 1, и два несогласных GATE всё равно будут конфликтовать. Только настоящее состояние высокого импеданса у TRIBUF позволяет проводу по-настоящему никому не принадлежать, пока не разрешён ровно один источник.

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

Соберите одну и ту же схему с общим проводом и двумя источниками дважды в редакторе схем — один раз на элементах GATE, другой раз на TRIBUF — и в каждой версии разрешите оба источника одновременно. Точные таблицы истинности GATE и TRIBUF смотрите в справке, и сравните сами результаты: версия с TRIBUF ведёт себя как шина — выключенный драйвер отпускает провод, а включённый задаёт значение, — тогда как версия с GATE отпустить провод не может никогда, потому что выключенный GATE всё равно удерживает жёсткий 0. Страница Check помечает такую разводку GATE как выходы, соединённые вместе.

Открыть пример шины с тремя состояниями →