Для переноса имеем полное совпадение с функцией «И». То есть, для того чтобы обеспечить перенос, нам нужен всего лишь один логический элемент «И», который получается комбинированием стандартного «И-НЕ» с инвертором[21]
. Хуже с разрядом суммы: первые три значения обеспечивает элемент «ИЛИ», однако при сложении единиц возникает несоответствие (логическое и арифметическое сложения, как мы говорили, не адекватны друг другу). Нужен специальный элемент, который мог бы получить названиеСравним таблицы «ИЛИ», «И-НЕ» и необходимой нам суммы: в первом случае мы получаем то, что надо, в верхних трех строках, во втором — в нижних. Как бы их объединить? Да очень просто — через функцию «И»:
Логический элемент с такой функцией «несовпадения» носит специальное название — «Исключающее ИЛИ». Существует и обратный элемент «совпадения», который представляет собой инверсию выхода «Исключающего ИЛИ» и носит название «Включающего ИЛИ».
Обозначение элемента «Исключающее ИЛИ» уже было показано на рис. 15.3. А как можно его составить из элементов «И-НЕ» и «ИЛИ-НЕ», показано на рис. 15.5.
Рис. 15.5.
Верхний вариант полностью соответствует нашим рассуждениям и потребует двух корпусов микросхем, а нижний вариант — пример того, как можно построить «Исключающее ИЛИ» с использованием только одного типа элементов, в данном случае — «И-НЕ». Он более экономичен, т. к. потребует всего одного корпуса типа 561ЛА7. Попробуйте построить таблицу истинности для второго варианта, и вы убедитесь, что он работает «как заказывали» (есть и много других способов). Отметьте, что в первом варианте специальных элементов-инверторов мы не используем, а с целью экономии корпусов микросхем образуем их из элементов «И-НЕ» или «ИЛИ-НЕ» путем объединения входов — обычно так и поступают.
В любой логической серии есть, разумеется, и специальные микросхемы «Исключающее ИЛИ» (561ЛП2). Элемент «Исключающее ИЛИ», помимо способности выдавать сумму одноразрядных чисел, обладает многими интересными свойствами, к которым мы обратимся далее, а пока вернемся к сумматору.
На самом деле одноразрядный сумматор мы уже построили. Его схема приведена на рис. 15.6
Рис. 15.6.
Однако почему там написано «полусумматор»? Такой одноразрядный сумматор носит название полусумматора, потому что он не «умеет» одной важной вещи, а именно: разряд переноса-то он выдает, а вот учесть перенос от предыдущего разряда не может. Поэтому, чтобы складывать многоразрядные числа по-настоящему, нужно в каждом разряде поставить по два таких полусумматора, причем объединить их выходы переносов через «ИЛИ» (рис. 15.7).
Рис. 15.7.
Так мы получили одноразрядный полный сумматор. Объединением таких сумматоров несложно соорудить устройство для сложения чисел любой разрядности. Если вы попробуете нарисовать схему сумматора для, скажем, восьми разрядов полностью с использованием принципиальных схем логических элементов по рис. 15.1, то ужаснетесь — это же сколько транзисторов надо, чтобы построить такое устройство? Много — в восьмибитном КМОП-сумматоре их получается 480 штук (а современные микросхемы, бывает, содержат и больше транзисторов). И это без учета того, что в систему должны входить еще, как минимум, два регистра для хранения исходных чисел и результата (в целях экономии результат помещают в регистр одного из слагаемых, тем самым слагаемое это уничтожая), а также другие логические схемы (для сдвига, для инверсии битов при манипуляции с отрицательными числами). То есть общее количество транзисторов составляет порядка тысячи.
Теперь понятно, почему микросхемы высокой степени интеграции содержат миллионы транзисторов и почему проблема отвода тепла стоит так остро! Один логический элемент КМОП из четырех транзисторов выделяет, согласно рис. 15.2, при частоте в единицы мегагерц всего-навсего полмилливатта тепла, но что будет, если таких элементов приходится ставить в количестве миллион штук? И еще при этом как можно больше повышать рабочую частоту?