Двоичный сумматор на логических микросхемах

June 26, 2010 by admin Комментировать »

Заметим сразу, что схема этого устройства в том виде, в котором мы ее сей­час будем конструировать, сама по себе довольно бесполезна — если вы, ко­нечно, не хотите повторить подвиг советского конструктора Михаила Алек­сандровича Карцева. Он создал в 1970-х годах на микросхемах малой степени интеграции (то есть фактически на отдельных логических элементах) очень удачную ЭВМ под названием М-10, отличившуюся тем, что отдельные ее экземпляры в нашем оборонном комплексе, по слухам, продержались аж до начала нового тысячелетия. При желании повторить такой подвиг, учтите, что основная проблема, которую вам придется решать, состоит вовсе не в том, чтобы такую машину сконструировать схемотехнически — это не самая трудная часть работы. Самое трудное для подобных суперконструкций — решить проблему отвода тепла, выделяемого сотнями тысяч быстродейст­вующих логических микросхем. Суперкомпьютеры Cray на дискретных эле­ментах, выпускаемые в 1980-х годах, даже имели водяное охлаждение.

Наконец, если очень хочется, то готовый двоичный сумматор есть в инте­гральном исполнении (561ИМ1; есть сумматоры и помощнее). Зачем же мы тогда будем его конструировать? А затем, что его устройство очень хорошо иллюстрирует две вещи: во-первых, само применение логических микросхем, во-вторых— разве не любопытно знать, как устроен самый главный узел компьютера, арифметико-логическое устройство, АЛУ? Знание этого вам очень пригодится для лучшего понимания работы микроконтроллеров и принципов их пррграммирования. Кроме того, мы на этом примере познако­мимся еще с одним важным типом логических элементов.

Итак, вспомним, что нам, собственно, нужно делать — а именно воспроизвести таблицу сложения двоичных чисел, которая была показана для одноразрядных чисел в предыдущей главе. Так как при сложении единиц получается двухраз­рядное число, то перепишем эту таблицу в двухразрядном представлении:

Вх1

8×2

Вых

0

0

00

0

1

01

1

0

01

1

1

10

Теперь разобьем таблицу на две: одну для разряда собственно суммы, другую для значения переноса в следующий разряд:

Сумма

Перенос

Вх1

Вх2

Вых

Вх1

Вх2

Вых

0

0

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

0

1

1

0

1

1

1

Сравним вторую таблицу с таблицей состояний для базовых логических функций (я их повторю, чтобы не приходилось листать книгу):

«или»

«и»

Вх1

Вх2

Вых

Вх1

Вх2

Вых

0

0

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

0

1

1

1

1

1

1

Для переноса имеем полное совпадение с функцией «И». То есть для того чтобы обеспечить перенос, нам нужен всего лишь один логический элемент «И», который получается комбинированием стандартного «И-НЕ» с инверто-ром^ Хуже с разрядом суммы: первые три значения обеспечивает элемент «ИЛИ», однако при сложении единиц возникает несоответствие (логическое и арифметическое сложения, как мы говорили, не адекватны друг другу). Нужен специальный элемент, который мог бы получить название «элемент несовпадения»: в самом деле, у него логическая единица на выходе тогда, когда входы имеют разное состояние, а если они одинаковы — на выходе ноль. Для того чтобы его сконструировать, взглянем на таблицу истинности элемента «И-НЕ» (для наглядности я повторю и ее):

«И-НЕ»

Вх1

8×2

Вых

0

0

1

0

1

1

1

0

1

1

1

0

Сравним таблицы «ИЛИ», «И-НЕ» и необходимой нам суммы: в первом слу­чае мы получаем то, что надо, в верхних трех строках, во втором — в ниж­них. Как бы их объединить? Да очень просто — через функцию «И»:

Сумма

8×1

8×2

Вых

Вых

«или» ж «И-НЕ»

«ИЛИ»

«И-НЕ»

(«Исключающее ИЛИ»)

0

0

0

1

0

0

1

1

1

1

1

0

1

1

1

1

1

1

0

0

Логический элемент с такой функцией «несовпадения» носит специальное название — «Исключающее ИЛИ». Существует и обратный элемент «совпа­дения», который представляет собой инверсию выхода «Исключающего ИЛИ» и носит название «Включающего ИЛИ».

clip_image002

clip_image004

Исключающее

или

Вх1

Вх2

Вых

0

0

0

0

1

1

1

0

1

1

1

0

Рис. 15.5. Варианты реализации элемента «Исключающее ИЛИ» и его таблица истинности

Обозначение элемента «Исключающее ИЛИ» уже было показано на рис. 15.3. Как можно его составить из элементов «И-НЕ» и «ИЛИ-НЕ», показано на рис. 15.5. Верхний вариант полностью соответствует нашим рассуждениям и потребует двух корпусов микросхем, а нижний вариант — пример того, как можно построить «Исключающее ИЛИ» с использованием только одного ти­па элементов, в данном случае — «И-НЕ». Он более экономичен, так как по­требует всего одного корпуса типа 561ЛА7. Попробуйте построить таблицу истинности для второго варианта, и вы убедитесь, что он работает «как зака­зывали» (есть и много других способов). Отметьте, что в первом варианте специальных элементов-инверторов мы не используем, а с целью экономии корпусов микросхем образуем их из элементов «И-НЕ» или «ИЛИ-НЕ» путем объединения входов — обычно так и поступают.

