Логические элементы и узлы
В настоящее время фундаментом всех компьютерных устройств являются двоичные электронные логические элементы. Поэтому понимание базовых идей их функционирования для представления об общей логике работы компьютера трудно переоценить.
Логические элементы
Может показаться, что для реализации сложных логических функций требуется большое разнообразие логических элементов. Тем не менее из теории логических функций следует, что достаточно очень небольшого базового набора, чтобы с помощью различных комбинаций, его составляющих, можно было получить абсолютно произвольную функцию (такой набор называется полным 1). Базисный набор может быть сформирован различными способами, но чаще всего используется классическая “тройка” логических операций И, ИЛИ, НЕ. Именно эта “тройка” применяется в книгах по логике, а также во всех языках программирования: от машинных кодов до языков высокого уровня. Обозначения логических элементов 2, реализующих соответствующие операции, показаны на схемах a–c. Соответствующие им таблицы истинности приведены в статье “Логические операции. Кванторы”.
Часто к указанному списку добавляют еще элемент “исключающее ИЛИ” (схема d), который позволяет сравнивать двоичные коды на совпадение. Данная операция имеет и другие практически полезные свойства, в частности, восстанавливает исходные данные в случае повторного применения, что удобно использовать, например, для временного наложения видеоизображений.
Классический базис не является единственным. Более того, на практике инженеры предпочитают альтернативный вариант на основе единственного комбинированного логического элемента И-НЕ (схема e). Несложно показать, что из элементов И-НЕ можно построить все примитивы классического базиса 3.
Отметим, что на практике логические элементы могут иметь не только два, но и значительно большее количество входов (для примера см. схему на с. 4).
Внутренняя электронная схема логического элемента может быть различной, более того, она может существенно совершенствоваться по мере развития технологий производства.
Изготовление логических микросхем прошло огромный путь — от одиночных логических элементов до больших интегральных схем (БИС) вплоть до микропроцессора. Уровень сложности БИС таков, что разобраться в их внутреннем устройстве для неспециалиста не то что нецелесообразно, а просто невозможно. В результате для понимания наиболее общих принципов работы современной ЭВМ удобнее и правильнее рассмотреть несколько типовых узлов, а изучение поведения отдельных БИС заменить изучением функциональной схемы компьютера.
В качестве характерных цифровых узлов выберем два наиболее важных и интересных — сумматор и триггер. Первый из них замечателен тем, что составляет основу арифметико-логического устройства процессора, а второй, будучи универсальным устройством для хранения одного бита информации, имеет еще более широкое применение — от регистров процессора до элементов памяти. Подчеркнем, что выбранные логические схемы принадлежат к разным типам. Так, выходные сигналы сумматора определяются исключительно установившимися на входе напряжениями и никак не зависят от поступавших ранее сигналов (в литературе такие схемы называют комбинационными). Состояние триггера, напротив, зависит от предыстории, т.е. схема имеет память.
Рассмотрим логическую схему сумматора. Для простоты ограничимся изучением работы отдельного двоичного разряда. В этом случае сумматор будет содержать три входа — бит первого слагаемого А, второго — В и перенос из предыдущего разряда Ci (обозначение происходит от английских слов Carry in — входной перенос), и два выхода — результирующая сумма S и выходной перенос Co (Carry out). Таблица истинности для полного одноразрядного сумматора имеет вид:
При построении практической схемы оказывается удобным сумматор представить в виде двух полусумматоров, первый из которых складывает разряды А и В, а второй к полученному результату прибавляет бит переноса из предыдущего разряда Ci. Таблица истинности для полусумматора значительно упрощается:
Несложный анализ таблицы показывает, что для реализации полусумматора достаточно соединить параллельно входы двух логических элементов: И и исключающее ИЛИ (см. схему a). Если скомбинировать два полусумматора, как показано на схеме b, то получится полный сумматор, способный осуществить сложение одного бита чисел с учетом возможности переноса.
Перейти к многоразрядным числам можно, например, путем последовательного соединения соответствующего количества сумматоров. Мы не будем обсуждать возникающие при этом проблемы ускорения процесса переноса в такой схеме: для того чтобы иметь некоторое представление о том, как компьютер производит вычисления, полученных знаний уже достаточно.
Стоит особо подчеркнуть, что сумматор играет важную роль в реализации не только сложения, но и других арифметических действий — он фактически является основой арифметического устройства современного компьютера.
Его схема приведена на рисунке, а таблица истинности имеет следующий вид:
Как видно из схемы выше, триггер собран из четырех логических элементов И-НЕ, причем два из них играют вспомогательную роль инверторов входных сигналов. Триггер имеет два входа, обозначенные на схеме R и S, а также два выхода, помеченные буквой Q, — прямой и инверсный (черта над Q у инверсного выхода означает отрицание). Триггер устроен таким образом, что на прямом и инверсном выходах сигналы всегда противоположны.
Как работает триггер? Пусть на входе R установлена 1, а на S — 0. Логические элементы D1 и D2 инвертируют эти сигналы, т.е. меняют их значения на противоположные. Поскольку на одном из входов D4 имеется 0, независимо от состояния другого входа на его выходе обязательно установится 1. Эта единица передается на вход элемента D3 и в сочетании с 1 на другом входе порождает на выходе D3 логический 0. Итак, при R = 1 и S = 0 на прямом выходе триггера устанавливается 0, а на инверсном — 1.
Обозначение состояния триггера по договоренности связывается с прямым выходом. Тогда при описанной выше комбинации входных сигналов результирующее состояние можно условно назвать нулевым: говорят, что триггер устанавливается в 0 или сбрасывается. Сброс по-английски называется Reset, отсюда вход, появление сигнала на котором приводит к сбросу триггера, принято обозначать буквой R.
Аналогичные рассуждения для “симметричного” случая R = 0 и S = 1 приводят к тому, что, наоборот, на прямом выходе получится логическая 1, а на инверсном — 0. Триггер перейдет в единичное состояние — установится (установка по-английски Set).
Проанализировав состояние схемы при отсутствии входных сигналов (рекомендуем читателям проделать это самостоятельно), убедимся, что триггер сохраняет свое “предыдущее” состояние, а значит, может служить устройством для хранения одного бита информации.
Комбинация входных сигналов R = 1 и S = 1 приводит к тому, что в этом случае на обоих выходах триггера установится 1! Такое состояние, помимо своей логической абсурдности, еще и является неустойчивым: после снятия входных сигналов триггер случайным образом перейдет в одно из своих устойчивых состояний. Вследствие этого комбинация R = 1 и S = 1 на практике не используется и является запрещенной.
Мы рассмотрели простейший RS-триггер. Существуют и другие разновидности этого интересного и полезного устройства. Все они различаются не столько принципом работы, сколько входной логикой, усложняющей “поведение” триггера.
Подобно тому, как объединяются для обработки двоичных чисел однобитовые схемы сумматоров, для хранения многоразрядных данных триггеры объединяются в единый блок, называемый регистром. Над регистром, как над единым целым, можно производить ряд стандартных операций: сбрасывать (обнулять), заносить в него код и некоторые другие. Часто регистры способны не просто хранить информацию, но и обрабатывать ее. Примером такого типа может служить регистр, который способен сдвигать находящийся в нем двоичный код, или регистр, подсчитывающий количество поступающих импульсов, — счетчик.
С выходов триггеров регистра сигналы могут поступать на другие цифровые устройства. Особый интерес с точки зрения принципов функционирования компьютера представляет схема анализа равенства (или неравенства) регистра нулю, которая позволяет организовать по этому признаку условный переход. Для n-разрядного двоичного регистра потребуется n-входовый элемент И (см. схему), сигналы для которого удобнее снимать с инверсных выходов триггеров. Фактически такая схема анализа выполняет комбинированную логическую операцию НЕ-И.
z = 0 — результат равен 0
z = 1 — результат не равен 0
В самом деле, пусть содержимое всех битов регистра равно 0. Тогда на входы элемента И с инверсных выходов триггеров поступают все 1 и результат z = 1. Если хотя бы один из разрядов отличен
от 0, то с его инверсного выхода снимается 0 и этого, как известно, уже достаточно, чтобы получить выходной сигнал z = 0 независимо от состояния всех остальных входов элемента И.
Заметим, что проверку знака числа реализовать еще проще — достаточно проанализировать состояние знакового (обычно старшего) разряда: если он установлен в 1, то регистр содержит отрицательное число.
Триггеры очень широко применяются в компьютерной технике. Помимо уже описанного применения в составе разнообразных регистров, на их основе могут еще изготовляться быстродействующие ИМС статического ОЗУ (в том числе кэш-память).
Логические узлы как основа устройства компьютера
Мы изучили только два из многочисленных узлов вычислительной техники — сумматор и регистры. Казалось бы, много ли можно понять, зная всего два этих устройства? Оказывается, не так уж и мало. Можно, например, весьма успешно попытаться представить себе, как строится арифметическое устройство процессора. В самом деле, подумаем, каким образом можно спроектировать схему для реализации сложения двух чисел. Очевидно, что для хранения исходных чисел потребуется два триггерных регистра. Их выходы подадим на входы сумматора, так что на выходах последнего сформируются сигналы, соответствующие двоичному коду суммы. Для фиксации (запоминания) результирующего числа потребуется еще один регистр, который можно снабдить описанными выше схемами формирования управляющих признаков. Наша картина получается настолько естественной и реалистичной, что мы можем найти ее в наиболее подробной учебной литературе в качестве основы устройства простых учебных моделей компьютера. В частности, очень похоже выглядит описание внутреннего устройства процессора учебного компьютера “Нейман” 4.
Методические рекомендации
В процессе рассмотрения материала статьи мы прошли путь от изучения простейшего единичного логического элемента до понимания наиболее общих идей построения весьма крупных узлов ЭВМ, таких, как арифметическое устройство. Следующий уровень знакомства с логикой работы компьютера — на уровне функциональных устройств (процессор, память и устройства ввода/вывода), будет подробно изложен в статье “Функциональное устройство”.
В связи с этим особо хотелось бы подчеркнуть важность темы с точки зрения формирования у учеников некоторого единого представления об устройстве компьютера. Мировоззрение складывается не только (а может даже и не столько) в ходе рассуждений “о высоких материях”, но и в результате создания некоторой единой связной картины изучаемого материала. Очень важно, чтобы темы отдельных уроков не казались независимыми, выбранными кем-то по недоступным нам соображениям.
В этом смысле значение вопроса, соединяющего отдельные логические элементы с узлами реального вычислительного устройства, трудно переоценить. Иными словами, ценность материала заключается в том, что он “перекидывает мостик” между разрозненными абстрактными знаниями о логических элементах и устройством реального компьютера. В школьной практике это служит надежным средством борьбы с традиционным “Зачем все это нужно?”.
Ситуация с включением описанного материала в школьный курс информатики согласно опубликованным нормативным документам выглядит, мягко говоря, непрозрачно. В Стандартах и Примерных программах, несмотря на включение всевозможных вопросов математической логики, ни логические элементы, ни логические узлы ниже уровня “процессор–память–устройства ввода/вывода” даже не упоминаются. Зато в рекомендованных Министерством образования билетах выпускного экзамена по информатике четко сформулирован вопрос “Логические элементы и схемы. Типовые логические устройства компьютера: полусумматор, сумматор, триггеры, регистры”.
Если же руководствоваться логикой курса информатики и стремлением сформировать у школьников некоторое общее представление о том, что такое компьютер и как он работает, то необходимость изложения на уроках приведенного в данной статье материала не вызывает никаких сомнений.
1 Андреева Е.В., Босова Л.Л., Фалина И.Н. Математические основы информатики. М.: БИНОМ, Лаборатория Знаний, 2005, 328 с.
2 Ямпольский В.С. Основы автоматики и электронно-вычислительной техники. М.: Просвещение, 1991, 223 с.
3 Токхейм Р. Основы цифровой электроники. М.: Мир, 1988, 392.
4 Информатика. Задачник-практикум в 2 т. / Под ред. И.Г. Семакина, Е.К. Хеннера: Т. 1. М.: Лаборатория Базовых Знаний, 1999.