Широко известен факт, что компьютеры работают на базе двоичной логики. А значит, и все элементы компьютера тоже работают с двумя состояниями, 0 и 1. Да что уж там, я сам, описывая устройство компьютера, до сей поры обходился только этими двумя состояниями. Но в реальности на выходе у логических элементов может быть три состояния, а не только два! Третье состояние - это “Выключено”, и обозначается оно буквой Z.
И казалось бы, у нас уже есть 0 и 1, выключено и включено. Зачем ещё одно выключенное состояние Z? Всё дело в том, что 0 - это что-то наподобие заземления. То есть для формирования 0 или 1 чип соединяет свой выход либо с землёй, либо с питанием. А вот в состоянии Z - выход выглядит, как обрыв провода, и не подключён ни к земле, ни к питанию. Это полезно, когда очень хочется к одному проводу присоединить несколько выходов. На примере внизу два входа A и B соединены вместе и поданы на выход Q.
Тут на вход A подаются то 0, то 1. При этом выход B в верхней строчке равен 0. Зато в нижней - у него Z-состояние, хотя Logisim и отображает его, как X. Из картинки видно, что пока A и B равны 0, то всё хорошо. Но как только у одного 1, а у другого 0, мы получаем короткое замыкание. А вот в состоянии Z, B никак не влияет на цепь, потому что он как будто бы оторван.
Теперь надо собрать такой элемент, который умеет повторять на выход то, что к нему пришло на входе, а также может вообще отключаться от выхода. Пин, который управляет выходом, обозначают OE (от Output Enable - включить выход). В изображении ниже выход Q через один транзистор подсоединён к питанию, а через другой - к земле. Таким образом, если открыть верхний транзистор, то напряжение питания через него пойдет на выход. Если открывать нижний транзистор, то всё с выхода будет стекать на землю. В случае, когда оба транзистора закрыты, то выход Q ни к чему не присоединён, а значит это Z-состояние. И для полноты картины можно получить короткое замыкание (КЗ), если открыть оба транзистора, но я так делать не буду. А управляющая логика из двух И и одного НЕ будет правильно открывать транзисторы, не допуская КЗ.
Как обычно, в Logisim уже есть готовый элемент. Вот так он выглядит:
Называется эта штука - шинный формирователь (3-state buffer). И его используют для подключения электроники к шине. Шина - это такой проводник, в который подключается сразу несколько элементов. Вот, например, так могут выглядеть три регистра, подсоединённые к шине. Шина включена на вход в регистры, чтобы можно было из неё читать. А вот выходы регистров подключены к шине через шинный формирователь.
Теперь посмотрим на шину в действии. В регистр A записано 42 (2a в 16-битном виде), а в регистр B - 123 (7b). Надо поменять их содержимое местами. Для этого A перепишем в X, B => A, и X => B.
При работе с шиной надо быть аккуратным. Вот такое можно получить, если после смены A и B, включить оба выхода OE:
Видно, что там, где в числах одинаковые биты, оба 0 или оба 1, в шине будет 0 или 1. А вот там, где биты разные, получаем короткое замыкание.