Перейти к содержимому
1.2. Логические схемы: мышление из кремния

Вентили, сложение и один бит памяти

Пощёлкайте входами вентилей, сложите два бита полусумматором и замкните два вентиля в петлю, которая помнит бит после снятия сигналов.

// стенд вентилей

Вентиль - это несколько транзисторов, которые выполняют одну логическую операцию. Щёлкайте тумблерами входов и смотрите на лампу выхода: таблица истинности внизу подсветит ту строку, в которой вы сейчас находитесь. Полусумматор стоит в том же ряду и отличается только вторым выходом - переносом.

Эту схему на телефоне показать невозможно: она широкая, и в мелком виде по ней ничего не разобрать. Откройте страницу с компьютера или планшета - там схема доступна целиком.

НЕ (NOT)

Пара транзисторов: верхний открывается нулём и тянет выход к питанию, нижний открывается единицей и тянет к земле. Открыт всегда ровно один - отсюда и берётся переворот.

Выход 0
Задание

Вентиль И: зажгите выход. Подсказка - тут работает правило «оба или никто».

0 / 8 заданий решено
  1. Вентиль И: зажгите выход. Подсказка - тут работает правило «оба или никто». Выход И загорается единственным способом: единицы на обоих входах. Из четырёх строк таблицы это одна.
  2. Вентиль ИЛИ: зажгите выход, включив только один вход. ИЛИ хватает любого одного входа. Из четырёх строк таблицы выход горит в трёх - гаснет только тогда, когда оба входа выключены.
  3. Вентиль НЕ: погасите выход. Второй тумблер здесь не работает - у НЕ один вход. Ноль на выходе получается из единицы на входе: транзистор открылся и замкнул выход на землю.
  4. XOR: зажгите выход. Одинаковые входы тут не годятся. XOR выявляет несовпадение: единица ровно тогда, когда входы разные. Отсюда он и попал в сумматор - бит суммы ведёт себя точно так же.
  5. XOR: теперь погасите выход, но так, чтобы оба входа были включены. Два включённых входа для XOR - это согласие, а согласие даёт ноль. Именно поэтому 1 + 1 в сумматоре даёт ноль в разряде суммы.
  6. И-НЕ: зажгите выход, включив оба входа. Получится? Не получится: у NAND два включённых входа - единственный случай, когда выход гаснет. Зажечь его можно любой другой комбинацией, и задание зачтётся именно на ней.
  7. Полусумматор: сложите 1 и 1. Выход суммы должен погаснуть, а перенос - загореться. Вот оно: 1 + 1 в двоичном виде это «10». Ноль остаётся в разряде, единица уходит в следующий. XOR погасил сумму, AND зажёг перенос - оба смотрели на одни и те же провода.
  8. Полусумматор: сложите 1 и 0 - сумма должна загореться, а перенос остаться нулём. Разные входы дают единицу суммы и нулевой перенос: переносить нечего. Ровно три из четырёх случаев сложения выглядят именно так.
Таблица истинности: НЕ (NOT)
Вход A Выход
0 1
1 0

Пара транзисторов: верхний открывается нулём и тянет выход к питанию, нижний открывается единицей и тянет к земле. Открыт всегда ровно один - отсюда и берётся переворот.

Числа транзисторов - типовые для КМОП-логики и приведены как в статье: NAND и NOR по четыре, И и ИЛИ по шесть. Реальные библиотеки элементов у каждого производителя свои, но соотношение сохраняется - поэтому схемы и строят на NAND.

// сумматор

Полусумматор - это два вентиля, которые смотрят на одни и те же два провода: XOR выдаёт бит суммы, AND выдаёт бит переноса. Соедините такие блоки цепочкой - и получится сложение многоразрядных чисел. Наберите слагаемые разрядами и жмите «шаг»: перенос пойдёт справа налево, из разряда в разряд.

Нажимайте на разряды A и B, чтобы менять числа. Пока идёт сложение, разряды заперты - как и в схеме, где числа уже поданы на входы.

перенос
A
B
сумма 1 0 0 0

Числа поданы на входы, но ни один разряд ещё не сложен. Сложение идёт с младшего разряда: у самого правого полусумматора входов только два, потому что переносить в него неоткуда.

Разряд сложен без переноса: входы разные или оба нулевые, XOR выдал бит суммы, AND промолчал. Следующему разряду ничего не передаётся.

Единица ушла в следующий разряд. Именно ради этого случая полусумматору и нужен второй вентиль: 1 + 1 в двоичном виде это «10», ноль пишем, единицу переносим. Дальше разряду нужны уже три входа - A, B и перенос, - и такая схема называется полным сумматором.

Все разряды сложены. Именно такая цепочка и работает в арифметико-логическом устройстве процессора: восемь блоков подряд складывают 8-битные числа, 64 блока - 64-битные. Реальное АЛУ сложнее: там есть ускоренный перенос, вычитание, умножение и сравнение, - но принцип тот же.

Перенос ушёл за последний разряд, а девать его некуда: разрядность задана железом. Результат остался в тех разрядах, что есть, старшая единица потерялась. В процессоре такой случай отмечается флагом переполнения, и дальше уже программа решает, что с этим делать.

// память из двух вентилей

Защёлка: схема, которая помнит после снятия сигнала

Вентиль - проходная схема: убрали сигнал, и результата нет. Но если замкнуть два вентиля ИЛИ-НЕ в петлю - выход каждого на вход другого, - схема начинает держать состояние сама. Подайте сигнал, снимите его и посмотрите, что останется на выходе.

0 что помнит защёлка
1 обратный выход
Записываем ноль состояние петли
0 / 6 заданий пройдено
  1. Запишите в защёлку единицу.
  2. Снимите оба сигнала и убедитесь, что единица осталась.
  3. Перезапишите защёлку в ноль.
  4. Снова снимите сигналы: ноль тоже держится сам.
  5. Подайте оба сигнала сразу и посмотрите на выходы.
  6. Снимите оба после запрещённого сочетания - и увидите, почему его запрещают.
Все сочетания сигналов

Запомни 1 подан, Запомни 0 снят: Q = 1, обратный выход = 0 - Записываем единицу.

Запомни 1 снят, Запомни 0 подан: Q = 0, обратный выход = 1 - Записываем ноль.

Запомни 1 снят, Запомни 0 снят: Q = как было, обратный выход = как было - Держит сама.

Запомни 1 подан, Запомни 0 подан: Q = 0, обратный выход = 0 - Запрещённое сочетание.

Это простейшая защёлка, без такта. В процессоре к петле добавляют вход разрешения записи, чтобы бит менялся ровно в момент такта - тогда схему называют триггером.

Интерактив разработан - ремонт компьютеров и ноутбуков в Барановичах. © 2008-2026. Источник: any.by/demo/logicheskie-ventili