На рисунке показаны два элемента И-НЕ с открытыми стоками и общая шина. (Открытый сток значит что сток подключен не к питанию а выходу на шину, на которую через резистор подключено питание). Такая система позволяет уменьшить время отклика (т.к. сразу понижается напряжение на шине и не идет ток через питание в самом логическом элементе) Если все закрыто то на шине 1. Поэтому в PC чтение из памяти которой нету физически дает одни 1. Идея шины и открытых стоков:
![]()
Выходы с открытым стоком помечают как правило схемотехническим знаком:
![]()
/\ / \ \ / \/ ----
Пример CMOS открытого стока:
![]()
Попробуем промоделировать шину с 2мя устройствами с открытым стоком на Verilog:
![]()
Модель устройства с открытым стоком. Имеет два входа - один это сигнал который выставлять на шину, другой - разрешение выставления на шину: module cmos_opendrain(out,in,en); output out; input in; input en; wire iin; wire x; cmos_not CMOS_NOT_1(iin, in); supply0 gnd; assign out = 1'bZ; nmos(x, gnd, en); nmos(out, x, iin); endmodule Модель шины: module bus_test(a,b,ena, enb); input a,b,ena,enb; wand bus; supply1 pwr; assign bus = pwr; cmos_opendrain DEVICE0(bus,a, ena); cmos_opendrain DEVICE1(bus,b, enb); endmodule Результаты моделирования: Видно, что когда никто не выставляется на шину то ее значение 1. (вот почему если читать зону за пределами физической оперативной памяти мы получаем одни FFh). Если кто-то один выставляется - то результатты соответсвуют данным. Если выставляются сразу оба - то побеждает тот кто выставляет 0. (Эта особенность используется для арбитража шины).
![]()
Монтажная логика
![]()
Собственно говоря шина основанная на открытых стоках выполняет логическую функцию AND. Если у кого-то 0 - то на шине будет тоже 0. Поэтому ее иногда еще называют монтажной логикой.