Вентили, сложение и один бит памяти
Пощёлкайте входами вентилей, сложите два бита полусумматором и замкните два вентиля в петлю, которая помнит бит после снятия сигналов.
// стенд вентилей
Вентиль - это несколько транзисторов, которые выполняют одну логическую операцию. Щёлкайте тумблерами входов и смотрите на лампу выхода: таблица истинности внизу подсветит ту строку, в которой вы сейчас находитесь. Полусумматор стоит в том же ряду и отличается только вторым выходом - переносом.
Эту схему на телефоне показать невозможно: она широкая, и в мелком виде по ней ничего не разобрать. Откройте страницу с компьютера или планшета - там схема доступна целиком.
Пара транзисторов: верхний открывается нулём и тянет выход к питанию, нижний открывается единицей и тянет к земле. Открыт всегда ровно один - отсюда и берётся переворот.
Вентиль И: зажгите выход. Подсказка - тут работает правило «оба или никто».
- Вентиль И: зажгите выход. Подсказка - тут работает правило «оба или никто». Выход И загорается единственным способом: единицы на обоих входах. Из четырёх строк таблицы это одна.
- Вентиль ИЛИ: зажгите выход, включив только один вход. ИЛИ хватает любого одного входа. Из четырёх строк таблицы выход горит в трёх - гаснет только тогда, когда оба входа выключены.
- Вентиль НЕ: погасите выход. Второй тумблер здесь не работает - у НЕ один вход. Ноль на выходе получается из единицы на входе: транзистор открылся и замкнул выход на землю.
- XOR: зажгите выход. Одинаковые входы тут не годятся. XOR выявляет несовпадение: единица ровно тогда, когда входы разные. Отсюда он и попал в сумматор - бит суммы ведёт себя точно так же.
- XOR: теперь погасите выход, но так, чтобы оба входа были включены. Два включённых входа для XOR - это согласие, а согласие даёт ноль. Именно поэтому 1 + 1 в сумматоре даёт ноль в разряде суммы.
- И-НЕ: зажгите выход, включив оба входа. Получится? Не получится: у NAND два включённых входа - единственный случай, когда выход гаснет. Зажечь его можно любой другой комбинацией, и задание зачтётся именно на ней.
- Полусумматор: сложите 1 и 1. Выход суммы должен погаснуть, а перенос - загореться. Вот оно: 1 + 1 в двоичном виде это «10». Ноль остаётся в разряде, единица уходит в следующий. XOR погасил сумму, AND зажёг перенос - оба смотрели на одни и те же провода.
- Полусумматор: сложите 1 и 0 - сумма должна загореться, а перенос остаться нулём. Разные входы дают единицу суммы и нулевой перенос: переносить нечего. Ровно три из четырёх случаев сложения выглядят именно так.
Все восемь заданий сошлись. Обратите внимание, что нигде не понадобилось ничего запоминать: каждый вентиль ведёт себя одинаково всегда, и именно поэтому из них можно собирать схемы любой сложности, не проверяя каждую заново.
| Вход A | Выход |
|---|---|
| 0 | 1 |
| 1 | 0 |
Пара транзисторов: верхний открывается нулём и тянет выход к питанию, нижний открывается единицей и тянет к земле. Открыт всегда ровно один - отсюда и берётся переворот.
| Вход A | Вход B | Выход |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Это И-НЕ плюс инвертор: четыре транзистора и ещё два. Внизу пара последовательно - выход упадёт в ноль, только если открыты обе, то есть на обоих входах единицы. Аналогия - две двери подряд: заперта любая, и вы не прошли.
| Вход A | Вход B | Выход |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Это ИЛИ-НЕ плюс инвертор: четыре транзистора и ещё два. Внизу пара параллельно - хватает одного открытого. Аналогия - два выключателя в коридоре, у входа и у лестницы: нажали любой, свет горит. Поэтому и на двух единицах выход остаётся единицей: ИЛИ спрашивает «хоть кто-нибудь», а не «ровно один».
| Вход A | Вход B | Выход |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Единица, когда входы разные. Из пары транзисторов не собирается: его строят из готовых вентилей - «(A или B) и не (A и B)», это и нарисовано на схеме. В кремнии на него уходит около восьми транзисторов. Аналогия: двое голосуют, и единица означает несовпадение мнений.
| Вход A | Вход B | Выход |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Четыре транзистора и ничего лишнего: сверху пара параллельно, снизу пара последовательно. Именно она получается «сама», а чистый И - это она же плюс инвертор, то есть шесть против четырёх. На миллиардах вентилей разница существенная, поэтому схемы и строят из И-НЕ и ИЛИ-НЕ.
| Вход A | Вход B | Выход |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
Тоже четыре транзистора, только зеркально: сверху пара последовательно, снизу параллельно. Открылся хоть один нижний - выход упал в ноль. Вторая экономная основа микросхем.
| Вход A | Вход B | Выход | Перенос |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Не отдельный вентиль, а два вентиля на одних проводах: XOR даёт бит суммы, AND - бит переноса. Вот и вся схема, которая умеет складывать два бита.
Числа транзисторов - типовые для КМОП-логики и приведены как в статье: NAND и NOR по четыре, И и ИЛИ по шесть. Реальные библиотеки элементов у каждого производителя свои, но соотношение сохраняется - поэтому схемы и строят на NAND.
// сумматор
Полусумматор - это два вентиля, которые смотрят на одни и те же два провода: XOR выдаёт бит суммы, AND выдаёт бит переноса. Соедините такие блоки цепочкой - и получится сложение многоразрядных чисел. Наберите слагаемые разрядами и жмите «шаг»: перенос пойдёт справа налево, из разряда в разряд.
Нажимайте на разряды A и B, чтобы менять числа. Пока идёт сложение, разряды заперты - как и в схеме, где числа уже поданы на входы.
Числа поданы на входы, но ни один разряд ещё не сложен. Сложение идёт с младшего разряда: у самого правого полусумматора входов только два, потому что переносить в него неоткуда.
Разряд сложен без переноса: входы разные или оба нулевые, XOR выдал бит суммы, AND промолчал. Следующему разряду ничего не передаётся.
Единица ушла в следующий разряд. Именно ради этого случая полусумматору и нужен второй вентиль: 1 + 1 в двоичном виде это «10», ноль пишем, единицу переносим. Дальше разряду нужны уже три входа - A, B и перенос, - и такая схема называется полным сумматором.
Все разряды сложены. Именно такая цепочка и работает в арифметико-логическом устройстве процессора: восемь блоков подряд складывают 8-битные числа, 64 блока - 64-битные. Реальное АЛУ сложнее: там есть ускоренный перенос, вычитание, умножение и сравнение, - но принцип тот же.
Перенос ушёл за последний разряд, а девать его некуда: разрядность задана железом. Результат остался в тех разрядах, что есть, старшая единица потерялась. В процессоре такой случай отмечается флагом переполнения, и дальше уже программа решает, что с этим делать.
Защёлка: схема, которая помнит после снятия сигнала
Вентиль - проходная схема: убрали сигнал, и результата нет. Но если замкнуть два вентиля ИЛИ-НЕ в петлю - выход каждого на вход другого, - схема начинает держать состояние сама. Подайте сигнал, снимите его и посмотрите, что останется на выходе.
Сигнал «запомни 1» дошёл до нижнего вентиля, тот выдал ноль, верхний увидел этот ноль и выдал единицу. Теперь единица с верхнего выхода приходит на вход нижнего и подтверждает его ноль: петля сама себя держит.
Симметрично: сигнал «запомни 0» переворачивает верхний вентиль в ноль, нижний видит два нуля на входах и выдаёт единицу. Она приходит обратно на верхний и держит его ноль. В защёлке ноль.
Оба сигнала сняты, а выход не изменился. Держать его нечему, кроме самой петли: каждый вентиль подтверждает состояние другого. Это и есть один бит памяти - только два вентиля и провода между ними.
Оба сигнала поданы сразу, и оба вентиля вынуждены выдать ноль. Выходы перестали быть противоположными - защёлка больше ничего не помнит, а показывает то, что ей навязали снаружи. Такое сочетание в схемах запрещают.
Сигналы сняли - и оба вентиля кинулись переключаться разом. Победит тот, что окажется на доли наносекунды быстрее, а какой - зависит от разброса при производстве. Запишите нужное значение заново.
- Запишите в защёлку единицу.
- Снимите оба сигнала и убедитесь, что единица осталась.
- Перезапишите защёлку в ноль.
- Снова снимите сигналы: ноль тоже держится сам.
- Подайте оба сигнала сразу и посмотрите на выходы.
- Снимите оба после запрещённого сочетания - и увидите, почему его запрещают.
Вот и вся память: не хранилище, а петля из двух вентилей, которые подтверждают состояние друг друга. Восемь защёлок - байт, миллиард - около 128 мегабайт: так сделан кэш процессора. Быстро, но дорого - на каждый бит своя петля.
Запомни 1 подан, Запомни 0 снят: Q = 1, обратный выход = 0 - Записываем единицу.
Запомни 1 снят, Запомни 0 подан: Q = 0, обратный выход = 1 - Записываем ноль.
Запомни 1 снят, Запомни 0 снят: Q = как было, обратный выход = как было - Держит сама.
Запомни 1 подан, Запомни 0 подан: Q = 0, обратный выход = 0 - Запрещённое сочетание.
Это простейшая защёлка, без такта. В процессоре к петле добавляют вход разрешения записи, чтобы бит менялся ровно в момент такта - тогда схему называют триггером.
Интерактив разработан ANY.BY - ремонт компьютеров и ноутбуков в Барановичах. © 2008-2026. Источник: any.by/demo/logicheskie-ventili