Вентили, которые не протекают.Сумматор (Часть 3)
- Халиуллин Марсель
- 30 янв. 2016 г.
- 5 мин. чтения

В этой заключтельной части короткого цикла статей про выполнение простейших арифметических операций на логическом уровне мы опишем устройство и процесс работы двоичного сумматора — логической схемы, совершившей революцию во всех сферах деятельности человека.
Для того, чтобы заставить машину складывать двоичные числа, мы должны сами научится этой тривиальной в компьютерном мире задаче.
Но что такое система исчисления с основанием «2»? Ответ на этот вопрос можно найти в повседневно используемой нами десятичной системе. Как это видно из названия, десятичная система имеет основание «10», то есть имеет в своем арсенале 10 цифр, используемых для записи чисел [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]. Что же мы делаем, когда хотим записать число, большее «9»?
Для начала представим, что мы попали на программу «Поле чудес» и видим стену-табло, на которой вместо привычных пустых ячеек для букв на них мы видим нули; положим, у нас всего 9 свободных ячеек. Изменим немного правила игры. Вы — единственный участник, нет Леонида Аркадьевича и фальшивых аплодисментов, овощей в сундуках и бездарных детей. Только вы и барабан, который за каждый цикл прокрутки будет увеличивать значение на табло ровно на единицу.

Сначала это кажется вам скучным, цифры на крайней правой ячейке сменяются в привычном порядке: «ноль», «один», «два»...

Тут вы доходите до последней цифры «девять» и приходите в замешательство, ведь после нее никаких цифр то и нет.

Тут вы собираете волю в кулак и совершаете прыжок в математическую неизвестность.
«Девятка» снова становится «нулем». Можно сказать, что ячейка совершила один круг. Но что же изменилось? Ячейка левее изменила свое значение на единицу.

И в зависимости от количества кругов, сделанных ячейкой, ячейка слева будет отображать количество прокруток, причем ровно до тех пор, пока сама не совершит круг. Тогда ячейка левее этой станет изменять свое значение. В этом и кроется суть десятичной системы: для совершения одного круга нам необходимо последовательно крутить барабан (то есть прибавлять единицу) десять раз.
Теперь еще немного изменим правила. Представим, что вы — дельфин, и всю жизнь жили среди дельфинов, и учились в дельфиньей школе. У дельфинов, в отличие от людей, нет пальцев, и вместо них вы всю жизнь использовали свои ласты. Эта анатомическая особенность обусловила ваши особенности счета — теперь вместо десяти пальцев у вас только две ласты. Как изменятся ваши арифметические предпочтения? Теперь возле барабана вы в облике дельфина. В дельфиньем «Поле чудес» конфуз случится раньше — один раз прокрутить барабан хватит для того, чтобы ячейка приобрела свое максимальное значение.

А в этом суть двоичной системы: для достижения того же самого результата (изменение значения соседней ячейки слева на единицу) барабан должен прокрутиться всего лишь два раза.
Компьютеры в нашем мире подобны дельфинам. Они, подобно им, используют лишь две цифры, или точнее, два состояния ячейки — есть ток и нет тока. Состояние ячейки будет зависеть от всей плеяды вентилей, соединенных с этой ячейкой, и входов этих вентилей. Давайте взглянем теперь на таблицу сложения двоичных чисел.

Можно сделать иначе и представить результат сложения двухбитовой величиной.

Теперь дадим названия каждому биту в полученных двоичных числах. Первый бит (тот, что правее) носит название разряда суммы, а другой — разряда переноса. Давайте составим таблицы и для них.


Рассматривать двоичное сложение с позиций разряда суммы и переноса очень удобно, так как в нашем сумматоре сложение будет выполняться именно по такому принципу.
Но как реализовать это с помощью вентилей? Дóлжно вспомнить, что выходы некоторых логических вентилей при определенных состояниях входов совпадают с таковыми у вышеперечисленных разрядов суммы и переносов.
Несложно заметить, что разряд переноса похож на простой вентиль И.

С разрядом суммы ситуация посложнее. С одной стороны он похож на вентиль ИЛИ

с другой — на вентиль И-НЕ

Давайте попробуем задействовать их в одной схеме

Как мы видим, в этой схеме целых два выхода, но ей еще далеко до сумматора. Посмотрим на таблицу

Из таблицы видно, что нам нужна единица на выходе, когда входы на А и В имеют разное значение. Добиться этого результата можно просто соединив выходы обоих вентилей со входом еще одного вентиля И.

И здесь мы приходим к последнему вентилю — вентиль Искл-ИЛИ.

Он особенно интересен тем, что его выход равен «1» тогда и только тогда, когда входы различаются по значению. Если прокрутить страницу вверх и снова взглянуть на таблицу для разряда суммы и взглянуть на таблицу для вентиля Искл-ИЛИ

то можно с легкостью заметить, что выходы вентиля работают по такой же схеме, как происходит сложение на разряде суммы.
Теперь, когда мы нашли компоненты, ответственные за получение разрядов суммы и переноса, соединим их.

Полученная нами схема имеет свое название — полусумматор. Давайте придумаем ему обозначение.

Мы почти у цели, но сделанный нами полусумматор имеет один явный недостаток. Приставку «полу-» полусумматор и получил потому, что не учитывает результата переноса, складывает только «вполсилы». Действительно, когда мы складываем большие числа, нередко возникает ситуация, когда нам нужно перенести некоторое число для сложения с другими разрядами, т.е. складываются сразу три числа.

В этом примере как раз так и происходит. Левый крайний столбец дает единицу в перенос на следующий разряд, в котором уже и так есть две единицы на сложение, то есть по сути мы складываем сразу три числа.
Как видно из схемы, на такие манипуляции полусумматор не способен.
Немного дополним нашу вычислительную «машинку».

Теперь у нас есть три входа и по идее мы можем складывать три числа. Проанализируем ее работу. Биты с входов А и В суммируются, сумма отправляется во второй полусумматор, а перенос идет на вентиль ИЛИ. Сумма, получившаяся в первом полусумматоре, складывается с переносом с предыдущего разряда. В итоге, со второго полусумматора выходит настоящая сумма, а перенос также отправляется на вентиль ИЛИ, а уже с вентиля выходит сам перенос. У этой схемы также есть название — полный сумматор.

Можно более подробно проследить работу полного сумматора, следуя нижеприведенной таблице.

Хоть один полный сумматор и способен полноценно складывать, их нужно по крайней мере несколько для сложения многозначных чисел. Построим восьмибитный сумматор, способный складывать двоичные числа, длиною восемь цифр

Как мы видим, результатом сложения может получиться девятизначное число, поэтому была добавлена девятая лампочка.
Первый сумматор в каскаде будет выглядит так

Вход для переноса мы соединили с землей, то есть он всегда равен нулю (оно и понятно, никакого переноса на первый разряд переноситься никак не может; но этот самый перенос может получиться уже после сложения чисел в первом разряде).
Следующий элемент каскада

Здесь уже вход для переноса соединен с выходом для переноса предыдущего сумматора.
И, наконец, последний сумматор

Выход для переноса здесь соединяется с последней девятой лампочкой. Взглянем же на проделанную нами тяжелую мысленную работу!

Маленькая легенда: CI (Carry In) — вход для переноса; S (Sum) — сумма; CO (Carry Out) — выход для переноса.Проследим же за работой этого двоичного калькулятора. Первый вход для переноса передает нуль, т.к. он заземлен. Результат сложения отправляется на первую лампочку, а перенос идет на вход для переноса второго сумматора, где он складывается со входами А и В. Процесс повторяется на каждом сумматоре. Результатом сложения двух двоичных чисел является ряд горящих и негорящих лампочек. Можно нарисовать это компактнее и красивее.

Мало того, что он сам по себе хорош, так его еще можно объединять с другими такими же сумматорами, получая целый каскад.

Для интересующихся: в современных быстродействующих сумматорах с помощью дополнительной цепи реализован так называемый ускоренный перенос, вышеописанный способ называется сквозным. Кроме того, в современных компьютерах не используются реле! Теперь вместо них используют транзисторы, которые во много раз меньше и быстрее реле.Вот мы и подошли к концу увлекательного путешествия по вентилям, конечной точкой которых стал сумматор. И неизвестно, сколько голов одновременно ломали умнейшие планеты нашей, сколько неудавшихся экспериментов предшествовало этой идее. Хоть сегодня нами изобретен и в высшей степени известен процесс суммирования, от этого он не перестает оставаться чудом, завораживающим своей кристальной логичностью, простотой в понимании и сложностью в полном обхвате.
Comments