В любой логической серии есть, разумеется, и специальные микросхемы «Исключающее ИЛИ» (561ЛП2). Элемент «Исключающее ИЛИ», помимо способности выдавать сумму одноразрядных чисел, обладает многими инте­ресными свойствами, к которым мы обратимся далее, а пока вернемся к сум­матору.

clip_image006

clip_image008

Рис. 15.6. Схема одноразрядного полусумматора

На самом деле одноразрядный сумматор мы уже построили. Его схема при­ведена на рис. 15.6 вверху. Внизу на рис. 15.6 мы обозначили все устройство одним квадратиком. Однако почему там написано «полусумматор»? Такой. одноразрядный сумматор носит название полусумматора, потому что он не «умеет» одной важной вещи, а именно: разряд переноса-то он выдает, а вот учесть перенос от предыдущего разряда он не может. Поэтому, чтобы скла­дывать многоразрядные числа по-настоящему, нужно в каждом разряде по­ставить по два таких полусумматора, причем объединить их выходы перено­сов через «ИЛИ» (рис. 15.7).

clip_image010

Рис. 15.7. Схема многоразрядного сумматора

Так мы получили одноразрядный полный сумматор. Объединением таких сумматоров несложно соорудить устройство для сложения чисел любой раз­рядности. Если вы попробуете разрисовать схему сумматора для, скажем, восьми разрядов полностью, с использованием принципиальных схем логи­ческих элементов по рис. 15.1, то ужаснетесь — это же сколько транзисторов надо, чтобы построить такое устройство? Много — в восьмибитном КМОП-сумматоре их получается 480 штук (а современные микросхемы, бывает, со­держат и больше транзисторов). И это без учета того, что в систему должны входить еще, как минимум, два регистра для хранения исходных чисел и ре­зультата (в целях экономии результат помещают в регистр одного из слагае­мых, тем самым слагаемое это уничтожая), а также другие логические схемы (для сдвига, для инверсии битов при манипуляции с отрицательными числа­ми). То есть общее количество транзисторов составляет порядка тысячи.

Теперь понятно, почему микросхемы высокой степени интеграции содержат миллионы транзисторов и почему проблема отвода тепла стоит так остро! Один логический элемент КМОП из четырех транзисторов, согласно рис. 15.2, выделяет при частоте в единицы мегагерц всего-навсего пол милли­ватта тепла, но что будет, если таких элементов приходится ставить в коли­честве миллион штук? И еще при этом как можно сильнее повышать рабо­чую частоту?

Сумматоры, построенные по описанной схеме, выпускают, естественно, в интегральном исполнении (в «классической» КМОП это микросхема четы­рехразрядного сумматора 561ИМ1, есть и схема более универсального АЛУ— 561ИПЗ). В связи с многоразрядным сумматором возникает только один вопрос: а что делать с входом переноса самого первого, младшего раз­ряда? Если просто складываем двоичные числа разрядности, соответствую­щей возможностям нашего сумматора (например, восьмиразрядные, то есть длиной в один байт), то вход переноса младшего разряда присоединяется к логическому нулю. Соответственно, выход переноса старшего разряда оста­ется «висеть в воздухе». Легко сообразить, что при этом, если мы складываем числа, в сумме составляющие более величины диапазона, старший разряд суммы «потеряется». Это явление при всей своей очевидности стоит того, чтобы разобрать его подробнее.

Предположим, мы имеем такой байтовый сумматор и под числами имеем в виду обычные беззнаковые положительные числа, диапазон которых соста­вит 0—255. Если мы сложим 128 (1000 0000) и 128 (1000 0000), то получим число 256 (1 0000 0000), которое имеет единицу в 9-м, отсутствующем у нас разряде (заодно отметим этот результат как хорошую иллюстрацию к поло­жению, гласящему, что умножение на 2 есть просто сдвиг всех разрядов вле­во). Таким образом, в разрядах сумматора мы получаем просто О, что, конеч­но, есть результат некорректный, для корректного сложения, к примеру, восьмибитовых чисел нам надо иметь 9 разрядов результата.

А как наращивать разряды, если, например, в микроконтроллере все регист­ры восьмиразрядные? Да очень просто — надо взять два таких регистра и соединить выход переноса одного со входом переноса другого. Тогда мы по­лучим двубайтовое число (или «слово», как его чаще называют). В микро­процессорах, в том числе и в микроконтроллерах, мы, конечно, физически такое объединение сделать не можем — схема уже сделана заранее, но в них зато есть специальный бит переноса (сапу bit), в который автоматически по­мещается перенос в результате операций сложения, умножения и, кстати, вычитания и деления тоже.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты