osnov







В.В.Коштоев, К.К.Кипиани

Основы прикладной теории цифровых автоматов

(учебное пособие)




















Тбилиси
1998




РЕФЕРАТ

ОСНОВЫ ПРИКЛАДНОЙ ТЕОРИИ ЦИФРОВЫх АВТОМАТОВ

В.В. Коштоев, К.К. Кипиани

В учебном пособии "Основы прикладной теории цифровых автоматов" в начале кратко описываются самые общие понятия по информационным основам цифровых автоматов. Далее, с многочисленными примерами, после-довательно рассматриваются:
- распространенные системы счисления и формы представления чисел в цифровых автоматах;
- принципы организации арифметических действий с двоичными и двоично-десятичными числами и организации контроля работы цифрового автомата;
- основы алгебры логики, методы упрощения и минимизации логических функций;
- методы анализа и синтеза логических электронных схем.
Кратко описываются основы теории автоматов, приводятся методы струк-турного синтеза цифровых автоматов.
Рассматриваются общие принципы разработки алгоритмов и алгоритмов аппаратной реализации арифметических действий в цифровых автоматах.
В Приложении систематизировано приводятся определения всех специ-фических понятий и терминов, которые использовались в тексте учебного пособия.
Учебное пособие предназначено для судентов, спеиализирующихся в области вычислительной техники, АСУ и АСИ, а также расчитано на широкий круг специалистов в этих областях.

Объем книги: 155 стр.


ОГЛАВЛЕНИЕ

Предисловие 3

Г л а в а 1. Информационные основы цифровых автоматов 4

1.1. Информация и общие принципы ее преобразования 4
1.2. Обмен информацией между различными информационными
устройствами 7
1.3. Аппаратные средства хранения и обработки информации 8
1.4. Общие понятия о цифровом автомате и алгоритме 9

Г л а в а 2. Представление числовой информации в цифровом автомате 12
2.1. Системы счисления и понятие кода 12
2.2. Выбор системы счисления 15
2.3. Формальные правила двоичной арифметики 15
2.4. Перевод числовой информации из одной позиционной
системы счисления в другую 18

Г л а в а 3. Формы представления чисел в цифровых автоматах 20
3.1. Форма представления чисел с фиксированной запятой 21
3.2. Представление отрицательных чисел в формате
с фиксированной запятой 22
3.3. Форма представления чисел с плавающей запятой 24
3.4. Перевод чисел из формата с фиксированной запятой
в формат с плавающей запятой и обратно 27
3.5. Погрешности представления чисел 29

Г л а в а 4. Арифметические действия с двоичными числами 32
4.1. Сложение двоичных чисел 32
4.1.1. Алгебраическое сложение чисел, представленных в форме
с фиксированной запятой 32
4.1.2. Переполнение разрядной сетки 34
4.1.3. Модифицированный прямой, обратный и дополнительный код 34
4.1.4. Алгебраическое сложение чисел, представленных в форме
с плавающей запятой 35
4.2. Умножение двоичных чисел 36
4.2.1. Методы умножения двоичных чисел 36
4.2.2. Умножение чисел, представленных в форме
с фиксированной запятой 37
4.2.3. Умножение чисел, представленных в форме с плавающей запятой 37
4.2.4. Ускорение операции умножения 38
4.3. Деление двоичных чисел 39
4.3.1. Деление чисел, представленных в форме с фиксированной запятой 39
4.3.2. Деление чисел, представленных в форме с плавающей запятой 42
4.4. Оценка точности выполнения арифметических операций 43
4.4.1. Погрешность округления 44

Г л а в а 5. Выполнение операций над десятичными числами 46
5.1. Представление десятичных чисел в Д-кодах 46
5.2. Формальные правила поразрядного сложения в Д-кодах 46
5.3. Представление отрицательных чисел в Д-кодах 47
5.4. Выполнение операций сложения и вычитания чисел в Д-кодах 48
5.5. Умножение чисел в Д-кодах 48
5.6. Деление чисел в Д-кодах 49
5.7. Перевод чисел из Д-кода в двоичный и из двоичного в Д-код 50

Г л а в а 6. Контроль работы цифрового автомата 51
6.1. Основные понятия теории кодирования 51
6.2. Кодирование по методу четности-нечетности 51
6.3. Коды Хеминга 52
6.4. Контроль по модулю 53
6.5. Контроль арифметических операций 54

Г л а в а 7. Основы алгебры логики 55
7.1. Основные понятия алгебры логики 55
7.2. Свойства элементарных функций алгебры логики 59
7.3. Аналитическое представление функций алгебры логики 61
7.4. Совершенные нормальные формы 64
7.5. Системы функций алгебры логики 66
7.6. Числовое и геометрическое представление логических функций 69

Г л а в а 8. Упрощение и минимизация логических функций 71
8.1. Задача минимизации 71
8.2. Метод Квайна и импликантные матрицы 75
8.3. Метод Карно (диаграммы Вейча) 78

Г л а в а 9. Методы анализа и синтеза логических электронных схем 85
9.1. Логические операторы электронных схем или цепей 85
9.1.1. Задачи анализа и синтеза электронных схем 87
9.2. Синтез логических схем с одним выходом 88
9.3. Электронные схемы с несколькими выходами 94
9.4. Временные булевы функции и последовательностные автоматы 95

Г л а в а 10. Введение в теорию автоматов и структурный синтез
цифровых автоматов 98
10.1 Основные понятия и определения 98
10.2. Методы структурного синтеза и языки описания цифровых автоматов 102
10.3. Элементарный автомат (триггерный элемент) 104
10.4. Синтез цифрового автомата с памятью 195

Г л а в а 11. Алгоритмы рализации арифметических действий
в цифровых автоматах 110

Приложение Определения основных понятий и терминов 145

Литература 153


ПРЕДИСЛОВИЕ

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


Глава 1.

ИНФОРМАЦИОННЫЕ ОСНОВЫ ЦИФРОВЫХ АВТОМАТОВ

1.1. Информация и общие принципы ее преобразования

В основе любой научно-технической, биологической и социальной системы управления и функционирования, а тем более в основе систем вычислительной техники, лежат информационные процессы, связанные со сбором и обработкой информации, ее передачей, хранением, распределением, отображением, регистрацией, считыванием и т.д. Из всех перечисленных информационных процессов в итоге можно выделить четыре основных процесса или процедуры: прием информации, передача, хранение и ее обработка. Реализация всех этих процедур в общем случае сопровождается преобразованием физического носителя информации и формы ее представления.
Информация - понятие очень емкое и трудно поддающееся четкому определению. Не останавливаясь на сложной проблеме строгого фор-мализованного и полного определения понятия информации, примем, что информация есть сведения о тех или иных явлениях или объектах, точнее - сведения об определенных свойствах или параметрах этих явлений или объектов и о зависимостях между этими свойствами. Информация воплощенная и зафиксированная в некоторой материальной форме, называется сообщением, а физическое средство передачи соощения - сигналом. Или иначе: сигнал - это процесс изменения во времени некоторого физического параметра s(t) какого-либо объекта, служащий для отображения, регистрации и передачи сообщения.
Характер изменения сигнала во времени может быть представлен графически, в виде осциллограмы, посредством таблицы, в которую вносятся значения si в i-тые моменты времени; сигнал также может быть описан аналитически.
Для того, чтобы сделать сигнал объектом теоретического изучения и расчетов используют те или иные способы математического его описания, т.е. создают математическую модель сигнала. Причем, при создании такой модели описываются только те свойства сигнала, которые представляются объективно важными и игнорируется большое число второстепенных признаков.
В качестве математической модели сигнала может быть принята, на-пример, функциональная зависимость, аргументом которой является время:
s = f(t). Причем при такой модели имеется в виду, что причиной изменения величины s является не само время, а некоторая другая физическая величина. Поэтому точнее говорить, что обозначая сигнал через s(t), q(t),... принимается модель, описывающая изменение величин s, q,... во времени.
Существуют различного типа сигналы: непрерывные, т.е. аналоговые, сигналы дискретные, квантованные, кодированные (цифровые), модулированные, импульсные и т.д.
Как уже отмечалось, практически при любой обработке информации осуществляются те или иные преобразования сигналов. Преобразования сигналов, в частности, применяются при изменении носителя информации или самой передаваемой функции по определенному закону, обеспечивающему однозначное соответствие между входной функцией и выходной.
В случае непрерывного входного сигнала чаще всего первой процедурой изменения типа сигнала является его дискретизация.
Дискретный сигнал описывается решетчатой функцией (последова-тельностью, временным рядом) X(nt), в которой величина X может принимать любые значения в некотором интервале [X', X"], в то время, как независимая переменная n принимает только дискретные значения n = 0, 1, 2,... t - интер-вал (шаг) дискретизации. Дискретизация непрерывного сигнала s(t) может производиться во времени или по уровню (параметру). Последний случай дискретизации обычно называется квантованием по параметру и он будет рассмотрен отдельно.
Когда дискретизация сигнала s(t) осуществляется во времени, то не-прерывный сигнал s(t) заменяется (представляется) последовательностью импульсных сигналов, амплитуда которых соответствует значениям непрерывного сигнала в дискретные моменты времени nt. В данном случае значение t равно временному интервалу между смежными отсчетами. Тогда fD = 1/t - это циклическая частота дискретизации, а D = 2fD соответствующая круговая частота.
Примем, что сигнал s(t) задан или графически или же таблично, в котору. внесены его значения в пределах периода времени Т через определенные равные интервалы времени, т.е. период Т разделен в этом случае на 2n равных частей (рис.1.1.). Тогда абсциссы точек разбиения будут равны:
tk = (kT)/2n, а ординаты в этих точках:

sk = f(tk ), где k=0,1,2,...,2n.

Здесь sk значение амплитуды сигнала s(t) в k-тый момент времени.
Если для непрерывного сигнала действительно следующее выражение:
s(t) = Smsint, то после дискретизации во времени этот сигнал описывается уравнением:
s(nt) = Smsin nt.


Hbc\ 1\1\

В результате дискретизации исходная функция s(t) заменяется совокупность. отдельных значений sk, по которым можно восстановить исходную функцию s(t) с некоторой погрешностью. Функцию, полученную в результате такого восстановления (интерполяции) называют воспроизводящей. Для представления воспроизводящей функции наиболее часто используются степенные алгебраические полиномы вида
13EMBED Equation.31415,
где n - степень полинома, ai - действительные коэффициенты.
При дискретизации сигналов приходится решать вопрос о том, как часто следует производить отсчеты функции, т.е. каков должен быть шаг дискретизации.
Согласно теореме В.А.Котельникова, если функция s(t) не содержит частот выше некоторой Fm, то она полностью определяется своими мгновенными значениями в моменты времени, отстоящими друг от друга на величину
1/(2Fm ), т.е.
13EMBED Equation.31415,
где k - порядковый номер отсчета функции; t = 1/(2Fm) - шаг дискретизации по времени,sk = s(tk) - мгновенные значения сигнала s(t) в k-ой отсчетной точке tk = k/m = k/(2Fm) = kt.
Из этой теоремы следует, что для однозначного представления функции с ограниченным спектром на интервале времени Т достаточно иметь некоторые n значений этой функции, где

n = T / t = 2FmT.

При выполнении этого равенства (условия) непрерывная и дискретная функции обратимы между собой, т.е. тождественны. Таким образом, произвольный сигнал, спектр которого не содержит частот выше Fm может быть представлен в виде последовательности импульсов, амплитуда которых равна значению исходного сигнала в дискретные моменты времени kt= а интервалы между ними t = 1/(2Fm).
Из приведенной выше формулировки теоремы Котельникова однозначно следует, что для выбора оптимального шага дискретизации необходимо предварительно провести количественные оценки всех значащих гармоник спектрального разложения исходного непрерывного сигнала, для нахождения величины Fm, т.е.m.
Рассмотрим теперь процедуру квантования сигнала по параметру.
В диапазоне непрерывных значений функции f(t) выбирается конечное число дискретных значений функции, распределенных, например, равномерно по всему диапазону. В произвольный момент времени значение функции f(t) заменяется ближайшим дискретным по параметру значением. Тем самым функция приобретает ступенчатый вид (рис.1.2.):

Hbc\1\2\
Шагом квантования по параметру называется разность между соседними дискретными значениями функции. Для равномерного квантования шаг квантования постоянный и равен :

k = (fmax _ fmin)/(q _ 1),

где q - число шагов квантования.
Абсолютная погрешность квантования по параметру может изменяться от 0 до k/2. Тогда среднеквадратичная погрешность квантования при равномерном распределении приведенной погрешности от 0 до 0,5k равна:

k = k/213EMBED Equation.31415.

Когда определенному значению квантованного параметра сигнала ставится в соответствие некоторое число (код) из конечного множества выбранной системы счисления, то выполняется процедура кодирования сигнала. Кодированные таким способом сигналы принято называть цифровыми. Однако надо иметь в виду, что кодированием в широком смысле слова называется любое преобразование сообщения в определенный сигнал путем установления между ними однозначного соответствия.
Цифровой сигнал описывается квантованной решетчатой функцией (квантованной последовательность., квантованным временным рядом) Xw(nt), которая принимает ряд дискретных значений уровней квантования h1, h2, h3,..., hk ,, в то время как независимая переменная n = 0, 1, 2,....Каждому из уровней квантования ставится в соответствие некоторое число и тем самым сигнал кодируется. Поэтому передача или обработка отсчета цифрового кодированного сигнала сводится к операциям над безразмерными числами (кодами). Представление сигнала в цифровой форме практически всегда дает существенное преимущество при передаче, хранении и обработке информации.
Следовательно в данном случае информация кодируется конечным набором символов (цифр, букв), которые выбираются из некоторого конечного алфавита. Любую конечную последовательность символов называют словом в данном алфавите. Метод изображения любых чисел с помощь. ограниченного количества цифр называется системой счисления.
Кодирование аналогового сигнала обычно осуществляется при помощи различного типа аналого-цифровых преобразователей (АЦП). Обратная процедура реализуется цифро-аналоговыми преобразователями (ЦАП). Для преобразования сигналов, в частности, используются также различные модуляторы и демодуляторы, широко применяемые, в так называемых, модемах, при помощи которых компьютеры подключаются к различного типа вычислительным сетям. Часто преобразуют и физическую природу сигнала. В частности, преобразование оптического сигнала в электрический и наоборот, выполняют при помощи различных оптоэлектронных устройств.

1.2. Обмен информацией между различными информационными
устройствами

Обмен информацией между различными устройствами, так или иначе реализующими информационные процессы, т.е. прием и передача информации этими устройствами, обеспечивается так называемыми интерфейсами.
Совокупность все, в основном унифицированных, тенических (аппаратных) и программных средств, обеспечивающих информационное взаимодействие между информационными устройствами (ИУ), называется интерфейсом. Иначе говоря, интерфейс - это совокупность аппаратных и программных средств для организации информационной связи между информационными устройствами.
Информация передается при помощи интерфейса по определенному "протоколу", т.е. с соблюдением определенных правил, характерных для данного интерфеса.
Различают ведущее ИУ (инициатор) и ведомое (исполнитель). Ведущий иницирует обмен информацией (данными), ведомый передает или принимает информацию под управлением ведущего. К основным интерфейсным процедурам, в частности, относятся: арбитраж - запрос и захват ведущим канала связи (магистрали) интерфейса; адресация нужного ведомого; обмен данными, выполняемый по протоколу конкретного интерфейса.
Стандартный интерфейс - это совокупность унифицированных аппаратных, программных и конструктивных средств, необходимых для реализации взаимодействия различных ИУ при условиях, предписанных стандартом и направленных на обеспечение информационной, электрической и конструктивной совместимости этих устройств.
Все перечисленные средства стандартного интерфейса (СИ) должны обеспечить строгое выполнение протокола специфического для данного СИ.
На практике использу.т различные стандартные интерфейсы, например: SCSI, RS-232, CAMAC, VME, MULTIBUS, FASTBUS и т.д.

1.3. Аппаратные средства хранения и обработки информации

Основным аппартным средством любой обработки информации является компьютер, который предназначен для обработки кодированной информации, приема, передачи и хранения ее под управлением соответствующих программ.
Передача и прием информации в компьютерах осуществляется через соответствующие порты, которые соединяют компьютер посредством определенных интерфейсов с его периферией (дисплей, клавиатура, принтер, сканер и т.д.) и с необходимой аппаратурой пользователя. Информация хранится в памяти компьютера.
Память компьютера - это функциональная его часть, предназначенная для запоминания и (или) выдачи различной информации, промежуточных и окончательных результатов обработки информации.
В памяти, в частности, находятся также программы решения определенных задач обработки информации. Вся информация в памяти компьютера представляется символами внутреннего алфавита.
Основными параметрами, характеризующими память, являются емкость памяти и время доступа к ней.
Для построения запоминающих устройств в качестве физических элементов используют электронные схемы, ферритовые магнитные материалы, магнитные ленты и диски, оптические диски и т.д. Оперативное запоминающее устройство (ОЗУ) компьютера обычно формируется из электронных схем. В ОЗУ каждое информационное слово размещается в так называемой ячейке, которой присваивается определенный адрес. При отключении компьютера информация, записанная в ОЗУ, пропадает. При включении компьютера происходит автоматическая перегрузка операционной системы с соответст-вующего магнитного диска в ОЗУ. В памяти на магнитной ленте или на дисках информация группируется в файлы, имеющие определенные имена. Информация, записанная в памяти такого типа, сохраняется при отключении компьютера.
Обработку информации выполняет процессор, или микропроцессор (МП) компьютера, который управляет также всей аппаратурой компьютера в целом, включая внешнюю аппаратуру, подключенную к нему. В состав МП обычно входят следующие основные блоки (узлы):
- арифметическо-логическое устройство (АЛУ);
- ряд регистров, каждый из которых предназначен для хранения одного информационного слова;
- память (ПМП), в которой размещаются микропрограммы, управляющие функциями АЛУ и регистрами МП.
Арифметическо-логическое устройство (АЛУ) - функциональная часть МП, выполняющая логические и арифметические действия, необходимые для обработки информации, хранящейся в памяти компьютера.
АЛУ может выполнять такие элементарные действия, как сравнение, сложение, вычитание, умножение, деление, сдвиги вправо или влево, положительное или отрицательное приращение, инверсию и целый набор элементарных логических операций.
Функции АЛУ определяют архитектуру МП в целом.
Регистры МП участвуют в реализации всех функций МП, в частности функций его АЛУ. Почти все МП имеют шесть основных регистров: состояния, буферные, команд, адреса памяти или порта компьютера, счетчик команд и аккумулятор. Аккумулятор предназначен для хранения слова данных, посланного из АЛУ или памяти компьютера. Он является главным регистром МП при различных операций с данными. Большинство арифметических и логических операций осуществляются путем использования АЛУ и аккумулятора.
Структура микропрограмм определяет состав базовых команд ассемблера данного МП, каждой из которых транслятор ставит в соответствие определенный код (обычно в двоичной системе счисления). В свою очередь каждой команде, оператору языка программирования высокого уровня (Паскаль, Си, Фортан и т.д.) соответствующий компилятор или интерпретатор ставит в соответствие определенную группу команд ассемблера.
Когда МП извлекает по очередному адресу ячейки ОЗУ компьютера код команды ассемблера, то по этому коду активизируется соответствующая микропрограмма, которая в свою очередь генерирует последовательность кодов команд, управляюших микропроцессором в целом, в частности, арифметическо-логическим устройством и регистрами МП.
Таким образом упрощенно выглядит иерархическая структура управления работой компьютера. Следовательно, обработка информации программой любой сложности и любого характера сводится в итоге к выполнению соответствующей последовательности элементарных команд, выполняемых АЛУ микропроцессора. Программный ввод и вывод информации во всех случаях осуществляется "сквозь" МП, через его регистры.

1.4. Общие понятия о цифровом автомате и алгоритме

Необходимость формального описания компьютера и его отдельных частей в процессе его проектирования требует применения специального математического аппарата, который необходим при любых разработках различных методов обработки информации, при синтезе и анализе любых информационных процессов. Для этого вводится понятие абстрактного цифрового автомата.
Устройства, предназначенные для обработки, преобразования цифровой информации называются цифровыми автоматами. Наиболее распространенным в настоящее время видом цифровых автоматов являются электронные цифровые вычислительные машины с программным управлением, т.е. компьютеры.
Введем другое определение понятия цифрового автомата.
Цифровой автомат это устройство, характеризующееся набором некоторых внутренних состояний A = {a1(t), a2(t), ..., an(t)}= в которые оно попадает под воздействием входных сигналов и команд программы решения задачи.
Пусть имеется автомат с одним входом и одним выходом:

z(t) (t)


Рис.1.3. Цифровой автомат

Тогда математической модель. цифрового автомата является некоторый абстрактный автомат, заданный следующим образом: в начальный момент времени t = t0 автомат находится в состоянии a(t0) = a1 и остается в нем до момента t = t1, когда появляется входной сигнал z(t1). Под воздействием сигнала z(t1) автомат переходит из состояния a1 в состояние a(t1) = a2. При этом возникает выходной сигнал (t1) = 1, определяемый как функция
(t1) = [a(t1), z(t1)]. Таким образом можно принять, что при подаче произвольного сигнала z(t) = zf автомат переходит из состояния a(t) в состояние a(t+1), которое есть функция a(t+1) = [a(t), z(t)], и в результате вырабатывает выходной сигнал (t).
Выходные сигналы могут вырабатываться при каждом переходе автомата из состояния a(t) в состояние a(t+1) или только при определенных сочетаниях входного сигнала и состояний автомата.
Понятие состояния автомата используется для описания систем, выходы которых зависят не только от входных синалов в данный момент времени, но и от некоторой предыстории, т.е. сигналов, которые поступали на входы системы ранее. Состояние автомата соответствует некоторой памяти о прошлом, позволяя устранить время как явную переменную и выразить выходные сигналы как функцию состояний и входных сигналов.
Таким образом абстрактный автомат можно описать с помощью следующих параметров:
a1 - начальное состояние автомата;
A = {a1, a2,..., am } - множество внутренних состояний;
Z = {z1, z2,..., zf } - множество входных сигналов;
W = {1, 2,..., h } - множество выходных сигналов;
= {1, 2, ..., n } - совокупность функций перехода из одного состояния в другое;
= {1, 2,..., p } - совокупность функций выходов.
Следовательно, абстрактный автомат реализует некоторе отображение множества слов входного алфавита Z в множество слов выходного алфавита W.
Цифровые автоматы могут быть объединены между собой для фор-мирования более сложного устройства обработки цифровой информации. Существует несколько способов соединения автоматов. Например, параллельное соединение автоматов ЦА1 и ЦА2 (рис.1.4 а), последовательное соединение (рис.1.4. б) и соединение с обратной связь. (рис.1.4. в).

Y1
X Y = (Y1, Y2)
Y2

а) X Y1 Y

X X1 Y1 б)


Y2

в)

Рис. 1.4.

В первом случае устройство объединяет выходы двух автоматов и тем самым получается новый атомат, у которого Y = (Y1, Y2).
Во втором случае выходной алфавит первого автомата является входным для второго. В третьем случае имеется некоторый преобразователь , являющийся автоматом без памяти, который реализует отображение
| X Y2 X1, т.е. X1 = (X, Y2). Очевидно, что во всех этих случаях в итоге формируется некий цифровой автомат с новыми характеристиками.
Совокупность правил перехода автомата из одного состояния в другое в зависимости от входной информации и внутренних состояний автомата называется алгоритмом преобразования (переработки) информации. Вообще алгоритмом называется конечная совокупность точно сформулированных правил решения какойто задачи.
Можно привести еще одно определение понятия алгоритма. Алгоритм - это строго формальное описание конечной последовательности некоторых "элементарных" действий или процедур, которую надо выполнить над исходными данными и над промежуточными результатами, возникшими в ходе выполнения этих операций, для того чтобы прийти к информации, являющейся результатом обработки исходных данных. Подробное описание принципов разработки алгоритмов и их блок-схем приведено в Главе 11.
Перечисленные, в этой главе понятия относятся к абстрактной теории цифровых автоматов, в которой рассматриваются автоматы, имеющие один вход и один выход. Поэтому применить все это к ЭВМ можно только в самом общем виде, ограничивая круг рассматриваемых устройств устройствами, входящими в состав процессора, или же в случае когда рассматривается вообще некоторый узел ЭВМ, предназначенный для достаточно элементарной обработки цифровой информации. В самом деле, в зависимости от команд, подаваемых устройством управления процессора, арифметическо-логическое устройство осуществляет соответствующие действия (изменение внутренних состояний) с выдачей необходимых результатов. Однако изменение внутренних состояний всей ЭВМ в целом носит настолько сложный характер, что этот процесс невозможно отобразить в аналитическом виде. Поэтому понятие цифрового автомата целесообразно использовать применительно к алгоритмам, реализующим некотору. программу или последовательность операций. При этом каждая операция представляется как элементарное действие, осуществляемое в процессе переработки информации.
И все-таки в дальнейшем, если это не будет специально оговорено, всегда под понятием "цифровой автомат" будем иметь в виду компьютер без детализации о каком из его узлов идет речь, или же вообще прямо будем использовать термин "компьютер".


Глава 2.

ПРЕДСТАВЛЕНИЕ ЧИСЛОВОЙ ИНФОРМАЦИИ В ЦИФРОВОМ АВТОМАТЕ

2.1. Системы счисления и понятие кода

Как уже отмечалось, в процессе переработки информации цифровые ЭВМ - компьютеры, оперируют числами, которые представляются в некоторой системе счисления.
Система счисления - это совокупность приемов и правил для записи чисел цифровыми знаками. Запись числа в некоторой системе счисления часто называют кодом числа.
Элементы (символы) алфавита, которые используются для записи чисел в некоторой системе счисления, принято называть цифрами. Каждой цифре данного числа однозначно сопоставляется ее количественный (числовой) эквивалент.
Различают позиционные и непозиционные системы счисления.
Непозиционная система счисления - это система, для которой значение символа, т.е. цифры, не зависит от его положения в числе. К таким системам относится, в частности, римская система (правда с некоторыми оговорками). Здесь, например, символ V всегда означает пять, вне зависимости от места его появления в записи числа. Есть и другие современные непозиционные системы.
Позиционная система счисления - это система, в которой значение каждой цифры зависит от ее числового эквивалента и от ее места (позиции) в числе, т.е. один и тот же символ (цифра) может принимать различные значения.
Наиболее известной позиционной системой счисления является десятичная ситема счисления. Например, в десятичном числе 555 первая цифра справа означает 5 единиц, соседняя с ней - 5 десятков, а левая - 5 сотен.
В связи с тем, что в цифровых автоматах в основном используются позиционные системы счисления, то мы в дальнейшем будем рассматривать только такие системы.
Любая позиционная система счисления характеризуется основанием.
Основание или базис q естественной позиционной системы счисления это количество знаков или символов, используемых для изображения числа в данной системе.
Поэтому, возможно бесчисленное множество позиционных систем, т.к. за основание можно принять любое число, образовав новую систему счисления.
Когда мы представляем, т.е. записываем некоторое число в позиционной системе счисления мы размещаем соответствующие цифры числа по отдельным нужным позициям, которые принято называть разрядами числа в данной позиционной системе счисления. Количество разрядов в записи числа называется разрядностью числа и совпадает с его длиной.
В позиционной системе счисления справедливо равенство:

Aq = anqn + an-1qn-1 + ... + a1q1 + a0q0 + a-1q-1 + ... + a-mq-m, (2.1)
или
13EMBED Equation.31415=

где Aq это произвольное число, записанное в системе счисления с основанием q; ai - коэффициенты ряда, т.е. цифры системы счисления; n, m - количество целых и дробных разрядов соответственно.
Например, согласно (2.1)
1961,3210 = 1103 + 9102 + 6101 + 1100 + 310-1 + 210-2,
124=5378 = 182 + 281 + 480 + 58-1 + 38-2 + 78-3,
1001,11012 = 123 + 022 + 021 + 120 + 12-1 + 12-2 + 02-3 + 12-4.

Индекс, приписываемый к числу, указывает систему счисления, в которой представлено данное число.
Основание системы счисления показывает сколько различных значений в пределах i-того разряда может принимать каждая цифра ai числа A. Номера разрядов в позиционной системе счисления отсчитываются в целой части влево от запятой, а в дробной - вправо от запятой. Причем, нумерация разрядов начинается с 0. Величина основания позиционной системы счисления определяет ее название: для десятичной системы это будет 10, для восьмеричной - 8, для двоичной - 2 и т.д. Как уже отмечалось, обычно вместо названия системы счисления используют термин "код числа". Например, под понятием двоичный код подразумевается число, представленное в двоичной системе счисления, под понятием десятичный код - в десятичной системе счисления и т.д.
Для записи числа в десятичной системе используется 10 различных цифр от 0 до 9:
a10 = (0,1,2,3,4,5,6,7,8,9)=

в шестнадцатеричной - 16:

a16 = (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)=

где A = 10, B = 11, C = 12, D = 13, E = 14, F = 15,

в восьмеричной - 8:
a8 = (0,1,2,3,4,5,6,7)=
в двоичной - 2:
a2 = (0,1)\

Согласно (2.1) каждый разряд числа в двоичной системе счисления слева от запятой представляется двойкой в соответствующей положительной степени, а справа от запятой - двойкой в отрицательной степени. Например:

24 23 22 21 20 2-1 2-2 2-3 2-4
16 8 4 2 1, 0,5 0,25 0,125 0,0625

Примеры представления чисел в различных системах счисления:
1010 = 10102 = 128 = A16
1610 = 100002 = 208 = 1016
25510 = 111111112 = 3778 = FF16
Для обработки информации в компьютере обычно используется двоичная система счисления. Это объясняется, в частности, тем, что для размещения чисел (операндов) в компьютерах используются регистры и ячейки памяти, состоящие из триггеров или элементов с триггерной характеристикой, которые, как известно, имеют два устойчивых состояния. Одному из этих состояний ставится в соответствие 1, а другому - 0. Каждый из триггеров отводится для размещения наименьшей информационной единицы в двоичной системе счисления - двоичного разряда, который называется битом. Восемь бит есть байт.
Количество триггеров, т.е. двоичных разрядов, в регистре или ячейке памяти определяет длину слова, характерную для данного компьютера, а совокупность этих двоичных разрядов называется разрядной сеткой. Номер разряда такой сетки, отведенной для изображения целого числа в двоичной системе счисления, совпадает с соответствующим показателем степени двойки.
Таким образом, длина числа - это количество позиций (или разрядов) в записи числа. Для разных систем счисления характерна разная длина разрядной сетки, необходимая для записи одного и того же числа. Например, 9610 = 1408 = 11000002, т.е. чем меньше основание системы счисления, тем больше длина числа.
В любых цифровых автоматах длина разрядной сетки выбранной системы счисления фиксированна, что принципиально ограничивает точность и диапазон представления чисел.
Пусть длина разрядной сетки равна любому положительному числу, например n. Тогда
(Aq)max = qn - 1; (Aq)min = -(qn - 1)

Например, в двоичной системе счисления, если n = 3, то (A2)max = 1112 = 710, т.е. максимальное положительное число, которое может быть записано есть 7, а минимальное -7, представление которого в двоичной системе будет обсуждаться позже.
Диапазон представления чисел в заданной системе счисления - это интервал числовой оси, заключенный между максимальным и минимальным числами, значение которых, как мы видим, зависит от длины разрядной сетки.
Вес разряда Pi числа в позиционной системе счисления - это отношение

Pi = qi / q0 = qi

где i - номер разряда справа налево, а q0 это первый разряд и его номер равен 0, а значение равно 1.
Если в данном разряде накопилось значение единиц равное или больше q, то должна происходить передача единицы в соседний старший разряд. При сложении чисел, представленных в любой позиционной системе счисления, такие передачи информации называют переносами, а при вычитании - заемами. Передача переносов и заемов происходит последовательно от разряда к разряду. Эти процедуры хорошо известны всем из правил арифметических действий с десятичными числами.
Помимо обычной двоичной системы счисления были предложены двоичные системы счисления, в которых для изображения чисел используются символы 1, -1 или 0, -1. Существуют еще, так называемые, избыточные двоичные системы счисления, например, с символами 0, 1, -1. Но на практике в подавляющем большинстве случаев используется обычная двоичная система счисления.
При обмене данными между компьютером и внешними устройствами возникает необходимость в обмене знаковыми и буквенными символами. Этим символам в компьютере также ставится в соответствие некоторый код в двоичной системе счисления. Для представления цифр и букв в двоичной системе в настоящее время наиболее распространен код ASCII. Для представления любого символа в этом коде отводится 8 двоичных разрядов, т.е. один байт.
Примеры кода ASCII приведены в таблице 2.1.
Т а б л и ц а 2.1.
Символы Десятичный код Двоичный код Восьмерич-ный код Шестнадцате-ричный код
0 48 0110000 060 30
1 49 0110001 61 31
2 50 0110010 62 32
A 65 1000001 101 41
B 66 1000010 102 42
F 70 1000110 106 46
: 58 0111010 72 3F
( 40 0101000 50 28


2.2. Выбор системы счисления

При выборе системы счисления для ЭВМ необходимо учитывать, что во-первых, основание системы счисления определяет количество устойчивых состояний, которые должен иметь функциональный элемент, выбранный для изображения разрядов числа; во-вторых - длина числа существенно зависит от основания системы счисления; в третьих - система счисления должна обеспечить простые алгоритмы выполнения арифметических и логических операций.
Если имеется n разрядов для изображения числа в q-ичной системе счисления, то тогда максимальное число М, которое можно изобразить в пределах данной разрядной сетки, будет равно:

M = qn - 1 qn

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

N = qn

Из приведенных равенств следует, что N = qlnM / lnq. Используя полученную зависимость, можно найти основание системы счисления, при которой требуется минимум оборудования. Определив dN/dq и приравняв ее к нулю, получим экстремум при q = e. Но е не целое число, поэтому нужно использовать системы с q = 2 или q = 3. Эти системы практически равноценны, т.к.

N2 / N3 = 2ln3 / 3ln2 1.056

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

2.3. Формальные правила двоичной арифметики

Перед тем, как рассмотреть формальные правила двоичной арифметики подчеркнем общий принцип сложения и вычитания чисел представленных в любой позиционной системы счисления.
В общем случае процедуры сложения и вычитания двух чисел
A B = C в любой позиционной системы счисления начинаются с младших разрядов.
Код суммы каждго i-того разряда сi получается в результате сложения
ai + bi +1, где единица соответствует переносу из младшего (i - 1)-разряда в i-тый, если в младшем разряде код суммы получился больше или равным основанию системы счисления.
Код разности каждого i-того разряда получается в результате вычитания
ai - bi -1, где единица соответствует заему, если он был, в младшие разряды величины, равной основанию системы счисления.
Следовательно, правила и методы сложения и вычитания в любой позиционной системы счисления в принципе остаются такими же, как в десятичной системе.
Теперь рассмотрим правила арифметики с числами, представленными в двоичном коде.
Сложение двух чисел выполняется поразрядно, начиная с младшего разряда. В каждом разряде выполняется сложение двух цифр слагаемых и единицы переноса из соседнего младшего разряда:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 и осуществляется перенос 1 в старший соседний разряд.
Например:
01012 = 510
+00112 = 310
10002 = 810

Вычитание также производится поразрядно, начиная с младшего разряда. При вычитании в данном разряде из нуля единицы необходимо занять единицу из соседнего старшего разряда, которая равна двум единицам данного разряда:
0 - 0 = 0
1 - 0 = 1
1 - 1 = 0
0 - 1 =1 после заема единицы из соседнего старшего разряда.
Например:
01102 = 610
-00112 = 310
00112 = 310

Суммирование двоичных чисел в компьютерах осуществляется при помощи двоичных сумматоров, а вычитание - двоичных вычитателей. Но как будет показано в дальнейшем, вычитание можно организовать также при помощи процедуры сложения, т.е. при помощи двоичных сумматоров, если вычитаемое представить в "дополнительном" или "обратном" коде и тем самым исключить необходимость в двоичных вычитателях.
Умножение двоичных чисел производится путем образования про-межуточных произведений и последующего их суммирования. Промежуточные поразрядные произведения формируются по следующим правилам:

0 x 0 = 0 101 510 x 310 = 1510
0 x 1 = 0 11
1 x 0 = 0 101
1 x 1 = 1 + 101
1111

Деление чисел в двоичной системе производится по правилам умножения и вычитания.
Например:
110 : 11 = 10 610 : 310 = 210
11
00
00
0
Арифметические действия с двоичными числами подробно будут рассмотрены в дальнейшем.
При выполнении любых арифметических действий важное значение имеют такие электронные устройства, как двоичный полусумматор и двоичный сумматор, которые выполняют побитное двоичное сложение по ранее приведенным правилам. Для двоичного вычитания иногда используют и двоичный вычитатель. Приведем условное обозначение двоичных полусумматора и сумматора:

ai HS S ci ai SM S ci
bi
bi P Pi Pi-1 P Pi

а) б)

Рис.2.1 Условное обозначение полусумматора (а)
и двоичного сумматора (б).

Здесь ai и bi это i-тые разряды чисел А и В, которые складываются, а ci - i-тый разряд суммы этих чисел, Pi - перенос из данного разряда в соседний следующий старший, Pi-1 - перенос из соседнего младшего в данный разряд.
Если для представления двоичных чисел А, В, С и их знаков выделена
n-разрядная сетка, то очевидно, что для организации процедуры сложения необходимо n двоичных сумматоров, которые соединяются между собой по определенной схеме, зависящей от того в каком коде представляются эти двоичные числа: прямой, обратный или дополнительный.
Очевидно, что в арифметических устройствах цифровых автоматов помимо двоичных сумматоров используются также регистры, счетчики, различные триггера и электронные устройства, выполняющие различные логические процедуры. Обычно используемые регистры должны позволять не только параллельно записывать в них двоичные коды чисел, но и сдвигать изображения этих чисел влево и вправо на необходимое число двоичных разрядов.
Простейшую блок-схему узла, выполняющего процедуру сложения
A+B=C можно представить следующим образом:

A Pr

CM Pr
Pr C
B


где Рr - некоторые регистры, в которые записываются двоичные числа А, В и С; СM - сумматор, точнее группа сумматоров nSM, где n - длина разрядной сетки, отведенной для представления чисел А, В и С.
Помимо арифметических операций в цифровых автоматах реализуются также логические операции, которые подробно рассматриваются в последующих главах.
Кроме этих операций в цифровых автоматах, компьютерах, выполняется еще одна операция над двоичными числами - это сдвиг числа по разрядной сетке влево или вправо. В случае сдвига влево фактически осуществляется умножение двоичного числа на 2, а при сдвиге вправо - деление на 2, где - количество разрядов, на которое сдвигается двоичное число. Например: 0000112 = 310 сдвинем влево на 2 разряда, получим 0011002 = 1210, т.е.
3х4(22) = 1210, а теперь 0010002 = 810 сдвинем на 2 разряда вправо, получим 0000102 = 210, т.е. 8:4(22) = 210.
В компьютерах часто используется циклический сдвиг, при выполнении которого разрядная сетка, отведенная для операнда, представляется замкнутой в кольцо. Тогда при сдвиге влево содержимое старшего разряда попадает в младший разряд операнда, а при сдвиге вправо - наоборот.

2.4. Перевод числа из одной позиционной системы счисления в
другую

Как уже отмечалось, любая обработка информации в компьютере обычно осуществляется в двоичной системе счисления. В то же время, при обмене информации между компьютером и пользователем для большей наглядности представления данных используются десятичная, двоично-десятичная, восьмеричная или шестнадцатеричная системы. Каждый разряд числа в восьмеричном и шестнадцатеричном коде эквивалентен трем и четырем двоичным разрядам соответственно. Поэтому, представление чисел в этих системах счисления получается более компактным и наглядным.
Для перевода восьмеричного (шестнадцатеричного) числа в двоичную форму достаточно заменить каждую цифру этого числа соответствующим трехразрядным (четырехразрядным) двоичным числом, при этом отбрасывают ненужные нули в старших разрядах.
Например

( 3 0 5 . 4 )8 = 11000101.100(2);
011 000 101 . 100

( 7 B 2 . E )16 = 11110110010.1110(2).
0111 1011 0010 . 1110

Для перехода от двоичной к восьмеричной (шестнадцатеричной) системе поступают так: двигаясь от точки влево и вправо, разбивают двоичное число на группы по три (четыре) разряда, дополняя, при необходимости, нулями крайние левую и правую группы. Затем группу из трех (четырех) разрядов заменяют соответствующей восьмеричной (шестнадцатеричной) цифрой.
Например:
1) перевод 1101111001.11012 в восьмеричное

001 101 111 001 . 110 100 = 1571.648;
1 5 7 1 6 4

2) перевод 11111111011.100111(2) в шестнадцатеричное

0111 1111 1011 . 1001 1100 = 7FB.9C(16).
7 F B 9 C

Двоично-десятичный код (D-код) ориентирован на наиболее удобную для человека десятичную систему счисления. В нем для записи чисел используются только двоичные цифры 0 и 1. Двоично-десятичный код образуется заменой каждого десятичного разряда в десятичном числе 4-х битовым двоичным представлением этого разряда.
Например,
0001 1001 1000 0100(D) = 1984(10)

0001 1001 1000 0100
1 9 8 4

Для реализации машинных алгоритмов перевода из одной системы счисления в другую существуют различные методы. Так, например, для перевода целого десятичного числа в его двоичный (восьмеричный, шестнадцатеричный) эквивалент используется деление на 2 (8, 16), т.е. выполняется деление на основание новой системы счисления. В процессе такого деления последовательно, начиная с младшего разря-да 2-го (8-го, 16-го) эквивалента, записывается остаток, если он получается на очередном этапе деления десятичного числа. В противном случае записывается ноль. Далее результат очередного деления опять делится на 2 (8, 16), если этот результат больше или равен 2 (8, 16). Если же результат меньше, то он прямо переписывается в старший разряд:

1) 53:2 = 26:2 = 13:2 = 6:2 = 3:2 = 1
(мл. раз.) 1 0 1 0 1 1 (ст. раз.)
n\t\ 53(10) = 110101(2).

2) 128:8 = 16:8 = 2
0 0 2
12810 = 2008

3) 128:16 = 8
0 8
12810 = 8016

Для дробных чисел (или дробных частей вещественных чисел) требуется отдельная процедура перевода. В случае неправильной дроби процедура преобразования для целой и дробной частей числа выполняется отдельно. Результат получают путем записи двоичных эквивалентов этих частей соответственно слева и справа от двоичной запятой (точки). Следовательно, при переводе неправильной десятичной дроби целая и дробная части числа переводятся в двоичный эквивалент по разным алгоритмам.
Процедуру преобразования десятичной дроби в двоичную рассмотрим на примере преобразования числа 0,375.
1. Преобразование осуществляется умножением дроби на основание системы счисления, в которой дробь должна быть представлена. В данном случае умножаем на 2: 0,375 х 2 = 0.75. Окончательный результат формируется поразрядно, начиная со старшего разряда, к примеру, в некотором трехразрядном регистре С = 0.XXX, где XXX - разрядная сетка мантиссы этого регистра.
2. Если результат <1, то старшему значащему разряду присваивается значение 0; если больше 1, то присваивается 1. Поскольку 0,75<1, то в старший разряд регистра С записывается 0, т.е. С = 0,0XX.
3. Результат предыдущей операции умножения снова умножаем на 2. Заметим, что если бы результат предыдущей операции умножения был больше 1, то в данной операции умножения участвовала лишь его дробная часть. В данном случае 0,75 x 2 = 1,5.
4. Так как результат больше 1, то следующему значащему разряду регистра С присваивается значение 1, т.е. С = 0,01X.
5. Шаги описанной процедуры повторяются до тех пор, пока либо результат умножения не будет точно равен 1, либо не будет достигнута требуемая точность. В нашем примере после выполнения очередного шага результат равен 0,5 x 2 = 1,0. Поэтому очередному значащему разряду регистра С присваивается 1, т.е. окончательно получена двоичная дробь С = 0.0112.
Надо отметить, что не всегда путем повторения операций умножения можно достичь результата, точно равного 1. В таком случае процесс останавливается по достижению необходимой точности, а целую часть результата последней операции умножения присваивают младшему значащему разряду.

Расмотрим еще пример: переведем число 0,3437510 в двоичное
2 x 0,34375 = 0,6875 0 (старший разряд - СЗР, результата перевода)
2 x 0,6875 = 1,375 1
2 x 0,375 = 0,75 0
2 x 0,75 = 1,5 1
2 x 0,5 = 1,0 1
2 x 0 = 0 0 (младший разряд - МЗР, результата перевода)
Ответ: 0,01011(2)

Для перевода десятичной правильной дроби в восмеричную (шест-надцатеричную) надо умножать ее на 8 (16). Если очередное произведение правильная дробь, то, начиная со старшего разряда результата записываются 0. Если произведение целое и меньше 8 (16), то оно прямо переписывается в соответствующий разряд результата.
Например:
1) 0,0625 x 8 = 0,5 0
0,5 x 8 = 4 4
0,062510 = 0,048

2) 0,875 x 16 = 14(E)
0,87510 = 0,E16

Перевод двоичного числа в десятичный его эквивалент можно выполнить при помощи формулы (2.1):

1) 110101(2) = 125 + 124 + 023 + 122 + 021 + 120 =
132 + 116 + 08 + 14 + 02 + 11 = 32 + 16 + 4 + 1 = 53(10).
2) 2008 = 282 + 081 + 080 = 12810
3) 1F16 = 1161 + 15160 = 3110

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

Глава 3.

ФОРМЫ ПРЕДСТАВЛЕНИЯ ЧИСЕЛ В ЦИФРОВЫХ АВТОМАТАХ

Формой представления чисел в цифровых автоматах называется совокупность правил, позволяющих установить взаимное соответствие между записью числа и его количественным эквивалентом.
Машинное (автоматное) изображение числа это есть представление числа в разрядной сетке цифрового автомата. Условное обозначение машинного изображения числа, например, A будем представлять как [A].
Из-за ограниченной длины машинных слов, множество чисел, которые можно представить в машине конечное. Сравнение различных форм представления чисел в компьютерах обычно производится на основе оценки диапазона и точности представления числа.
В повседневной практике наиболее распространенной является форма представления чисел в виде последовательности цифр, разделенной запятой на целую и дробную части. Числа, представленные в такой форме, называются числами с естественной запятой или числами в естественной форме. В естественной форме число записывается в естественном натуральном виде, например 12560 - целое число, 0,003572 - правильная дробь, 4,89760 - неправильная дробь.
При представлении чисел в такой форме обязательно требуется для каждого числа указание о положении его запятой в разрядной сетке, выделенной для представления числа в машине, что требует дополнительных аппаратных затрат достаточно большого объема. Поэтому в компьютерах получили распространение две другие формы представления: с фиксированной и плавающей запятой.

3.1. Форма представления двоичных чисел с фиксированной запятой

Необходимость в указании положения запятой отпадает, если место запятой в разрядной сетки машины заранее фиксировано раз и навсегда. Такая форма представления чисел называется представлением с фиксированной запятой (точкой).
Так как числа бывают положительные и отрицательные, то формат (разрядная сетка) машинного изображения разбивается на знаковую часть и поле числа. В поле числа размещается само изображение числа, которое мы будем условно называть мантиссой числа. Для кодирования знака числа используется самый старший разряд разрядной сетки, отведенной для изображения двоичного числа, а остальные разряды отводятся под мантиссу числа. Положение запятой в разрядной сетке строго фиксируется, обычно или правее самого младшего разряда мантиссы, или левее самого старшего. В первом случае число представляется как целое, во втором - как правильная дробь. В настоящее время в подавляющем большинстве в компьютерах в формате с фиксированной точкой представляются целые числа.
В знаковую часть записывается информация о знаке числа. Принято, что знак положительного числа "+" изображается символом 0, а знак отрицательного числа "-" изображается символом 1.
Например, в двоичном коде, используя 6-разрядную сетку, число 7 в форме с фиксированной запятой можно представить в виде:

0.001112,

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

[0]001112,

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

|A|max = (2(n-1) - 1),

где n - полная длина разрядной сетки. В случае 16-разрядной сетки

|A|max = (2(16-1) - 1) = 3276710 ,

т.е. диапазон представления целых чисел в этом случае будет от +3276710 до -3276710 .
Для случая, когда запятая фиксируется правее младшего разряда мантиссы, т.е. для целых чисел, числа, у которых модуль больше, чем
(2(n-1) - 1) и меньше единицы не представляются в форме с фиксированной запятой. Числа, по абсолютной величине меньше единицы младшего разряда разрядной сетки, называются в этом случае машинным нулем. Отрицательный ноль запрещен.
В некоторых случаях, когда можно оперировать только модулями чисел, вся разрядная сетка, включая самый старший разряд, отводится для представления числа, что позволяет расширить диапазон изображения чисел.

3.2. Представление отрицательных чисел в формате с
фиксированной запятой

В компьютерах в целях упрощения выполнения арифметических операций применяются специальные двоичные коды для представления отрицательных чисел: обратный и дополнительный. При помощи этих кодов упрощается определение знака результата операции при алгебраическом сложении. Операция вычитания (или алгебраического сложения) сводится к арифметическому сложению операндов, облегчается выработка признаков переполнения разрядной сетки. В результате упрощаются устройства компьютера, выполняющих арифметические операции.
Известно, что одним из способов выполнения операции вычитания является замена знака вычитаемого на противоположный и прибавление его к уменьшаемому:
А - В = А + ( - В)

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

[A]пр = 0.an an-1 an-2.....a1 a0,

тогда число -А в этом же коде представляется как

[-A]пр = 1.an an-1 an-2.....a1 a0,

а в обратном (инверсном) коде это число будет иметь вид:

[-A]об = 1.an an-1 an-2.....a1 a0,

где
ai = 1, если ai = 0,
ai = 0, если ai = 1,

ai - цифра i-того разряда двоичного числа. Следовательно, при переходе от прямого кода к обратному все цифры разрядов матиссы числа инвертируются.
Тогда число -A в дополнительном коде изображается в виде

[-A]доп = [-A]об + 1

Таким образом, для получения дополнительного кода отрицательных чисел нужно сначала инвертировать цифровую часть исходного числа, в результате чего получается его обратный код, а затем добавить единицу в младший разряд цифровой части числа.
Дополнительный код некоторого числа получается его заменой на новое число, дополняющее его до числа, равного весу разряда, следующего за самым старшим разрядом разрядной сетки, используемой для представления мантиссы числа в формате с фиксированнной запятой. Поэтому такой код числа называется дополнительным.
Представим, что мы имеем только два разряда для представления чисел в десятичной системе счисления. Тогда максимальное число, которое можно изобразить будет 99, а вес третьего несуществующего старшего разряда будет 102, т.е. 100. В таком случае для числа 20 дополнительным будет число 80, которое дополняет 20 до 100 (100 - 20 = 80). Следовательно по определению вычитание
50 - 20 = 30
можно заменить на сложение:
50 + 80 = 1 30
Здесь старшая единица выходит за пределы выделенной разрядной сетки, в которой остается только число 30, т.е. результат вычитания из 50 числа 20.
А теперь рассмотрим похожий пример для чисел, представленных 4-х разрядным двоичным кодом. Найдем дополнительное число для 00102 = 210. Надо из [1]0000 вычесть [0]0010, получим [0]1110, которое и является дополнительным кодом 2. Разряд, изображенный в квадратных скобках на самом деле не существует. Но так как у нас 4-х разрядная сетка, то выполнить такое вычитание в принципе невозможно, а тем более мы стараемся избавиться от вычитания. Поэтому дополнительный код числа получают способом, описанным ранее, т.е. сначала получают обратный код числа, а затем прибавляют к нему 1. Проделав все это с нашим числом (2), нетрудно убедиться, что получится аналогичный ответ.
Подчеркнем, что дополнительный и обратный коды используются только для представления отрицательных двоичных чисел в форме с фиксированной запятой. Положительные числа в этих кодах не меняют своего изображения и представляются как в прямом коде.
Таким образом, цифровые разряды отрицательного числа в прямом коде остаются неизменными, а в знаковой части записывается единица.
Рассмотрим простые примеры.
Семерка в прямом коде представляется так:

[7]пр = 0.0001112

Число -7 в прямом коде:

[-7]пр = 1.0001112,

а в обратном коде будет иметь вид

[-7]об = 1.1110002,

т.е. единицы заменяются нулями, а нули единицами. То же число в дополнительном коде будет:

[-7]доп = 1.1110012.

Рассмотрим еще раз как процедура вычитания, при помощи представления вычитаемого в дополнительном коде, сводится к процедуре сложения. Вычтем из 10 число 7: 10 - 7 = 3. Если оба операнда представлены в прямом коде, то процедура вычитания выполняется так:


0.001010
-1.000111
0.000011 = 310

А если вычитаемое, т.е. -7, представить в дополнительном коде, то процедура вычитания сводится к процедуре сложения:

0.001010
+ 1.111001
1 0.000011 = 310.

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

3.3. Форма представление чисел с плавающей запятой

В общем случае число в форме с плавающей запятой представляется в виде:
A = mq p ,

где m - мантисса числа, q - основание системы счисления, q p - порядок числа, который для упрощения в примерах будем иногда изображать как P. Тогда очевидно, что p - это показатель степени порядка, который обычно называют просто порядком числа, т.к. в основном всегда q = 2. Следовательно предыдущее выражение можно записать в следующем виде:

A = mAPA,

имея в виду, что в компьютерах обычно q = 2.
Так, например, число 1984 в форме с плавающей запятой в десятичной системе счисления можно записать следующим образом:

1984,0100 0,1984104
19,84102 19840010-2
и т.д.
Число с плавающей запятой принято представлять в так называемом нормализованном виде для максимально точного представления числа. Если выполняется неравенство

q-1 |m| <1,

а в случае двоичной системы счисления:

0.5 |m| <1,

то считается, что число представлено в нормализованном виде. Например, 0,1984104 является нормализованным видом числа 1984 в форме с плавающей запятой в десятичной системе счисления.
Таким образом, у двоичного нормализованного числа в форме с плавающей запятой мантисса - правильная дробь и в старшем разряде мантиссы всегда стоит 1. Операция приведения числа к нормализованному виду называется нормализацией. Нормализация чисел в компьютере выполняется или автоматически или же по специальной программе.
Так как система счисления для заданного цифрового автомата (ком-пьютера) остается постоянной, то при представлении числа в формате с плавающей запятой нет необходимости указывать ее основание, достаточно лишь представить показатель степени порядка числа.
Для представления двоичного числа в форме с плавающей запятой в разрядной сетке, выделенной для этой цели, отводится по одному разряду для представления знака числа Sm и знака показателя степени порядка SP; определенное число разрядов для представления значения самого показателя p, а также разряды для размещения значения модуля мантиссы m. Например, возможен следующий вариант:

Sp p Sm m

т.е.
[A] = Sp pASmmA

Обычно в формате с плавающей запятой вместо показателя p используют так называемую характеристику ("смещенный порядок"):

r = p + l,

где l - избыток (смещение), значение которого подбирается таким образом, чтобы при изменении значения показателя от некоторого минимального значения -|pmax| до максимального +|pmax|, характеристика r менялась от 0 до rmax. Следовательно, характеристика не меняет своего знака. В таком случае отпадает необходимость в отображении знака порядка Sp. Для этого принимается, что

l = 2k-1,

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

Sm r m

т.е.
[A] = Sm r mA

Такой формат и используется, в основном, в настоящее время.
Рассмотрим несколько примеров представления чисел в форме с плавающей запятой. Предварительно напомним, что показатель степени двойки в разрядах разрядной сетки длиной n, отведенной для представления целых чисел, изменяется от 0 до n-1, а в случае правильных дробных чисел - от -1 до -n.
Если для представления показателя порядка выделены 4 разряда, то
l = 23 = 810 = 10002. Для этого случая в таблице 3.1 приведены значения показателя порядка, характеристики и мантиссы для некоторых чисел, представленных в форме с плавающей запятой.
Т а б л и ц а 3.1.
A10 p10 r10 m2
0 0 8 0,0
1 1 9 0,1
2 2 10 0,1
3 2 10 0,11
0,5 0 8 0,1
0,25 -1 7 0,1
0,75 0 8 0,11
0,375 -1 7 0,11
Например, в 16-ти разрядных компьютерах для представления двоичного числа в форме с плавающей запятой с обычной точностью отводится 4 байта, т.е. 2 16-разрядных слова:

15 14 7 6 0 старшее
1$0 r старшая часть |m| слово

15 0 младшее
младшая часть |m| слово

Разряды 147 старшего слова числа используются для представления характеристики числа. В остальных разрядах старшего слова и во всем младшем слове размещается модуль мантиссы числа. 15-й разряд старшего слова используется под знак числа.
Единица самого старшего разряда нормализованной мантиссы обычно является "скрытой", т.е подразумевается и не отражается в формате числа.
7-ой разряд старшего слова, в котором должна была быть отражена эта единица, используется в качестве младшего разряда характеристики, что позволяет увеличить диапазон представления чисел в формате с плавающей запятой.
Таким образом, мантисса в таком варианте отображается, начиная с разряда, следующего после самого старшего. При всех операциях с мантиссой числа это обстоятельство надо учитывать и перед началом этих операций восстанавливать старший разряд мантиссы в тех регистрах, куда загружается мантисса числа для выполнения над ней каких-то процедур.
После завершения этих процедур во время формирования отображения нормализованного числа в отведенной для него разрядной сетке машинных слов, старшая единица мантиссы опять отбрасывается.
8-разрядное поле порядка позволяет изменять показатель порядка в пределах от -12810 до +12710, причем показатель порядка записыватся с избытком l = 2008 или 12810.
В отличие от показателя порядка, как уже отмечалось, характеристика не меняет своего знака и в данном случае изменяется от 0 (при p = -12810) до 3778 (при p = +12710), причем r = 2008 при p = 0. Исключение составляет число 0: ноль с обычной и двойной точностью выражается нулевой характеристикой и нулевой мантиссой.
Примеры представления чисел в форме с плавающей запятой в
16-разрядных компьютерах приведены в таблице 3.2:

Т а б л и ц а 3.2.
A10 15 14 13 12 11 10 9 8 7 6 5 4 3
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
А8 - представление старшего слова числа в форме с плавающей запятой в восьмеричном коде.
Во всех приведенных примерах содержимое младшего слова числа равно нулю. В случае представления числа с плавающей запятой с двойной точностью, под мантиссу отводится еще два 16-ти разрядных слова, т.е. для представления числа в такой форме отводится 4 16-ти разрядных слова.
Например, в микропроцессоре 80386 предусмотренно три варианта представления числа ("действительного" числа) в форме с плавающей запятой: с разрядностью 32, 64 и 80 бит. В первом случае под характеристику выделяется 7 разрядов, а в остальных - по 8.
Длина разрядной сетки, выделенной под характеристику, определяет диапазон представления чисел в формате с плавающей запятой.
Как уже отмечалось, модуль мантиссы нормализованного числа - mА, представленного в формате с плавающей запятой лежит в пределах:

2-1 mА (1 - 2-n)

где n - число разрядов, выделенных для представления мантиссы числа А. Если для представления порядка (p) выделено k разрядов, то

pmin = -2k b pmax = (2k -1)

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

2Pmin2-1 A (1 - 2-n)2Pmax

или
13EMBED Equation.31415.

Основным преимуществом представления чисел в форме с плавающей запятой является большой диапазон машинных чисел и высокая точность их представления. Диапазон определяется длиной разрядной сетки, выделенной под характеристику, а точность - определяется длиной разрядной сетки, выделенной под мантиссу.

3.4. Перевод чисел из формата с фиксированной запятой в формат с плавающей запятой и обратно

В начале рассмотрим алгоритм перевода числа из формата с фикси-рованной запятой в формат с плавающей запятой.
Перевод числа из формата с фиксированной запятой [A]ф в формат с плавающей запятой [A]п.з возможен только в случае выполнения следующего условия:
nm nф,

где nm это длина мантиссы для числа в формате с плавающей запятой, а nф - длина мантиссы для числа в формате с фиксированной запятой.
Условно примем, что длина разрядной сетки, выделенной для изображения мантиссы числа как с плавающей так и с фиксированной запятой, одинаковая и, например, равна 8, т.е. nф = nm = 8. Для представления характеристики числа с плавающей запятой, к примеру, отводится 6 разрядов. Тогда l = 3210. В начале процедуры перевода модуль числа [A]ф, представленного в прямом коде без знакового разряда, переписывается в поле мантиссы [A]п.з. Причем, таким образом, чтобы, независимо от длины мантиссы, изображение модуля числа [A]ф разместилось в самых младших разрядах поля мантиссы. В этом случае исходная характеристика принимается следующей:

r = l + na = 3210 + 810 = 4010.

Это объясняется тем, что при переводе числа из формата с фиксированной запятой в формат с плавающей запятой (только при таком переводе !) показатель степени порядка p может быть только nф.
В процессе перевода проверяется старший разряд мантиссы, если он обнулен, то производится сдвиг изображения мантиссы влево на один разряд и вычитается 1 из значения r. Такая процедура повторяется до тех пор пока в старшем разряде мантиссы не появится 1, или же пока значение r не станет равным l. В этих случаях процедура перевода заканчивается.
Например, в случае перевода [1]ф в [1]п.з получается r = 3310, изображение мантиссы будет 0,12. Если исходное число было отрицательным, то в разряд, отведенный под знак мантиссы записывается 1. В противном случае 0.
Например, переведем 510 = 000001012 в формат с плавающей, nm = 8,
nф = 8, l = 8 = 10002, r = l + nm = 10002 + 10002
Последовательность выполнения процедуры нормализации приведена в таблице 3.3:

Т а б л и ц а 3.3
С.р. Мантисса М.р.\ r2 = l2 + (nm - 1)2
0 0 0 0 0 1 0 1 r = 1000 + 1000
0 0 0 0 1 0 1 0 r = 1000 + 0111
0 0 0 1 0 1 0 0 r = 1000 + 0110
0 0 1 0 1 0 0 0 r = 1000 + 0101
0 1 0 1 0 0 0 0 r = 1000 + 0100
1 0 1 0 0 0 0 0 r = 1000 + 0011

В результате получили число, мантисса которого равна 0,1012 с характерис-тикой r = 10112 = 1110 , т.е. показатель степени порядка равен 00112 = 310.
В случае, когда исходное число является правильной дробью, то дробь записывают в старшие разряды мантиссы и в качестве исходной характеристики принимается r = l. Далее перевод производится аналогично выше описанному.
Например, переведем 0,2510 = 0,012 при условиях таких же, как и в первом примере:

Т а б л и ц а 3.4.
С.р. Мантисса М.р. r2 = l2 - 1
0 1 0 0 0 0 0 0 r = 1000
1 0 0 0 0 0 0 0 r = 1000 - 1 = 0111

Получаем число 0,12, r = 01112 = 710, а показатель степени порядка равен
-1.
А теперь приведем принцип перевода числа из формата с плавающей запятой в формат с фиксированной запятой.
Рассмотрим тот же случай, когда nф = nm, а [A]ф - целое число.
Если r < l + nф, то изображение мантиссы сдвигается вправо на один разряд с прибавлением единицы к значению r при каждом шаге сдвига. Сдвиги прекращаются как только станет справедливым равенство

r = l + nф.

Следовательно, если исходно r = l + nф., то сдвиги не нужны. Если же
r = l + nф, то преобразование невозможно, т.к. будет принципиально ошибочным.
Полученное после необходимых сдвигов (или без них) изображение мантиссы переписывается в разрядную сетку, отведенную под модуль числа [A]ф. Если знак мантиссы был отрицателен: Sm = 1, то представление [A]ф переводится в дополнительный код.
Например, денормализуем число 0.1012 с характеристикой r = 10112 :


Т а б л и ц а 3.5.
С.р. Мантисса М.р. r2 = l2 + (p + 1)2
1 0 1 0 0 0 0 0 r = 1000 + 0011
0 1 0 1 0 0 0 0 r = 1000 + 0100
0 0 1 0 1 0 0 0 r = 1000 + 0101
0 0 0 1 0 1 0 0 r = 1000 + 0110
0 1 0 0 1 0 1 0 r = 1000 + 0111
0 0 0 0 0 1 0 1 r = 1000 + 1000

Получаем 510.

В общем случае, когда nm > nф, обязательно должно выполняться следующее условие:

r - l nф.

Если это условие не выполняется, то в результате денормализации получим число по величине меньшее исходного, т.е. результат перевода будет ошибочным.
В случае, когда [A]ф правильная дробь и r < l, мы также начинаем сдвигать число вправо, прибавляя к значению к единицу при каждом шаге сдвига до тех пор, пока r станет равным l. Затем, начиная со старшего разряда мантиссы, выделяем столько разрядов, сколько отведено их для представления числа в формате с фиксированной запятой, и считываем их в разрядную сетку, отведенную для представления числа в формате с фиксированной запятой.
Например, денормализуем число 0,12 с характеристикой 01112:

Т а б л и ц а 3.6.
С.р. Мантисса М.р. r2 = l2 + 1
1 0 0 0 0 0 0 0 r = 0111
0 1 0 0 0 0 0 0 r = 0111 + 1 = 1000

Получаем 0.012 и переписываем это число в разрядную сетку, отведенную для представления чисел в формате с фиксированной запятой.
Когда nm > nф, если не выполняется следующее условие:

l - r nф,

то в результате денормализации получим 0.

3.5. Погрешности представления чисел

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

[A] = A - Aм

Тогда относительная погрешность представления равна:

[A] = [A]/Av

Максимальная погрешность перевода десятичной информации в двоичную не превышает единицы младшего разряда разрядной сетки цифрового автомата. Минимальная погрешность перевода равна нулю.
Усредненная абсолютная погрешность перевода чисел в двоичную систему счисления будет равна:

[A]c = 0,52-n для дробей и
[A]c = 0,520 для целых чисел

Для представления чисел в форме с фиксированной запятой абсолютное значение машинного изображения числа лежит в пределах:

2-n [A]ф 1 - 2-n для дробей и
20 [A]ф 2n - 1 для целых чисел

Следовательно, относительные погрешности представления для ми-нимального значения числа равны:

13EMBED Equation.31415 для дробей и
13EMBED Equation.31415 для целых чисел.

Аналогично для максимального значения:

13EMBED Equation.31415 для дробей и
13EMBED Equation.31415 для целых чисел.

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

2-1 |[mA]n| 1 - 2-n.

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

13EMBED Equation.31415
и
13EMBED Equation.31415=

где n - количество разрядов для представления мантиссы числа. Из последней формулы следует, что относительная точность представления чисел в форме с плавающей запятой почти не зависит от величины числа.


Глава 4.

АРИФМЕТИЧЕСКИЕ ДЕЙСТВИЯ С ДВОИЧНЫМИ ЧИСЛАМИ

4.1. Сложение двоичных чисел

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

4.1.1. Алгебраическое сложение чисел, представленных в форме с фиксированной запятой

Структурные схемы двоичных сумматоров, предназначенных для выполнения алгераического сложения чисел представленных в обратном и дополнительном кодах приведены на рисунке 4.1 в) и б) соответственно, а на рисунке 4.1 а) - для арифметического сложения чисел, представленных в прямом коде. На этих рисунках символами Sg обозначаются значения знаковых битов операндов и результата.

а)
a1 SM c1 a2 SM c2 an SM
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·б)
a1 SM c1 a2 SM c2 an SM cn Sga SM
b1 b2 bn Sgb
P0 P1 P2 Pn-1 Pn

1 2 n
в)
a1 SM c1 a2 SM c2 an SM cn Sga S
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
Рис. 4.1

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



1) 210 + 410 = 610 2) -210 - 410 = -610
0. 0010 а) 1. 1110 б) 1. 1101
+ 0. 0100 + 1. 1100 + 1. 1011
0. 0110 = 610 1 1. 1010 = -610 1 1. 1000
+1 коррекция
1. 1001 = -610

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

1) 410 - 210 = 210
а) 0. 0100 б) 0. 0100
+ 1. 1110 + 1. 1101
1 0. 0010 = 210 1 0. 0001
+1 коррекция
0. 0010 = 210
2) 410 - 410 = 0
а) 0. 0100 б) 0. 0100
+ 1. 1100 + 1. 1011
1 0. 0000 = 010 1. 1111
+1 коррекция
1 0. 0000 = 010
3) 210 - 410 = -210
а) 0. 0010 б) 0. 0010
+ 1. 1100 + 1. 1011
1. 1110 = -210 1. 1101 = -210 коррекции нет.

В примерах 1а) и 2а) единица, выходящая за разрядную сетку, не учитывается ("теряется").
Как видно из примеров процедура алгебраического сложения с дополнительными кодами проще, чем с обратными кодами, т.к. в последнем случае при возникновении единицы переноса за пределы разрядной сетки, выделенной для числа в формате с фиксированной запятой, приходится корректировать результат с помощью дополнительной процедуры прибавления единицы к результату. Нулевой результат получается или в прямом коде или же в обратном, что также требует коррекции результата. Поэтому в настоящее время на практике для представления отрицательных операндов используется в основном дополнительный код.
Таким образом, перед выполнением самой процедуры алгебраического сложения в дополнительном коде нужно проанализировать знаки слагаемых. Если они разные, то выполняется алгебраическое сложение (фактически вычитание) без проверки на переполнение результата, т.к. его в этом случае просто не может быть. Но контролируется чтобы в результате не появился запрещенный отрицательный ноль. Если же у исходных операндов знаки одинаковы, то такой же знак предварительно присваивается результату и выполняется само сложение. Если знак окончательного результата не совпадает с предварительно присвоенным знаком, то это является признаком переполнения и следовательно, неправильного результата.
Еще раз подчеркнем, что результат алгебраического сложения операндов представленных в обратном и дополнительном кодах получается также в обратном и дополнительном коде соответственно.


4.1.2. Переполнение разрядной сетки

При сложении чисел одинакового знака, представленных в форме с фиксированной запятой, может возникнуть переполнение разрядной сетки.
1. Признаком переполнения разрядной сетки при сложении чисел в прямом коде является появление единицы переноса из старшего разряда цифровой части числа.
Например:
0. 1010
+ 0. 0110
0. 0000

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

1) 0. 1100 1. 0101
+ 0. 1000 + 1. 0111
1. 0100 0. 1100
2) 0. 0111 1. 1001
+ 0. 1101 + 1. 0010
1. 0100 0. 1011

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

4.1.3. Модифицированный прямой, обратный и дополнительный код

Эти коды отличаются от обычных прямых, обратных и дополнительных тем, что имеют по два знаковых разряда. При выполнении арифметических действий над двоичными числами эти два знака позволяют легко определить переполнение разрядной сетки. Если содержимое этих двух разрядов совпадает, то значит переполнение отсутствует. В противном случае в компьютере вырабатывается управляющий сигнал (сигнал переполнения) либо на останов компьютера, либо на устранение переполнения разрядной сетки.
Примеры.
1) Сложить два числа в модифицированном коде:
X = 00. 01012, Y = 00. 00112 , X + Y = 510 + 310 = 810
00. 0101
+ 00. 0011
00. 1000 = 810

2) Сложить X = -510 = -01012 = 11. 0101 , Y = -810 = -10002 = 11. 1000
X + Y = -1310
11. 1011
+ 11. 1000
1 11. 0011 = -1310



3) Сложить X = 0,1101 , Y = 0,1101, X + Y = 2610
00. 1101
+ 00. 1101
01. 1010 различные знаковые разряды свидетельствуют о переполнении разрядной сетки.

4) -8 - 8 = 0
11. 1000
+ 11. 1000
1 11. 0000 .

В последнем примере получился отрицательный ноль, поэтому компьютер генерирует сигнал сбоя. Надо отметить, что в машинах 3-го и 4-го поколений модифицированный код не используется.

4.1.4. Алгебраическое сложение чисел, представленных в форме с плавающей запятой

Нужно подчеркнуть, что при выполнении любых арифметических действий над операндами, представленными в форме с плавающей запятой, операции, выполняемые над мантиссами и порядками (или характеристиками) этих чисел, различны. Поэтому перед началом любой арифметической процедуры каждый из операндов "расчленяется": порядок (характеристика) отделяется от мантиссы операнда, что-бы можно было над ними выполнять необходимые отдельные процедуры. После выполнения конкретного арифметического действия и обязательной процедуры нормализации результата, его порядок или характеристика и мантисса "упаковываются" в обычный формат с плавающей запятой.
В случае алгебраического сложения порядки операндов обязательно должны быть одинаковыми. Поэтому в начале процедуры сложения и вычитания чисел производится, при необходимости, выравнивание характеристик операндов. Для этого мантисса операнда с меньшей характеристикой сдвигается по разрядной сетке вправо с прибавление единицы к его характеристике при каждом сдвиге на один разряд. Эта процедура продолжается до тех пор пока характеристики обоих операндов не станут равными.
Полученная таким образом характеристика, одинаковая для обоих операндов, присваивается, как предварительная, результату операции. Далее осуществляется сложение или вычитание мантисс по правилам, аналогичным для чисел с фиксированной запятой, в частности мантисса одного из операндов преобразуется в дополнительный код для того чтобы процедуру вычитания свести к сложению. Если ответ получился в дополнительном коде, то его преобразуют в прямой, т.к. мантисса числа с плавающей запятой - это всегда модуль числа. Далее, при необходимости, выполняется нормализация и округление ответа. В процессе нормализации мантисса поразрядно сдвигается влево или вправо. При сдвиге влево на каждый разряд вычитается единица из характеристики, предварительно присвоенной ответу. При каждом сдвиге вправо - к ней прибавляется единица. Отметим, что сдвиг мантиссы вправо необходим в тех случаях, когда при сложении мантисс произошло переполнение разрядной сетки. В процессе этих последних операций определяются окончательные значения характеристики и мантиссы ответа.
Таким образом, операция нормализации числа состоит из проверки выполнения условия
0,12 m 1

и сдвига изображения мантиссы в ту или иную сторону с соответствующей коррекцией характеристики. Сдвиги могут осуществляться на один и более разрядов в левую сторону, или на один разряд в правую сторону в пределах разрядной сетки машины.
Нарушение нормализации может быть двух видов: нарушение справа, т.е. когда величина результата больше или равна 1, и слева, когда величина результата оказывается меньше 0,12.
Надо отметить, что при реализации алгоритмов математических операций в формате с плавающей запятой каждый раз, когда осуществляется та или иная процедура, затрагивающая характеристики операндов или результата, производится контроль над переполнением и исчезновением порядка, т.е. контролируется условие
0 r rmax ,
где rmax = l + pmax .
Рассмотрим пример:
Имеем 8-разрядную мантиссу и 6-разрядный порядок, смещение равно 10002. Сложим 2 числа с мантиссами m1 = 0,10100000, m2 = 0,10000000 и с характеристиками r1 = 001011, r2 = 001010. Т.к. порядки разные надо их выравнивать: r1 - r2 = 000001, значит надо сдвинуть m2 на 1 разряд вправо, а к r2 прибавить 1. После преобразований получим:
m2 = 0,01000000, r2 = 001010 + 000001 = 001011. Складываем мантиссы, получаем: m = m1 + m2 = 0,10100000 + 0,01000000 = 0,11100000, r = 001011.
Нормализация ответа не нужна.

4.2. Умножение двоичных чисел

4.2.1. Методы умножения двоичных чисел

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

1) умножение начиная с младших разрядов множителя:
1101 множимое
x 1101 множитель
1101
+ 0000
1101 частные произведения
1101
10101001 произведение

2) умножение начиная со старших разрядов множителя:
1101 множимое
x 1101 множитель
1101
+ 1101
0000
1101
10101001 произведение

В обоих случаях операция умножения состоит из ряда последовательных операций сложения частных произведений. Операциями сложения управляют разряды множителя: если в каком-то разряде множителя находится единица, то к сумме частных произведений добавляется множимое с соответствующим сдвигом (влево или вправо), если в разряде множителя - ноль, то множимое не прибавляется, но учитывается, что в последующей операции анализа разряда множителя надо сделать дополнительный сдвиг. Если, например, в следующем после нулевого разряда множителя встречается 1, то множимое сдвигается на 2 разряда и добавляется к сумме частных произведений. Сколько подряд будет встречаться 0 столько дополнительных сдвигов множимого надо будет сделать когда в очередном разряде встретится 1, а затем добавлять множимое к сумме частных произведений.
Таким образом, кроме операции сложения чисел для получения произведения необходима операция сдвига числа.

4.2.2. Умножение чисел, представленных в форме с фиксированной запятой

Рассмотрим один из возможных вариантов алгоритма умножения, когда операнды представлены в прямом коде. Перед выполнением самой процедуры умножения по обычным арифметическим правилам умножения определяется и запоминается знак произведения. Далее оба операнда представляются в прямом коде и выполняется сама процедура умножения одним из двух ранее описанных методов с обязательным контролем переполнения разрядной сетки. Если знак произведения отрицательный, то ответ, при необходимости, представляется в дополнительном коде.
Умножение чисел представленных в форме с фиксированной запятой можно организовать не только на двоичном сумматоре прямого кода, но и на двоичных сумматорах обратного или дополнительного кода. В этом случае произведение дополнительных или обратных кодов сомножителей равно дополнительному или обратному коду соответственно только в случае положительного множителя. Если же множитель отрицательный, то производится коррекция результата: в первом случае прибавляется поправка [A]= а во втором случае прибавляются поправки [A] и [A]об2-n .
Рассмотрим примеры:
1) умножим 5 на 2. 510 = 0. 01012, 210 = 0. 00102 Знак результата положительный.
0.0101
x 0.0010
0000
+ 0101
0.01010 = 1010

2) умножим 5 на 3
0.0101
x 0.0011
0101
+ 0101
0.1111 = 1510

4.2.3. Умножение чисел, представленных в форме с плавающей запятой

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

A1 x A2 = m1213EMBED Equation.31415 x m2213EMBED Equation.31415 = (m1 x m2)213EMBED Equation.31415 ,

где r1 + r2 - l - характеристика результата.
Знак ответа определяется обычным образом. Если ответ получился ненормализованный, то выполняются процедуры нормализации и округления ответа.
Напомним, что при реализации алгоритмов математических операций в формате с плавающей запятой каждый раз, когда осуществляется та или иная процедура, затрагивающая характеристики операндов или результата, производится контроль над переполнением и исчезновением порядка, т.е. контролируется условие

0 r rmax ,
где rmax = l + pmax .
Рассмотрим пример:
умножим числа с мантиссами m1 = 0,101 (5), m2 = 0,1 (2) и характеристиками
r1 = 1011, r2 = 1010, l = 1000, p1 = 3, p2 = 2, p = p1 + p2 = 5, r = r1 + r2 - l = 001011 + 001010 - 001000 = 001101 = 1310 m = m1 x m2 = 0,01010, необходимо нормализовать ответ. Для этого в данном случае сдвигаем мантиссу влево на 1 разряд и вычитаем 1 из p, получаем p = 4. В итоге имеем m = 0,10102, p = 410 = 01002, r = 1210 = 11002.

4.2.4. Ускорение операции умножения

По времени выполнения операция умножения относится к длинным операциям. Затраты времени на умножение двух чисел в прямом коде можно оценить следующей формулой (для случая последовательного анализа разрядов множителя):

13EMBED Equation.31415,

где tсдв - время выполнения сдвига числа на один разряд; tсл - время суммирования на сумматоре; pi - вероятность появления единицы в разрядах множителя; n - количество разрядов множителя.
Существуют несколько методов ускорения процедуры умножения: анализ двух разрядов множителя одновременно, анализ произвольного количества разрядов множителя, умножение в системе счисления с основанием q=2k и матричные методы умножения.
Рассмотрим первый спосо, ускорения умножения как наиболее наглядный и распространенный для целых чисел, представленных в прямом коде. В связи с тем, что в этом случае в процессе выполнения операции умножения на каждом цикле операции анализируется сразу два разряда множителя, то таких циклов понадобится n/2, где n - длина разрядной сетки множителя без учета знакового разряда. Это число циклов записывается в некоторый счетчик SС. При обнулении содержимого счетчика SС процедура умножения останавливается. Обычно анализируются два младших разряда множителя, поЭтому в конце каждого цикла производится одновременный сдвиг на два разряда вправо изображения суммы частных произведений (Р) и множителя. Причем, таким образом, чтобы при каждом таком сдвиге очередной младший разряд числа Р попадал в старший разряд мантиссы множителя. Обозначим эту процедуру условно как ПС. Очевидно, что в таком случае произведение будет сформировано в разрядной сетке первоначально отведенной для множителя.
Если множимое X и множитель Y, а его два очередных младших разряда (y1y0), то в зависимости от результата анализа этих разрядов предусматриваются следующие действия.
Если y1y0 = 00, то выполняются только процедуры: ПС и SС = SС-1.
Если y1y0 = 01, то выполняются процедуры: Р = P + X, ПС и SС = SС-1.
Если y1y0 = 10, то выполняются процедуры: сдвиг множимого влево на 1 разряд, т.е. умножение его на два, P = P + X, ПС и SС = SС-1.
Если y1y0 = 11, то выполняются три раза P = P + X и ПС, SС = SС-1.
Когда SС = 0 - операция умножения заканчивается.
Как обычно перед началом самой процедуры умножения определяется знак произведения, проверяются на 0 X и Y, если кто-нибудь из них равен 0, то произведению сразу присваивается нулевое значение.
Рассмотрим пример ускоренного умножения 310 на 7810, т.е. когда X = 3, а
Y = 78. Если n = 10, то X = 0000000112, Y = 00010011102, а SС = 5.

512 256 128 64 32 16 8 4 2 1
X 00 00 00 00 11 множимое
Y 00 01 00 11 10 множитель
R 00 11 10 10 10 ответ = 234

В некотором регистре P будем формировать частные произведения.
1) Анализ 2-х младших разрядов Y. y1y0 = 10. Сдвинуть X на 1 разряд влево и прибавить к P.

P 00 00 00 00 00
+X 00 00 00 01 10
P 00 00 00 01 10 сдвиг на 2 разряда P и Y
P 00 00 00 00 01 ---- 10 00 01 00 11 Y

2) y1y0 = 11, _ 3 раза прибавляем X к P
P 00 00 00 00 01
+X 00 00 00 00 11
P 00 00 00 01 00
+X 00 00 00 00 11
P 00 00 00 01 11
+X 00 00 00 00 11
P 00 00 00 10 10 сдвиг на 2 разряда P и Y
P 00 00 00 00 10 ---- 10 10 00 01 00 Y

3) y1y0 = 00, сдвиг на 2 разряда P и Y
P 00 00 00 00 00 --- 10 10 10 00 01 Y

4) y1y0 = 01
P 00 00 00 00 00
+X 00 00 00 00 11
P 00 00 00 00 11 сдвиг на 2 разряда P и Y
P 00 00 00 00 00 --- 11 10 10 10 00 Y

5) y1y0 = 00, сдвиг на 2 разряда P и Y
P 00 00 00 00 00 --- 00 11 10 10 10 Y = 23410


4.3. Деление двоичных чисел

4.3.1. Деление двоичных чисел, представленных в форме с фиксированной запятой.

Деление двоичных чисел во многом аналогично делению десятичных чисел.
В универсальных вычислительных машинах, как правило, реализуется "школьный" алгоритм деления чисел. "Школьный" алгоритм деления заключается в том, что делитель на каждом шаге вычитается из делимого столько раз (начиная со старших разрядов), сколько это возможно для получения наименьшего положительного остатка. Тогда в очередной разряд частного записывается цифра, равная числу делителей, содержащихся в делимом на данном шаге. Иначе говоря, при делении операцию вычитания повторяют до тех пор, пока уменьшаемое не станет меньше вычитаемого. Число этих повторений показывает, сколько раз вычитаемое укладывается в уменьшаемом.


Например:
разделим число 35 на 7 :
1) 35 - 7 = 28, 2) 28 - 7 = 21, 3) 21 - 7 = 14, 4) 14 - 7 = 7, 5) 7 - 7 = 0.
Ответ равен 5, т.к. процедура вычитания была повторена 5 раз.

Рассмотрим еще один пример:
разделим 204(10) на 12(10), т.е. 11001100(2):1100(2):

делимое 11001100 | 1100 - делитель
делитель 1100 | 10001
остаток 00001
- 0
11
- 0
110
- 0
1100
- 1100
0000

Двоичное, как и десятичное деление, начинается с анализа делимого (11001100) и делителя (1100). Сразу же обнаруживается, что делитель укладывается в 1100, а поэтому записывается 1 в старший разряд поля частного. Умножается делитель на 1 и вычитается из 1100, разность равна 0. Объединяется 0 остатка со значением следующего разряда делимого, равным 1. Поскольку делитель (1100) 0 раз укладывается в 1, записываем 0 в следующий по старшинству разряд поля частного, а число 1 объединяется со следующим разрядом делимого и т.д. до тех пор, пока делимое не оказывается исчерпанным.
Конечно компьютер не может строить догадок относительно того, сколько раз делитель укладывается в том или ином числе, поэтому весь процесс деления сводится к операциям вычитания и сдвига. Продемонстрируем на том же примере, но сначала делитель (1100) представим в дополнительном коде, что позволит ограничиться сложением во всех случаях, когда нужно выполнять сложение или вычитание: 1100пр = 1. 0100д. Частное формируется в некотором регистре С, незаполненные разряды которого будем обозначать через Х.
Начинаем вычитать делитель из делимого. Если остаток получается положительным, то в разряд частного записывается 1, в противном случае - 0.

0. 11001100 делимое 204
+ 1. 01000000 делитель 12
0. 00001100 первый остаток

Первый (старший) бит частного равен 1, т.к. остаток получился положительным: С = 1ХХХХ. Далее сдвигается первый остаток на один разряд влево и из него вычитывается делитель:

0. 00011000
+ 1. 01000000
1. 01011000 второй остаток

Остаток отрицательный, поэтому в следующий разряд частного записывается 0, С = 10ХХХ. Кроме того необходимо биты делителя вернуть обратно первому остатку, т.е. сложить делитель (в прямом коде) и второй остаток:

1. 01011000
+ 0. 11000000
0. 00011000 сдвинутый первый остаток.
Далее еще раз сдвигается сдвинутый первый остаток на один разряд влево и вычитается из него делитель:

0. 00110000
+ 1. 01000000
1. 01110000 третий остаток

Третий остаток отрицательный, значит следующий (третий) разряд частного равен 0, С = 100ХХ. Поэтому возвращаем делитель третьему остатку,

1. 01110000
+ 0. 11000000
0. 00110000 дважды сдвинутый первый остаток

Сдвигаем дважды сдвинутый первый остаток на один разряд влево и вычитаем делитель:

0. 01100000
1. 01000000
1. 10100000 четвертый остаток

Четвертый остаток опять отрицательный, поэтому С = 1000Х. Прибавляем делитель к четвертому остатку, результат сдвигаем на один разряд влево, а затем вновь вычитаем делитель:

0. 1100000 первый остаток после четвертого сдвига
+ 1. 0100000
0. 0000000 пятый остаток

Остаток положительный, значит С = 10001 = 17(10) - это и есть ответ.
Такой метод деления называется делением с восстановлением остатка.
Деление чисел, представленных в форме с фиксированной запятой можно также осуществить на двоичных сумматорах обратного и дополнительного кода.
Перед выполнением самой процедуры деления чисел в формате с фиксированной запятой определяется и запоминается знак частного. Далее оба операнда представляются в прямом коде, а делитель еще и в дополнительном для того, чтобы вычитание делителя заменить сложением, и выполняется сама процедура деления по описанному выше методу с обязательным контролем переполнения разрядной сетки. Если знак частного отрицательный, то ответ, при необходимости, представляется в дополнительном коде.
Например: разделим 35 на 5. 3510 = 0.1000112, 510 = 1012, 5д = 1.011д
(в регистре С, как и в предыдущем примере, формируется частное):
0.100011
+ 1.011000
1.111011 С = 0 восстанавливаем остаток до делимого.
+ 0.101000
0.100011 сдвигаем влево остаток.
1.00011
+ 1.01100
0.01111 С = 01, сдвигаем влево остаток.
0.1111
+ 1.0110
0.0101 С = 011, сдвигаем остаток.
0.101
+ 1.011
0.000 С = 0111 = 710
Вычитание делимого продолжают столько раз, сколько разрядов отведено для частного.

Метод деления без восстановления остатка. Как уже отмечалось, основой выполнения деления является операция вычитания с целью получения остатка, знак которого определяет цифру частного. Алгоритм выполнения деления имеет следующий вид:
X - Y = a0,

где a0 - это остаток. Если а0 0, то С = 1, если а0 < 0, то С = 0. Для определения следующей цифры частного необходимо выполнить следующие действия: при а0 0 надо 2а0 - Y = a1, а при а0 < 0 надо 2а0 + Y = a1. Как видно в данном случае знак остатка определяет не только очередную цифру частного, но и характер следующей процедуры: прибавления делителя к сдвинутому остатку, если этот остаток меньше 0, и вычитание делителя из сдвинутого остатка, если остаток больше или равен 0. Этот метод деления получил название деления без восстановления остатка.
Рассмотрим пример:
разделим 3510 на 510, т.е. 0.1000112 на 1012
0.100011
+ 1. 011000 дополнительный код 5 (т.е. вычитание 5)
1.111011 a0<0, С = 0
2a0 1.110110
+ 0.101000 5 в прямом коде
0.011110 a1>0, С = 01
2a1 0.111100
+ 1.011000 5 в дополнительном коде (т.е. вычитание 5)
0.010100 a2>0, С = 011
2a2 0.101000
+ 1.011000
0.000000 a3 = 0, С = 0111 = 710

4.3.2. Деление двоичных чисел, представленных в форме с плавающей запятой.

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

A1 : A2 = m1213EMBED Equation.31415 : m2213EMBED Equation.31415 = (m1 : m2)213EMBED Equation.31415 .

Знак ответа определяется обычным образом. Если ответ получился ненормализованный, то выполняется процедура нормализации и округления ответа.
Т.к. мантиссы операндов нормализованы, то возможны случаи, когда
|mA| |mB|; |mA| < |mB|. В первом случае перед началом деления надо вычесть делитель из делимого и в целую часть мантиссы частного записать 1. Затем продолжать делить числа обычным методом. После получения частного очевидно, что оно не будет нормализованным. Значит надо нормализовать частное, т.е. в данном случае сдвинуть его на 1 разряд вправо, а к порядку частного добавить 1.
Напомним, что при реализации алгоритмов математических операций в формате с плавающей запятой каждый раз, когда осуществляется та или иная процедура, затрагивающая характеристики операндов или результата, производится контроль над переполнением и исчезновением порядка, т.е. контролируется условие
0 r rmax ,

где rmax = l + pmax .
Рассмотрим пример:
A = 10 = 0,1010, pA = 4, B = 2 = 0,1, pB = 2. p = pA - pB = 2. mA = 0.1010,
mB = 0.1 , (mB)l = 1.1000. |mA| > |mB|. При первом вычитании mB из mA 1 записываем в целую часть частного:
0.1010
+ 1.1000
а0 0.0010 С = 1,XX, далее, будем делить методом деления без восстановления остатка.
2а0 0.0100
+ 1.1000
а1 1.1100 а1<0 С = 1,0
2a1 1.1000
+ 0.1000
0.0000 a2 = 0 С = 1,01, сдвигаем вправо С = 0,101, p = p + 1 = 3.

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

4.4. Оценка точности выполнения арифметических операций

Как уже неоднократно отмечалось, для представления чисел в любой форме в компьютере отводится конечная длина разрядной сетки. Поэтому числа, в общем случае, из-за неизбежных процедур округления, представляются с некоторой погрешностью. В связи с этим вычисления в компьютере выполня-ются с погрешностью, которая в некоторых случаях может существенно накапливаться.
Пусть величины А и В заданы с абсолютными погрешностями А и В:
А = [A] А, В = [B] В= где [A] и [B] - машинное представление чисел А и В. Тогда, как нам уже известно, относительные погрешности представления этих чисел будут равны:

A = A / |A| и B = B / |B|.

Можно показать, что относительная погрешность алгебраической суммы будет равна:
13EMBED Equation.31415,

относительная погрешность произведения:

AB = |A| + |B|,

а относительная погрешность частного:

A/B = |A| + |B|,

Из приведенных соотношений видно, что операция умножения и деления незначительно увеличивают относительную погрешность, а вычитание почти равных чисел может сильно ее увеличить. Действительно, если принять, что
= A B, а [A] мало отличается от [B], то

13EMBED Equation.31415

В связи с тем, что величина (А - В) в данном случае мала, а то А-В может быть достаточно большой величиной.
Из-за неизбежных погрешностей машинных вычислений может наблюдаться нарушение некоторых основных законов математики. Например, может не выполняться точно закон ассоциативности для умножения. Закон дистрибутивности, связывающий операции умножения и сложения, может значительно нарушаться, т.е. не будет строго выполняться равенство:

А х (В + С) = (А х В) + (А х С),

а отсюда может возникнуть ситуация, когда

2 х (А2 + В2) < (А + В)2.

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

4.4.1. Погрешность округления

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

Aq = [m]qn + [A0]qp-n ,

где [A0]qp-n = A0 - "хвост" числа, не попавший в разрядную сетку.
В зависимости от того, как учитывается величина А0 в машинном изображении, существует несколько способов округления.
1. Отбрасывание А0. При этом относительная погрешность равна

окр = 13EMBED Equation.31415.

Так как q-1 |m| < 1; то 0 |A0| < 1, поэтому

окр = 13EMBED Equation.31415 = q-(n-1) ,

т.е. погрешность округления не зависит от величины самого числа, а зависит только от количества разрядов в машине для любой системы счисления.
2. Симметричное округление. При этом производится анализ величины А0. Принимая, что

13EMBED Equation.31415\

При условии |A0| q-1 производится прибавление единицы к младшему разряду мантиссы. Абсолютная погрешность при этом

13EMBED Equation.31415

Максимально возможное значение модуля абсолютной погрешности равно 0,5qp-n , а относительная погрешность равна

окр 0,5qp-n/(mqp) = 0,5q-(n-1),

т.е. ошибка не превышает половины единицы младшего разряда. Способ симметричного округления наиболее часто применяют на практике.
3. Округление по дополнению. В этом случае для округления берется информация, содержащаяся в (n+1)-м разряде. При q = 2, если в (n+1)-м разряде содержится 1, в n-й разряд добавляется 1; если же там ноль, содержимое разрядов правее n-го отбрасывается.



Глава 5.

ВЫПОЛНЕНИЕ ОПЕРАЦИЙ НАД ДЕСЯТИЧНЫМИ ЧИСЛАМИ

5.1. Представление десятичных чисел в Д-кодах

Операции над десятичными числами (десятичная арифметика) часто включается в состав основных команд универсальных компьютеров. Кроме того, десятичная арифметика широко реализуется в электронных калькуляторах и персональных компьютерах. Поэтому кроме общей информации о возможности представления десятичных чисел разработчику необходимо знать и алгоритмы выполнения арифметических операций.
Двоично-десятичный код (Д-код) десятичного числа, как уже отмечалось, это такое его представление, в котором каждая десятичная цифра изображается четырьмя двоичными разрядами (тетрадой из двоичных символов):
A = {a4,n a3,n a2,n a1,n}n {a4,n-1 a3,n-1 a2,n-1 a1,n-1}n-1 ... {a4,0 a3,0 a2,0 a1,0}0 ,

где ai,j _ двоичные разряды тетрады, i - номер разряда внутри тетрады, j - номер самой тетрады.
Для однозначности перевода чисел в Д-код и обратно желательно, чтобы разряды тетрад имели определенный вес. Тогда значение десятичной цифры ai соответствует выражению: ai = a4d4 + a3d3 + a2d2 + a1d1, где di - вес разряда тетрады. Максимальное допустимое число в тетраде - 9. Если возникает число 10 и больше, то единица переходит в следующую старшую тетраду. Существуют различные Д-коды. Мы будем рассматривать Д-код, вес разрядов тетрады которого следующий: 8, 4, 2, 1. Этот код называется также кодом Д1 прямого замещения. Но есть Д-коды с тетрадами: 5, 1, 2, 1; 2, 4, 2, 1 и т.д. Указанные комбинации в этих Д-кодах разрешены. Все другие комбинации - запрещены. Наличие разрешенных и запрещенных комбинаций - очень важное свойство Д-кодов. Оно отличает их от обычных позиционных систем счисления, в которых все комбинации - разрешенные.
В рассматриваемом Д-коде прямого замещения (8421) разрешенные комбинации соответствуют двоичным эквивалентам десятичных цифр с весами разрядов, равных степеням основания 2. Этот Д-код чаще всего используется в различных компьютерах.
В таблице 5.1 приведены примеры записи некоторых десятичных чисел в коде Д1 прямого замещения .
Т а б л и ц а 5.1
Десятичные цифры Код Д1 Десятичные цифры Код Д1 Десятичные цифры Код Д1
0 0000 10 0001 0000 20 0010 0000
1 0001
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·5.2. Формальные правила поразрядного сложения в Д-кодах

Для определения формальных правил поразрядного сложения чисел, представленных в Д-коде, рассмотрим те особенности, которые присущи этим кодам.
1. Наличие разрешенных и запрещенных комбинаций.
Появление запрещенной комбинации при выполнении каких-то действий над числами свидетельствует о возникновении ошибки или же о необходимости ввести корректировку результата.
2. При сложении тетрад возникает потетрадный перенос, т.е. перенос 1 в старшую тетраду, вместо десятичного поразрядного переноса.
Введем правила сложения Д-кодов. При сложении чисел в Д-коде могут возникнуть следующие случаи.
1. При сложении двух тетрад в данном разряде числа образуется сумма меньше 10, значит не требуется коррекции результата. Например: сложить две тетрады a = 0100, b = 0101 при условии, что нет переноса из младшей тетрады. с = 0100 + 0101 = 1001. Результат меньше 10.
2. Свидетельством того, что результат суммирования неправильный, является либо появление запрещенной комбинации, если 15 с 10, либо появление потетрадного переноса p = 16, что превышает значение десятичного переноса на 6. Следовательно, требуется коррекция результата в данной тетраде введением поправки, равной +0110 = 6(10).
Например:
1) Сложить a = 0101, b = 1001, при наличии переноса из младшей тетрады: p = 1: c = a + b + p = 1111 - запрещенная комбинация и нужна поправка:
1111
+ 0110
[1] 0101
т.е. результат в данной тетраде равен 0101 и образован перенос в старшую тетраду.
2) Сложить 2 тетрады a = 0111, b = 1001, p = 1
c = a + b + p = [1]0001 появился потетрадный перенос и требуется коррекция результата: с = 0001 + 0110 = 0111, p = 1 - перенос в старшую тетраду.
Рассмотрим еще один пример:
сложить a = 27910 = 0010 0111 10012 , b = 58110 = 0101 1000 00012
a = 0010 0111 1001
+ b = 0101 1000 0001
0111 1111 1010
+ 0110 0110 поправки
с = 1000 0110 0000
Здесь стрелка указывает передачу 1 десятичного переноса.
Ответ: с = 1000011000002 = 86010.
Сумматор одной тетрады, предназначенный для формирования сумматоров чисел представленных в Д-коде прямого замещения может быть реализован следующим образом:

5.3. Представление отрицательных чисел в Д-кодах

Представление Д-кода в разрядной сетке машины может осуществляться в форме либо с фиксированной, либо с плавающей запятой. При этом отрицательные числа могут представляться в прямом, обратном или дополнительном коде.
Для рассматриваемого кода Д1 с комбинацией 8421 нельзя получить обратный или дополнительный код простым инвертированием, т.к. инвертирование набора тетрад означает получение дополнения до 24 - 1 = 15. Следовательно, необходимо убрать разницу. Один из используемых при этом приемов состоит в том, что во все цифровые тетрады числа в коде Д1 добавляется 0110 и после этого производится инвертирование набора. Полученное изображение представляет собой обратный код числа. А дополнительный код получается, как обычно, добавлением 1 к младшему разряду младшей тетрады. Рассмотрим примеры:

1) представить число A = -25610 = 0. 0010 0101 01102 в обратном коде для кода Д1:
1. 0010 0101 0110
+ 0110 0110 0110 во все тетрады добавили 0110
1000 1011 1100 после инвертирования имеем
Aоб = 1. 0111 0100 0011
2) представить число A = -39810 в дополнительном коде для кода Д1:
1. 0011 1001 1000
+ 0110 0110 0110 добавляем 0110
1. 1001 1111 1110 инвертируем
0110 0000 0001
+1
AД = 1.0110 0000 0010

5.4. Выполнение операций сложения и вычитания в Д-кодах

Операции сложения и вычитания в Д-кодах выполняются над операндами по формальным правилам десятичной арифметики, описанным ранее:
1. При сложении двух положительных чисел перевод в дополнительный код исключается. В случае появления потетрадного переноса или результата больше 9 производится коррекция результата прибавлением 6.
2. Сложение отрицательных чисел выполняется аналогично сложению положительных с той лишь разницей, что результату присваивается отрицательный знак.
3. При вычитании чисел осуществляется предварительный перевод в дополнительный код, а затем сложение чисел.
Рассмотрим пример когда одно число отрицательное, а другое положительное:
1) Сложить два числа в коде Д1 A = -1000 0010 0101, B = 1001 0100 0110.
[A]l = 1. 0001 0111 0101
[B] = 0. 1001 0100 0110
1. 1010 1011 1011
+ 0110 0110 0110 поправки
[C] = 0. 0001 0010 0001

5.5. Умножение чисел в Д-кодах

Выполнение операций умножения в Д-кодах принципиально производится по классической схеме. Умножение чисел сводится к последовательному суммированию частных произведений, полученных при умножении множимого на очередную цифру множителя. Так как каждая цифра множителя представляется тетрадой, то умножение сопровождается расшифровкой значения очередной тетрады множителя и сдвигом на 4 разряда сразу. Расшифровку можно осуществить разными способами. Простейшим примером является последовательное вычитание 1 из значения тетрады до получения 0 и соответственно прибавление множимого. Надо учитывать обязательно промежуточные переполнения.
Рассмотрим пример умножения двух чисел, представленных в коде Д1:
умножим X = 2510 = 0010 0101 на Y = 1210 = 0001 0010, частные произведения формируем в P. Анализ тетрад Y начинаем с младшей.

0010 0101 x 0001 0010 = 0011 0000 0000 = 30010
P 0000 0000 0000
+ X 0010 0101 0010 - 0001 = 0001 > 0, значит надо еще раз X + P
P 0000 0010 0101
+ X 0010 0101 0010 - 0001 = 0, конец анализа младшей тетрады.
P 0000 0100 1010
+ 0110 поправка
P 0000 0101 0000 сдвигаем X на 4 разряда влево и складываем с P, анализируя старшую тетраду Y.

P 0000 0101 0000
+ X 0010 0101 0000 0001 - 0001 = 0
P 0010 1010 0000
+ 0110 поправка
P 0011 0000 00002 = 30010 ответ.

5.6. Деление чисел в Д-кодах

Деление десятичных чисел в Д-кодах выполняется методом последо-вательного вычитания делителя из делимого на первом шаге и из остатков - на последующих шагах. Вычитание на каждом шаге производится до тех пор, пока не получится отрицательный остаток. Каждый раз при получении положительного остатка добавляется 1 в специальный счетчик, где накапливается очередная цифра частного. Затем осуществляется сдвиг на 4 двоичных разряда и прибавление делителя до тех пор, пока не получится положительный остаток. Количество сложений (без последнего) является дополнением соответствующей цифры частного до 9, что заносится в счетчик очередной цифры частного.
Таким образом, процесс деления состоит из ряда последовательно чередующихся циклов сложения и вычитания со сдвигами. Знак частного получается как логическая сумма по модулю 2 знаков чисел.
Рассмотрим пример деления двух чисел, представленных в коде Д1:
X = 48 = 0100 1000, Y = 2 = 0000 0010, X:Y = 24 = 0010 0100 , в С1 - формируем старшую тетраду частного, а в С2 - младшую.
0100 1000 : 0010
- 0010
0010 > 0 С1 = С1 + 1 = 1
- 0010
0000 С1 = 1 + 1 = 2 = 0010
0010
-0010
+ 0010
0000 сдвигаем Y на 4 разряда (1 тетраду) вправо и выполняем те же действия:
0100 1000
- 0010
0110 >0 С2 = С2 + 1 = 1
- 0010
0100 > 0 С2 = 1 + 1 = 2
- 0010
0010 > 0 С2 = 2 + 1 = 3
- 0010
0000 С2 = 3 + 1 = 4 = 0100

Ответ С1 + С2 = 0010 0000 + 0000 0100 = 0010 0100 = 2410

5.7. Перевод чисел из Д-кода в двоичный и из двоичного в Д-код

Пусть задано 4-х разрядное число в коде Д1 A = a4a3a2a1, каждая десятичная цифра которого должна быть представлена в виде
ai = {4 3 2 1 }i . В данном случае i = 1, 2, 3, 4. Как нам уже известно, изображение числа А можно представить в следующем виде:

A = a4103 + a3102 + a2101 + a1100 ,

Как видно из этой формулы, при переводе из кода Д1 в двоичный код каждый i-тый разряд кода Д1 надо умножать на 10I-1 , т.е.
a11 , a210 , a3100 , a41000 .
В то же время 10 = 8 + 2 = 23 + 21 , значит
a1 = {4 3 2 1 }1
a2 = {4 3 2 1 }2 (23 + 21)
a3 = {4 3 2 1 }3 (23 + 21) (23 + 21)
a4 = {4 3 2 1 }4 (23 + 21) (23 + 21) (23 + 21)

Таким образом, первая тетрада не умножается. Вторая тетрада сдвигается на 3 разряда влево и сохраняется, затем эта же тетрада сдвигается на 1 разряд влево и добавляется к сохраненной и опять сохраняется. Далее с третьей тетрадой выполняются те же процедуры, но последовательно 2 раза, а с четвертой - 3 раза. Все полученные результаты потетрадно складываются и получается число в двоичном коде.
Например, переведем 2510 = 0010 0101 в двоичную систему счисления. Вторую тетраду (0010) сдвигаем на 3 разряда влево, получаем 0001 0000. Эту же тетраду сдвигаем на 1 разряд влево и складываем с полученной:

0001 0000
+0000 0100
0001 0100
+0000 0101 (первая тетрада)
0001 1001 = 2510

Перевод из двоичной системы в код Д1 может осуществляться разными способами. В частности, для ряда последовательных операций над двоичным изображением числа может быть использована процедура деления на
10102= 1010 целых двоичных чисел. Десятичные цифры получаются последовательно одна за другой, начиная со старшего десятичного разряда. При дробных числах эта операция видоизменяется таким образом, чтобы при умножении на число 1010 можно было получить соответствующие цифры десятичных дробей.
Есть более простой способ перевода - это сдвиг влево двоичного числа столько раз, сколько разрядов в двоичном числе. Необходимо предусмотреть коррекцию в тех тетрадах, значение которых превысит 1010, или произойдет потетрадный перенос.
Например, 1100012 = 4910 переведем в код Д1.




110001
1) Сдвиг 1 10001
2) Сдвиг 1 1 0001
3) Сдвиг 1 1 0 001
4) Сдвиг и коррекция +0110 1 0 1 1 0 1 0 0 01
Рез.-т после корр. 1 0 0 1 0 01
5) Сдвиг 1 0 0 1 0 0 1
6) Сдвиг 1 0 0 1 0 0 1

Ответ 0100 1001D = 4910.

Алгоритмы перевода чисел из двоичной системы счисления в Д-код и обратно могут быть реализованы схемными или программными способами.


Глава 6

КОНТРОЛЬ РАБОТЫ ЦИФРОВОГО АВТОМАТА

6.1. Основные понятия теории кодирования

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

6.2. Кодирование по методу четности-нечетности

Если в математическом коде выделен один контрольный разряд (k=1), то к каждому двоичному числу добавляется один избыточный разряд и в него записывается 1 или 0 с таким условием, чтобы сумма цифр в каждом числе была по модулю 2 равна 0 для случая четности или 1 для случая нечетности. Появление ошибки в кодировании обнаружится по нарушению четности (нечетности). При таком кодировании допускается, что может возникнуть только одна ошибка. Пример реализации метода четности представлен в таблице 6.1.

Т а б л и ц а 6.1.
Число Контрольный разряд Проверка
10101011 1 0
11001010 0 0
10010001 1 0
11001011 0 1 - нарушение

Можно представить и несколько видоизмененный способ контроля по методу четности-нечетности. Длинное слово разбивается на группы, каждая из которых содержит n разрядов. Контрольные разряды k выделяются всем группам по строкам и по столбцам согласно следующей схеме:

a1 a2 a3 a4 a5 k1
a6 a7 a8 a9 a10 k2
a11 a12 a13 a14 a15 k3
a16 a17 a18 a19 a20 k4
a21 a22 a23 a24 a25 k5
k6 k7 k8 k9 k10

Увеличение избыточности информации приводит к тому, что появляется возможность не только обнаружить ошибку, но и исправить ее.
Например:
1001110 0
1110101 0
0101101 0
1010110 0
1101011 1
0001011

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

6.3. Коды Хеминга

Коды, предложенные американским ученым Р.Хемингом, позволяют не только обнаружить но и исправить одиночные ошибки. Эти коды - систематические. Хеминг впервые ввел понятие кодового расстояния.
Кодовым расстоянием между двумя словами называется число разрядов, в которых символы слов не совпадают.
Минимальным кодовым расстоянием (dmin) данного кода называется минимальное расстояние между двумя любыми словами в этом коде. Если длина слова n, то кодовое расстояние может принимать значение от 1 до n. Если имеется хоть одна пара слов, отличающихся в одном разряде, то минимальное кодовое расстояние равно 1. Для систематических кодов
dmin > 1. В общем случае, чтобы код позволял обнаруживать ошибки кратностью r, должно выполняться условие:

dmin r + 1.

Допустим к n0 информационным разрядам в коде Хеминга добавляется k контрольных разряда для автоматического определения местоположения ошибочного разряда. Общее количество символов n = n0 + k. Производится k проверок на четность (по количеству контрольных разрядов) и записывается k-разрядное двоичное число, которое определяет номер позиции кода с ошибкой. Если n - общее количество разрядов, то

n+1 = n0 + k + 1 2k отсюда n0 2k - k - 1.

Отсюда следует, что, например, 5 контрольных разрядов позволяют передавать 26 информационных разрядов.
Информационные и контрольные разряды необходимо размещать на определенных местах для нахождения ошибок. Обычно контрольные разряды принято размещать на позициях кода 20, 21, 22, ... (1, 2, 4, 8, 16 ...), у которых в записи есть только одна 1 (для удобства). При этом нумерация позиций идет слева направо. А нумерация позиций для записи информационных разрядов идет справа налево. Рассмотрим пример перевода двоичного кода числа в код Хеминга. Пусть надо передать информацию, для которой выделено 3 контрольных разряда, т.е. k = 3, тогда n0 = 4, т.е. для представления числа нам отводится 4 разряда. В итоге передается 7-разрядный код. Через И обозначим информационные разряды, а через К - контрольные.

1 2 3 4 5 6 7
К1 К2 И4 К3 И3 И2 И1
0 0 0 0 1 1 0

т.е. передается 01102 = 610. Для проверки на четность складываем позиции 1, 3, 5, 7 (отсчет идет слева направо), т.е. порядковые номера которых имеют 1 в младшем разряде (в двоичном представлении). Получаем: 0 + 0 + 1 + 0 = 1, сумма равна 1, значит в К1 записываем 1 (для четности). Далее аналогично складываем позиции 2, 3, 6, 7 (порядковые номера содержат 1 во втором разряде), получаем: 0 + 0 + 1 + 0 = 1, значит в К2 записываем тоже 1. И наконец складываем позиции 4, 5, 6, 7 (порядковые номера содержат 1 в третьем разряде), получаем: 0 + 1 + 1 + 0 = 0, в К3 записывается 0. Таким образом мы получили следующий код:

1 2 3 4 5 6 7
К1 К2 И4 К3 И3 И2 И1
1 1 0 0 1 1 0

Это и есть 6 в коде Хеминга. Надо отметить, что общее количество 1 в коде должно быть четным.
Теперь рассмотрим пример корректировки полученного кодированного в коде Хеминга числа, в котором есть сбой: число 0111000. Надо определить позицию, в которой произошел сбой. Для этого суммируем позиции 1, 3, 5, 7, получаем: К1 = 0 + 1 + 0 + 0 = 1. Далее суммируем позиции 2, 3, 6, 7, получаем: К2 = 1 + 1 + 0 + 0 = 0. И наконец суммируем позиции 4, 5, 6, 7, получим К3 = 1 + 0 + 0 + 0 = 1. Контрольный код равен 1012 = 510, значит ошибка на 5-й позиции кода, т.е 01111002 = 1210 .
Существует модифицированный код Хеминга, в котором добавляется еще один разряд общей четности. Такой код позволяет обнаруживать и устранять двойные ошибки. Например, записываем число 1011010, а считываем со сбоем: 1111000. Надо проинвертировать считанное число, послать его и снова считать (опять с таким же сбоем): А = 1111000 = А = 0000111, посылаем и читаем В = 0100101, складываем А и В, получаем: С = 0100010, в котором единицы показывают в каких разрядах произошел сбой.

6.4. Контроль по модулю

Контроль выполнения арифметических и логических операций можно осуществлять с помощью контрольных кодов, представляющих собой остатки от деления чисел на некоторый модуль. Такой контроль называется контролем по модулю. Для двоичных чисел этот модуль обычно равен или больше 3. Различают числовой и цифровой контроль по модулю.
При числовом методе код заданного числа определяется как наименьший положительный остаток от деления числа на выбранный модуль.
Например: определить контрольный код чисел А = 125 и В = 89 по модулю 11. 1) 125 : 11 = 12 (4), т.е. контрольный код равен 4. 2) 89 : 11 = 8 (1), т.е. контрольный код равен 1.
При цифровом методе контроля контрольный код числа образуется делением суммы цифр числа на выбранный модуль. В данном варианте возможны два пути получения контрольного кода: 1) непосредственное деление суммы цифр на модуль; 2) просто суммирование цифр по выбранному модулю.
Например: определить контрольный код для чисел 153 и 41 по модулю 3. Сумма цифр 153 равна 9, а сумма цифр 41 равна 5. Разделив эти суммы на 3 получим соответственно контрольные коды 0 и 2.

6.5. Контроль арифметических операций

Арифметические операции можно представить в виде последовательности следующих элементарных операций: передача слова, сдвиг, взятие обратного кода, сложение.
Операцию сдвига можно представить как передачу слова из i-того разряда в (i+x)-е или (i-x)-е разряды. Поэтому, контроль сдвига можно осуществить по методу четности-нечетности.
Контроль выполнения арифметических операций (сложение, вычитание, умножение) можно осуществить методом контроля по модулю. Одновременно с выполнением операции над числами та же операция производится над их контрольными кодами, и контрольный код результата основной операции сравнивается с результатом операции над контрольными кодами исходных чисел. При несовпадении фиксируется ошибка.
Например:
1) Числовой контроль. Найти контрольные коды чисел А = 571 = 1000111011 и В = 329 = 0101001001 и контрольный код их суммы по методу контроля по модулю 3. При делении А на 3 имеем остаток 012 (110), а при делении В на 3 - остаток равен 102 (210). Просуммируем эти числа и их остатки:

А = 1000111011 (01)
В = 0101001001 (10)
А + В = 1110000100 (11)

Если разделить сумму на 3 отаток будет 0, и если разделить сумму контрольных кодов на 3 остаток также будет 0. Значит операция прошла без сбоя.

2) Цифровой контроль.
На том же примере. Сумма цифр А равна 6, следовательно контрольный код равен 0. Сумма цифр В равна 4, следовательно контрольный код этого числа есть 1. Значит числа А и В с учетом контрольных кодов запишутся так:

А = 1000111011 (00)
В = 0101001001 (01)
А + В = 1110000100 (01)

Если сложить цифры результата, получим 4, следовательно контрольный код будет 1 и сумма остатков тоже 1.


Глава 7.

ОСНОВЫ АЛГЕБРЫ ЛОГИКИ

7.1. Основные понятия алгебры логики

Логической основой цифровых автоматов или компьютеров является алгебра логики (булева алгебра) - одна из основных частей математической логики. Теория логических основ цифровых автоматов чрезвычайно насыщена достаточно специфическими терминами, понятиями. Поэтому в этой главе и во всех последующих будет приведено много определений этих понятий. Причем, нередко для одного и того же понятия будет использовано несколько определений для более четкого понимания его сущности и взаимосвязи с другими специфическими понятиями теории логических основ цифровых автоматов. Итак, приведем первый вариант определения понятий логической переменной и логической функции.
Функция f(x1, x2, ..., xn) называется логической (переключательной), или булевой, если она, так же как и ее аргументы xi, может принимать только два значения: 0 или 1.
Логическая (булева) переменная эта такая величина x, которая может принимать только два значения: 0 или 1.
Таким образом, логические функции, их аргументы и просто логические переменные могут принимать только два значения 0 или 1. Причем, в этих случаях цифры 0 и 1 являются символами состояния, а не числами. Алгебра логики является алгеброй состояний, а не алгеброй чисел, поэтому эту алгебру называют также алгеброй высказываний.
Высказыванием называется утверждение, о котором можно определенно сказать, истинно оно или ложно. Если высказывание истинно, то говорят, что его значение истинности равно единице. Если же высказывание ложно, - его значение истинности равно нулю. Высказываний одновременно истинных и ложных не бывает.
Высказывания бывают простыми и сложными. Простые отдельные высказывания - это логические переменные, их принято обозначать буквами латинского алфавита. Например, если простое высказывание X истинно, то
X = 1, если же ложно, то X = 0.
Высказывания с различным содержанием обозначаются разными буквами и считаются различными. Два высказывания называются эквивалентными, если истинности их одинаковые. Эквивалентность высказываний обозначается знаком равенства или тождества: , или же знаком . Например, запись A = B означает, что A и B либо истинны, либо ложны одновременно.
Как это будет показано в дальнейшем, в вычислительной технике символу состояния 1 чаще всего ставится в соответствие наличие некоторого сигнала, в частности электрического, а символу состояния 0 - отсутствие этого сигнала. Иначе говоря, если есть некоторый источник цифровой информации, который рассматривается в качестве определенной логической переменной, например переменной А, то при наличии сигнала от этого источника А = 1, а при отсутствии - А , 0.
Очевидно, что сложное высказывание - это та или иная логическая функция некоторых логических переменных, т.е. аргументов. Знаки, объединяющие логические переменные в сложные высказывания, т.е. в логические функции, являются знаками логических действий, точнее логических связок, а не математических действий.
Совокупность значений аргументов логической функции называется набором (или точкой) и может обозначаться, в частности, как х1, х2,..., хn, где xi равно нулю или единице (i = 1, 2, ..., n). Очевидно, что набор значений аргументов фактически представляет собой некоторое двоичное число. Каждому набору значений аргументов приписывается номер, равный двоичному числу, которое соответствует значению данного набора. Например, для четырех аргументов 0, 0, 0, 0 - нулевой набор; 0, 0, 0, 1 - первый набор;
0, 0, 1, 0 - второй набор; 1, 0, 1, 0 - десятый набор и т.д.
Таким образом, логическая функция (функция алгебры логики) это функция f(x1, x2, ..., xn) которая принимает значение 0 или 1 на наборе логических переменных x1, x2, ..., xn. Каждой логической функции данного набора аргументов, также принято приписывать номер: 0, 1, 2,.......
Любая логическая функция n аргументов определена на 2n наборах, т.е. может иметь 2n наборов. Число различных логических функций n аргументов конечно и равно 213EMBED Equation.31415.
Неполностью определенная логическая функция n переменных, это функция, заданная на числе наборов меньшем 2n. Для наборов, на которых функция не определена, ее значение можно принять произвольным.
Например, для одного аргумента имеем 21, т.е. 2 набора и 22 , 4, т.е. четыре логические функции от одной переменной, которые приведены в таблице 7.1.
Т а б л и ц а 7.1
x f0(x) f1(x) f2(x) f3(x)
0 1 0 0 1
1 1 0 1 0

В связи с тем, что функция f0(x) равна единице при любых значениях аргумента, то эта функция называется абсолютно истинной (константа единицы), тогда функция f1(x) - абсолютно ложная функция (константа нуля). Функция f2(x), повторяющая абсолютное значение логической переменной, - тождественная функция: f2(x) x.
Функция f3(x), принимающая значение, обратное значению x, - логическое отрицание (инверсия), или функция НЕ (NOT), которая обозначается одним из следующих способов:

f3(x) = x = x.

Логическое отрицание или инверсия некоторой логической переменной, например переменной А, это также логическая переменная, принимающая значение обратное значению переменной А, и обозначаемая как А. Если А =1, то А = 0, если же А = 0, то А = 1. Но нужно учесть, что часто посредством отрицания, т.е. инверсии переменной просто обозначают случай, когда ее значение равно нулю.
В Таблице 7.2. приведен полный перечень всех шестнадцати элементарных логических функций от двух переменных x1 и x2.
Обратим внимание на следующие функции:
Дизъюнкция (логическое сложение) или функция ИЛИ (OR) - это функция f7(x1, x2), которая истинна тогда, когда истинна хотя бы одна из ее переменных. Условные обозначения этой функции:

f7(x1, x2) = x1 + x2 = x1 x2 = x1 ! x2

Это читается следующим образом: функция истинна, т.е. равна единице, когда аргумент x1 = 1, т.е. истинен, или аргумент x2 = 1, или же оба аргумента истинны одновременно.




Т а б л и ц а 7.2

Функция x1x2 Примечание
00 01 10 11
f0 0 0 0 0 f0 константа нуль
f1 0 0 0 1 x1 x2 конъюнкция
f2 0 0 1 0 x1 x2 запрет x2
f3 0 0 1 1 x1x2 x1x2 = x1 переменная x1
f4 0 1 0 0 x1 x2 запрет x1
f5 0 1 0 1 x1x2 x1x2 = x2 переменная x2
f6 0 1 1 0 x1 x2 сложение по модулю 2
f7 0 1 1 1 x1 x2 дизъюнкция
f8 1 0 0 0 x1 x2 функция Пирса
f9 1 0 0 1 x1 x2 равнозначность
f10 1 0 1 0 x1x2 x1x2 =x2 инверсия x2
f11 1 0 1 1 x2 x1 импликация
f12 1 1 0 0 x1 x2 x1x2 =x1 инверсия x
f13 1 1 0 1 x1 x2 импликация
f14 1 1 1 0 x1 / x2 функция Шеффера
f15 1 1 1 1 f1 константа единица

Конъюнкция (логическое умножение) или функция И (AND) - это функция f1(x1, x2), которая истинна тогда, когда все ее переменные одновременно истинны. Эту функцию условно обозначают следующим образом:

f1(x1, x2) = x1 x2 = x1 x2 = x1 & x2

Это читается следующим образом: функция истинна, т.е. равна единице, когда оба аргумента одновременно истинны, т.е. равны единице.
Функция (штрих) Шеффера или функция И-НЕ - это функция f14(x1, x2), которая ложна тогда, когда все переменные истинны. Условное обозначение этой фнкции:
f14(x1, x2) = x1/x2

Это читается следующим образом: функция ложна, т.е. равна 0, когда оба аргумента одновременно истинны, т.е. равны единице, и функция истинна, т.е. равна единице, когда или оба аргумента одновременно ложны, или же хотя бы один из них ложен.
Функция (стрелка) Пирса (Вебба) или функция ИЛИ-НЕ - это функция
f8(x1, x2), которая истинна только тогда, когда все переменные ложны. Условное обозначение этой функции:

f8(x1, x2) = x1 x2 = x1 O x2.

Это читается следующим образом: функция ложна, т.е. равна 0, когда хотя бы один из ее аргументов истинен, или же оба одновременно истинны, т.е. равны единице, и функция истинна, т.е. равна единице, когда оба аргумента одновременно ложны.
Импликация или функция ЕСЛИ-ТО (IF-THEN) это функция f13(x1, x2), которая ложна тогда и только тогда, когда x1 истинно и x2 ложно. Аргумент х1 называется посылкой, а х2 - следствием. Ее условное обозначение

f13(x1, x2) = x1 x2.

Исключающее ИЛИ (XOR) - это функция f6(x1, x2), которая обозначается знаком . Эта операция, как видно из таблицы, реализует функцию неравнозначности, т.е. фактически реализуется процедура суммирования по модулю 2, которая обозначается знаком :

f6(x1, x2) = x1 x2 = x1 x2

Все рассмотренные функции являются элементарными.
Из всех приведенных выше определениий ясно, что в алгебре логики все знаки действий: или &, или +, , и т.д, в отличии от обыкновенной алгебры, являются знаками логических связок, т.е. логических действий, а не знаками арифметических действий.
Введем еще три специфических понятия алгебры логики.
Две функции считаются равносильными друг другу, если они принимают на всех возможных наборах своих аргументов одни и те же значения.
Логическая переменная xi действительна, если значение логической функции f(x1, x2, ..., xn) изменяется при изменении xi. В противном случае эта переменная для данной функции фиктивна, т.е. не является ее аргументом.
Необходимость ввода этих двух последних понятий возникла по сле-дующей причине. При анализе некоторой неизвестной логической функции (логической схемы), для которой необходимо сформировать аналитическое выражение, не все подключаемые для этого анализа логические переменные могут быть аргументами этой функции, что и выявляется в итоге проведенного анализа.
Как будет показано в дальнейшем, любые логические операции над логическими переменными можно свести к определенной совокупности элементарных логических функций, например, таких как И, ИЛИ, НЕ и исключающе ИЛИ.
Элементарные логические операции в компьтерах выполняются также над двоичными числами, по разрядно. Рассмотрим несколько простых примеров выполнения логических операций над двумя двоичными числами:

И ИЛИ Искл. ИЛИ НЕ
01011010 0101010 0101010 01011010
11110000 1111000 1111000 10100101
01010000 1111010 1010010

Подстановка в логическую функцию вместо ее аргументов других логических функций называется суперпозицией.
Система логических функций называется функционально полной, если с помощью функций, входящих в эту систему, применяя операции суперпозиции и подстановки, можно получить любую сколь угодно сложную логическую функцию.
Элементарные функции, т.е. элементарные логические действия в цифро-вых автоматах реализуются при помощи различного типа логических электронных элементов - вентилей. Примеры некоторых таких вентилей приведены ниже.
Схема, реализующая элементарную логическую функцию НЕ:


x y =x или x y =x

Схема, реализующая элементарную логическую функцию ИЛИ:


x1
x2 y = (x1 x2) = (x1x2 ) или
Схема, реализующая элементарную логическую функцию И:


x1
x2 y = (x1 x2) = (x1 +x2 ) или


Есть вентили, выполняющие эти логические действия для 3, 4 и более переменных, а также вентили, реализующие и другие элементарные функции.
При переходе от логических функций к логическим схемам обычно принимается, что логической 1 соответствует импульсный сигнал стандартной амплитуды, например, высокого уровня, а логическому 0 - низкого уровня и обычно фиксированной длительности. Причем, все входные сигналы должны поступать на каждый вентиль одновременно.
Как любую логическую функцию можно реализовать при помощи соответствующей комбинации элементарных логических функций, так и любую логическую схему можно сформировать при помощи соответствующей комбинации логических вентилей. Все это будет еще раз обсуждаться более подробно в Главе 9.

7.2. Свойства элементарных функций алгебры логики

Рассмотрим основные законы, аксиомы и теоремы алгебры логики
Некоторые законы обычной алгебры применимы и к алгебре логики. Например:
Закон коммутативности:
для умножения
АВ = ВА;
для сложения
A + B = B + A.

Закон ассоциативности:
для умножения
A(BC) = (AB)С,
для сложения
A + (B + С) = (A + B) + С.

Закон дистрибутивности умножения по отношению к сложению:

A(B + С) = AB + AC.

В алгебре логики действует также закон дистрибутивности сложения по отношению к умножению:

A +BС = (A + B)(A + С)

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

а) б)
1) A = 1, если A 0; A = 0, если A 1;
2) Если A = 0, тоA = 1 Если A = 1, тоA = 0
3) 0 + 0 = 0; 0 0 = 0;
4) 0 + 1 = 1 1 0 = 0;
5) 1 + 1 = 1 1 1 = 1;
6)0 = 1 1 = 0;
7) A + 0 = A A 1 = A;
8) A + 1 = 1 A 0 = 0;
9) A + A = A A A = A;
10) A = A;
11) A +A = 1 AA= 0;
12) A + B + C =ABC ABC =A + B + C
(теорема де Моргана);
13) A(A + B) = A A + AB = A
(закон поглощения).
14) A +AB = A + B A(A + B) = AB

В алгебре логики широко используется также специфический закон склеивания:

15) AB +AB = B(A +A) = B (A + B)(A +B) = A

Аксиомы и теоремы, записанные слева, называются двойственными аксиомам и теоремам, записанным справа.
Двойственность определяется как изменение всех знаков операции И на знаки операции ИЛИ, всех знаков операции ИЛИ на знаки операции И, всех нулей на единицы и всех единиц на нули.
Двойственность является одним из основных свойств алгебры логики и означает, что если f(A, B, C) и f(A, B, C) - двойственные функции, то

f(A, B, C) = f(A,B,C).

Законы де Моргана являются одной из иллюстраций свойства двойс-твенности и, как уже отмечалось, могут быть сформулированы в виде:

ABC =A +B +C

A + B + C =ABC,

Из законов де Моргана вытекают следствия:

ABC = A +B +C

A + B + C = ABC.

Следовательно, появляется возможность выражать конъюнкцию через дизъюнкцию и отрицание, или дизъюнкцию - через конъюнкцию и отрицание. Законы де Моргана и следствия из них справедливы для любого количества переменных.
Функция сложения по модулю 2 представляется следующим образом:

A B = AB +AB = (A + B)(A +B)

Для этой функции справедливы следующие аксиомы:

A A = 0; A A A = A; A A = 1; A 1 =A; A 0 = A

На основании рассмотренных аксиом и свойств элементарных логических функций можно, например, вывести правила представления функций И, ИЛИ, НЕ через функцию сложения по модулЮ 2 и наоборот:

F = A 1;
A + B = A B AB
F D = (A B) (A + B)

Для функции Шеффера, которая может быть выражена соотношением
x1/x2 = x1x2
Характерны аксиомы:
x/x =x+ x/x = 1+ x/0 = 1+
x/1 =x+ x/0 = 1+ x/1 = x.

Функции И, ИЛИ, НЕ через функцию Шеффера выражаются так:

x1x2 = x1/x2 = x1/x2/x1/x2; x = x/x;
x1 + x2 = x1x2 =x1/x2 = x1/x1/x2/x2.

Функция Пирса (Вебба) может описываться следующими выражениями:

x1 x2 = x1 + x2 =x1x2

Для этой функции справедливы аксиомы:

x x =x; x 0 =x; x x = 0; x 1 = 0.

Функции И, ИЛИ, НЕ выражаются через функцию Пирса (Вебба) следующим образом:

x1x2 = (x1 x1) (x2 x2); x1 + x2 = (x1 x2) (x1 x2); x = x x.

В заключение обзора основных свойств логических функций подчеркнем, что логичекие выражения содержащие операции дизъюнкции и конъюнкции можно преобразовывать (раскрывать скобки, выносить общий множитель, переставлять местами члены и т.д.) по правилам алгебры, считая формально дизъюнкцию операцией сложения, а конъюнкцию - операцией умножения. Но нужно всегда четко помнить, что в алгебре логики, в отличие от обыкновенной алгебры, знак + либо знак означают логическую связку ИЛИ (OR), а знак умножения "" либо знаки , и &, означают логическую связку И (AND).

7.3. Аналитическое представление функций алгебры логики

Существуют различные способы представления логических функций.
Представление (описание) функции на словах. Например: функция трех аргументов принимает значение 1, если два любых аргумента или все три равны 1. Во всех остальных случаях функция рвана 0.
Табличный способ. Для представления логической функции можно использовать, так называемый, табличный способ когда функция представляется своей таблицей истинности. Приведем пример такой таблицы для некоторой логической функции трех аргументов f(x1, x2, x3):




Т а б л и ц а 7.3.

№ Набор Значение
набора x1 x2 x3 функции
0 0 0 0 1
1 0 0 1 0
2 0 1 0 0
3 0 1 1 1
4 1 0 0 1
5 1 0 1 0
6 1 1 0 1
7 1 1 1 0

Обычно в таблице истинности столбец с номером набора не приводится.
Теперь рассмотрим пример простой таблицы истинности элементарных функций AND - f1(A,B), OR - f7(A,B), XOR - f6(A,B) (из Таблицы 7.2):

Т а б л и ц а 7.4.
A B f1(A,B) f7(F=D) f6(F=D)
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

Алгебраический или аналитический способ. Табличный способ максимально наглядный, но в случае сложных функций алгебры логики (ФАЛ) достаточно некомпактный. Проще выглядит аналитическая запись в виде формул. До рассмотрения аналитической формы представления ФАЛ введем несколько новых понятий.
Переменные и их инверсии часто называют литералами.
Терм - это группа логических переменных в прямой или инверсной форме, т.е. группа литерал, объединенных одним и тем же знаком логической связки: логического сложения или же логического умножения. В терме каждая переменная или ее отрицание встречается только один раз, т.е. в терм может входить или переменная, или ее отрицание.
Дизъюнктивный терм (макстерм) - это логическая функция, связывающая все переменные в прямой или инверсной форме, т.е. литералы, знаком дизъюнкции.
Например:
H1 = A +B + C +D; H2 = A B.

Макстерм называют также конституентой нуля, т.к. эта логическая функция равна 0 только тогда, когда все ее аргументы равны 0 одновременно.
Конъюнктивный терм (минтерм) - это логическая функция, связывающая переменные в прямой или инверсной форме, т.е. литералы, знаком конъюнкци.
Например:
F1 =A & B &C & D; F2 = A B C.

Минтерм называют также конституентой единицы, т.к. эта функция равна 1 только тогда, когда все ее аргументы одновременно равны единице.
Ранг терма - r, определяется количеством литерал, входящих в данный терм.
Например, для минтерма F =ABCDE r = 5, а для макстерма H ==A + B + C r = 3.
Любая таблично заданная ФАЛ может быть представлена аналитически в виде дизъюнкции конечного числа минтермов, на каждом из которых функция равна единице:

f(x1, x2,..., xn) = F1 F2 ... Fn = Fi = Fi, (7.1)
1

где i - номера наборов, на которых функция равна 1, - знак дизъюнкции, объединяющий все минтермы Fi.
Пример: записать в аналитическом виде функцию, заданную таблично:

x1 x2 x3 f(x1, x2, x3) x1 x2 x3 f(x1, x2, x3)
0 0 0 1 1 0 0 1
0 0 1 0 1 0 1 0
0 1 0 0 1 1 0 0
0 1 1 1 1 1 1 0

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

f(x1, x2, x3) = F1(0, 0, 0) + F2(0, 1, 1) + F3(1, 0, 0) =x1x2x3 +x1x2x3 + x1x2x3.

Ответ:f(x1, x2, x3) =x1x2x3 +x1x2x3 + x1x2x3.
F1 F2 F3

Здесь надо отметить, что функция, представленная таблицей истинности, может быть определена не только ее единичными значениями, но и нулевыми.
Например, в случае предыдущей функции имеем:

f(x1, x2, x3) = f1(0, 0, 1) + f2(0, 1, 0) + f3(1, 0, 1) + f4(1, 1, 0) + f5(1, 1, 1).

Любая таблично заданная ФАЛ может быть задана аналитически в виде конъюнкции конечного числа макстермов, на каждом из которых функция равна нулю:

f(x1, x2,..., xn) = H1 H2 \\\ Hn = Hi = Hi.
0

Например, используя правила двойственности, результат предыдущего решения можно представить в следующем виде:

f(x1, x2, x3) = (x1 + x2 +x3)&(x1 +x2 + x3)&(x1 + x2 +x3)&(x1 +x2 + x3) &(x1 +x2 +x3).
H1 H2 H3 H4 H5

Нормальная дизъюнктивная форма (НДФ) это дизъюнктивное объединение минтермов различных рангов, включая ранг равный единице.
Например: f(x1,x2,x3) = x3 +x1x2 + x2x3 +x1x2x3.
Нормальная конъюнктивная форма (НКФ) это конъюнктивное объединение макстермов, включающее в себя макстермы различных рангов.
Например: f(x1,x2,x3) = (x1 +x2)(x2 + x3)(x1 +x2 + x3).
Каждая логическая функция в общем случае может иметь несколько НДФ или НКФ.
Различают также минимальные НДФ и НКФ логических функций. В частности, НДФ заданной фунции называется минимальной, если количество букв (литерал), которые она содержит, будет не больше, чем в любой другой НДФ той же функции. Именно букв, а не переменных. Например, НДФ
xy xy z yx содержит семь букв или литерал, но три переменные: x, y, z.
Минимальная форма представления ФАЛ это такая форма, которая содержит минимальное количество термов, которые имеют минимальные ранги.
Ранее мы рассмотрели процедуру формирования аналитической формы ФАЛ по ее таблице истинности. Теперь рассмотрим обратную процедуру: построение таблицы истинности по логическому выражению.
Если в логическом выражении n аргументов, то для них в таблице предусматривается n колонок и одна колонка для значений функции. Для 2n наборов аргументов выделяется такое же количество строк. После этого, начиная с нулевого набора, каждый набор вписывается в таблицу и для него вычисляется значение функции, которое также заносится в таблицу.

7.4. Совершенные нормальные формы

Нормальные конъюнктивная и дизъюнктивная формы не дают однозначного представления функции. Такое представление получается только при совершенных нормальных формах (СНФ). СНФ называют также стандартной или же канонической нормальной формой.
Совершенная нормальная форма отличается от нормальной формы тем, что всегда содержит термы только максимального ранга и дает однозначное представление функции.
Любая ФАЛ, кроме абсолютно истинной функции, может быть представлена в единственной совершенной конъюнктивной нормальной форме (СКНФ или СНКФ) или в единственной совершенной дизъюнктивной нормальной форме (СДНФ или СНДФ).
Следовательно, СНКФ - это стандартное или каноническое произведение макстермов максимального ранга данной функции, а СНДФ - стандартная или каноническая сумма минтермов максимального ранга данной функции.
СНДФ функции находят следующим образом:
выписывается ряд произведений, т.е. минтермов, всех аргументов и соединяют их знаками дизъюнкции; количество произведений должно равняться числу наборов, на которых заданная функция равна единице. В каждом минтерме над аргументом, значение которого в данном наборе равнялось нулю, ставится знак отрицания.
СНКФ функции формируют следующим образом:
формируется произведение дизъюнкций, т.е. макстермов, всех аргументов с количеством сомножителей, равным числу наборов, на которых заданная функция обращается в ноль. В каждом макстерме над аргументом, равным единице в данном наборе, ставится знак отрицания.
Пример: представить в СНДФ функцию, заданную таблично.

x1 x2 x3 f x1 x2 x3 f
0 0 0 0 1 0 0 1
0 0 1 0 1 0 1 0
0 1 0 0 1 1 0 1
0 1 1 1 1 1 1 0

Р е ш е н и е. В качестве минтермов, как и в предыдущих примерах, отбираются строки со значениями аргументов, на которых функция равна единице. В результате получаем СНДФ данной функции:

f(x1, x2, x3) =x1x2x3 + x1x2x3 + x1x2x3.

Способ преобразования НФ в СНФ.
Произвольная НДФ переводится в СНДФ следующим образом.
Пусть fндф = F1 - некоторый минтерм функции, представленной в НДФ. Тогда этот минтерм преобразуется следующим образом:

fсндф = F1xi F1xi =F1(xi +xi),

где xi - переменная, которая не входит в данный минтерм F1.
Если максимальный ранг для функции равен r, а минимальный ранг
j-того минтерма равен k, то предыдущее преобразование необходимо применить к j-му минтерму (r - k) раз.
Пример. Логическую функцию, заданную в НДФ:

f(x1, x2, x3, x4) = x1x2 x2x3x4 x1x3x4 x1x2x3x4
F1 F2 F3 F4

преобразовать в СНДФ.
Р е ш е н и е. Так как терм F4, как мы видим, имеет максимальный ранг и в него входят все переменные функции, то воспользуемся приемом преобразования fснф = F1xi F1xi = F1(xi +xi) поочередно к остальным трем термам:

F1 = x1x2(x3 x3) = x1x2x3 x1x2x3.

Оба члена полученного выражения умножим на (x4 x4).
В результате получим:

F1 = x1x2x3x4 x1x2x3x4 x1x2x3x4 x1x2x3x4.

Аналогично,

F2 = x2x3x4(x1 x1) = x1x2x3x4 x1x2x3x4.
F3 =x1x3x4(x2 x2) =x1x2x3x4 x1x2x3x4.

После приведения подобных членов определяем СНДФ данной функции:

f(x1, x2, x3, x4) = x1 x2x3 x4 x1x2 x3 x4 x1x2 x3x4 x1x2x3 x4 x1x2x3 x4 x1x2x3x4 x1 x2x3 x4 x1 x2 x3 x4.

Произвольная НКФ переводится в СНКФ путем следующего преоб-разования. Пусть макстерм fНКФ = H1. Тогда

fснкф = H1 xixi = (H1 xi)(H1 xi).

Пример. Преобразовать в СНКФ логическую функцию:

f(x1, x2, x3) = (x1 x2)(x2 x3)(x1 x2 x3)
H1 H2 H3

Р е ш е н и е. Применяем вышеупомянутое правило преобразований поочередно к макстермам H1 и H2, так как макстерм H3, как мы видим, имеет максимальный ранг:

H1 = (x1 x2) x3x3 = (x1 x2 x3)(x1 x2 x3)+
H2 = (x2 x3) x1x1 = (x1 x2 x3)(x1 x2 x3)\

После упрощений СНКФ функции примет окончательный вид:

f(x1, x2, x3) = (x1 x2 x3)(x1 x2 x3)(x1 x2 x3)

Наконец, приведем СНКФ и СНДФ для элементарных логических функций двух аргументов:

Т а б л и ц а 7.5.

Функция Обозначение функции СНДФ функции СНКФ функции
f0 0 yt bvttn (xy)(xy)(xy)(xy)
f1 xy xy (xy)( xy)(x y)
f2 x y x y (xy)(xy)(xy)
f3 x xyxy (xy)(xy)
f4 xy x y (xy)(xy)(xy)
f5 y xyxy (xy)(xy)
f6 xy xy xy (xy)(xy)
f7 xy xy xy xy xy
f8 xy xy (xy)(xy)(xy)
f9 xy xy xy (xy)(xy)
f10 y xy xy (xy)(xy)
f11 yx xy xy xy xy
f12 x xy xy (xy)(xy)
f13 xy xy xy xy xy
f14 x / y xyxyxy xy
f15 1 xyxyxyxy yt bvttn

7.5. Системы функций алгебры логики

Любая логическая функция может быть представлена многочленом вида:

f(x1, x2, ..., xn) = a0 a1x1 a2x2 .... anxn an+1x1x2 ... an+2x1x3
... aNx1x2x3....xn,

где a0, a1,..., aN - некоторые константы, равные нулю или единице; знак , как известно, означает операцию сложения по модулю два.
При записи конкретной логической функции в виде многочлена коэффициенты a0, a1,..., aN выпадают, т.к. члены при которых эти коэф-фициенты равны нулю, можно опустить, а коэффициенты, равные единицы, не писать.
Чтобы логическую функцию, заданную таблицей ее значений, представить в виде многочлена, нужно эту функцию записать в виде суммы конституент единицы, равных единице на тех же наборах, на которых равна единице заданная функция. Затем все аргументы, входящие в полученное выражение с отрицанием, заменить с помощью соотношения x = x 1, раскрыть скобки и привести подобные члены с учетом, что в данном случае x x x...x = x, если n нечетно и x x x...x = 0, если n четно.
Пример. Представить функцию f14(x, y) (см. Таблицу 7.2) в виде многочлена.
Эта функция равна единице на нулевом, первом и втором наборах, поэтому

f14(x, y) = K0 K1 K2 = xy xy xy

Используя соотношения x 1 = x b x(y z) = xy xz, после всех преобразований получим

f14(x, y) = 1 x x y y xy xy xy

Приводя подобные члены, окончательно получаем:

f14(x, y) = 1 xy.

Существует несколько классов ФАЛ, которые также важны для логического анализа.
Класс линейных функций (Кл). Логическая функция называется линейной, если она представляется полиномом первой степени:

f(x1, x2, .....xn) = k0 k1x1 k2x2 .... knxn,

где коэффициенты ki равны нулю или единице.
Для функций двух аргументов линейными являются следующие функции:
f0(x1,x2) = 0, f3(x1,x2) =x1, f5(x1,x2) = x2, f6(x1,x2) = x1 + x2, f9(x1,x2) = 1 + x1 + x2, f10(x1,x2) = 1 + x2, f12(x1,x2) = 1 + x1, f15(x1,x2) = 1.
Класс фунций, сохраняющих ноль (К0). Если функция на нулевом наборе переменных равна нулю, то говорят, что функция сохраняет ноль:

f(0, 0, ...., 0) = 0.

Для функций двух аргументов сохраняющими ноль являются следующие функции: f0(x1,x2), f1(x1,x2), f2(x1,x2), f3(x1,x2), f4(x1,x2),
· "®
·
·
·
·
·
·щ
·!
·
·
· 
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· f5(x1,x2), f6(x1,x2), f7(x1,x2).
Класс функций, сохраняющих единицу (К1). Если функция на единичном наборе переменных равна единице, то говорят, что такая функция сохраняет единицу:
f(1, 1, ...., 1) = 1.

Для функций двух аргументов сохраняющими единицу являются следующие функции: f1(x1,x2), f3(x1,x2), f5(x1,x2), f7(x1,x2), f9(x1,x2), f11(x1,x2), f13(x1,x2), f15(x1,x2).
Класс монотонных функций (Км). Для начала введем необходимые определения.
Если значение каждого аргумента одного набора больше или равно значению того же аргумента второго набора, то говорят, что первый набор не меньше второго. Такие наборы называются сравнимыми.
Если же некоторые из значений аргументов первого набора больше или равны, а другие меньше значений тех же аргументов второго набора, то такие наборы называются несравнимыми.
Например: 1,1,0,1 > 1,1,0,0; 0,1,1,0,1 > 0,1,0,0,0; 1,0,1,1 > 1,0,0,0.
Примеры несравнимых наборов: 0,1 и 1,0; 1,0,0 и 0,0,1; 1,1,1,0 и 1,0,0,1.
Функция называется монотонной, если при любом возрастании набора значения этой функции не убывают.
Для функций двух аргументов монотонными являются следующие функции: f0(x1,x2), f1(x1,x2), f3(x1,x2), f5(x1,x2), f7(x1,x2), f15(x1,x2).
Класс самодвойственных функций (КС).
Сперва дадим определение противоположных наборов.
Два набора называются противоположными, если все значения аргументов одного набора противоположны значениям аргументов другого набора. Например: 1,0,1,1,0,0 и 0,1,0,0,1,1; 1,1,1,1 и 0,0,0,0, т.е. для того, чтобы получить противоположный набор, достаточно заменить в данном наборе нули единицами, а единицы - нулями.
Логическая функция называется самодвойственной, если на каждой паре противоположных наборов она принимает противоположные значения, т.е.

f(x1, x2, ..., xn) = f(x1,x2,...xn)

Для функций двух аргументов самодвойственными являются следующие функции: f3(x1,x2), f5(x1,x2), f10(x1,x2), f12(x1,x2).
Все перечисленные классы логических функций обладают следующим свойством: любая логическая функция полученная с помощью суперпозиции и подстановки из функций одного класса, обязательно будет принадлежать этому же классу.
Функции f8(x1,x2) (функция Пирса) и f14(x1,x2) (функция Шеффера) не принадлежат ни одному из указанных классов.
Базисом называется функционально полная система элементарных логических функций, с помощью которой любая ФАЛ может быть представлена суперпозицией исходных функций.
Для того чтобы система ФАЛ была полной необходимо и достаточно, чтобы она содержала хотя бы одну функцию:
не сохраняющую нуль,
не сохраняющую единицу,
не являющейся линейной,
не являющейся монотонной,
не являющейся самодвоственной.
К Базису относится система фунций И, ИЛИ, НЕ (базис 1). Базисами являются также системы, содержащие функции И, НЕ (базис 2), ИЛИ, НЕ (базис 3), состоящие из функции Шеффера (И-НЕ) (базис 4) или функции Пирса (Вебба) (ИЛИ-НЕ) (базис 5). Это перечисление показывает, что базисы могут быть избыточными (базис 1) и минимальными (базисы 4 и 5). Базис является минимальным, если удаление хотя бы одной функции превращает систему ФАЛ в неполную.
Проблема простейшего представления логических функций сводится к выбору не только базиса, но и формы наиболее экономного представления этих функций.
Еще раз подчеркнем, что функционально полными будут следующие пять систем элементарных функций, пять базисов:

1) Y =X отрицание - НЕ,
Y = X1X2 - И, (избыточная)
Y = X1 + X2 - ИЛИ.

2) Y = X отрицание - НЕ,
Y = X1X2 - И.

3) Y = X отрицание - НЕ,
Y = X1 + X2 - ИЛИ.

4) Y = X1X2 штрих Шеффера - И-НЕ.

5) Y = X1 + X2 стрелка Пирса - ИЛИ-НЕ.

Как уже отмечалось, каждая из перечисленных простых логических функций аппаратно реализуется при помощи определенных электронных логических элементов.
Недостающие функции можно получить на основе известных правил алгебры логики. Таким образом достаточно иметь один тип логического элемента И-НЕ или ИЛИ-НЕ, чтобы на его основе построить все многообразие логических схем. Однако для реализации сложных ФАЛ такой способ может потребовать большого числа корпусов логических элементов. Поэтому на практике, при необходимости, используют и другие логические элементы, реализующие более сложные логические функции.

7.6. Числовое и геометрическое представление логических функций

Как уже отмечалось, для упрощения записи логических функций вместо полного перечисления термов часто используют только номера наборов, для которых функция принимает единичное значение. Например, если некоторая, заданная таблично, функция f(x1, x2, x3) принимает значение единицы на наборах с номерами 0, 3, 4 и 6, то ее можно представить следующим образом:

f(x1, x2, x3) = F(0, 3, 4, 6),
1
или
f(x1, x2, x3) = F(0, 3, 4, 6),

Если эта же функция на наборах 1, 2, 5, 7 - принимает значение 0, то ее можно представить так:

f(x1, x2, x3) = F(1, 2, 5, 7),
0
или
f(x1, x2, x3) = F(1, 2, 5, 7)

Такую форму записи называют числовой.
Первый вид такой формы используют когда функция представляется в СНДФ, а второй - когда в СНКФ.
Многие преобразования, выполняемые над логическими функциями, иногда удобно интерпретируются с использованием их геометрических представлений. Например, функцию двух переменных можно интерпретировать как некоторую плоскость, заданную в системе координат х1, х2. Если отложить по каждой оси единичные отрезки х1 и х2, то получится квадрат, вершины которого соответствуют комбинациям переменных.

x1

x1x2 x1 x1x2


x2 x2


x2
x1x2 x1 x1x2

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

x1x2 + x1x2 = x2,

т.к, как нам уже известно, из свойств логических функций, что

x1x2 + x1x2 = (x1 + x1)x2 = 1x2 = x2

Для функций трех переменных геометрическое представление выполняют в виде трехмерного куба. Ребра куба поглощают вершины. Грани куба поглощают свои ребра и, следовательно, вершины.
В случае же четырех переменных - "четырехмерного" куба. В геометрическом смысле каждый набор переменных x1, x2, x3,...., xn можно рассмаривать как n-мерный вектор, определяющий точку n-мерного простанства. Поэтому все множество наборов, на которых определена функия n переменных, представляется в виде вершин n-мерного куба. Координаты вершин куба указываются в порядке, соответствующем порядку перечисления переменных в записи функции. Отмечая точками вершины, в которых функция принимает значение, равное единице, получаем геометрическое представление ФАЛ.


Глава 8.

УПРОЩЕНИЕ И МИНИМИЗАЦИЯ ЛОГИЧЕСКИХ ФУНКЦИЙ

8.1. Задача минимизации

Как уже отмечалось, сложность логического выражения определяется числом букв, входящих в это выражение, т.е. числом переменных и их инверсий. Напомним, что переменные и их инверсии часто называют литералами. В частности, выражение в форме логической суммы минтермов с минимальным числом литерал называют минимальной суммой, т.е. минимальной НДФ (МНДФ). Минимальным числом литерал должны отличаться и минимальные НКФ (МНКФ), т.е. минимальные произведения макстермов.
Очевидно, что сложность логической функции, а отсюда сложность и стоимость реализующей ее схемы (цепи), пропорциональны числу логических операций и числу вхождений переменных или их отрицаний. В принципе любая логическая функция может быть упрощена непосредственно с помощью аксиом и теорем логики, но, как правило, такие преобразования требуют громоздких выкладок. К тому же процесс упрощения булевых выражений не является алгоритмическим. Поэтому более целесообразно использовать специальные алгоритмические методы минимизации, позволяющие проводить упрощение функции более просто, быстро и безошибочно. К таким метода относятся, например, метод Квайна, метод карт Карно (диаграммы Вейча), метод Квайна-Мак-Класки и др. Эти методы наиболее пригодны для обычной технической практики, особенно минимизация логической функции с использованием карт Карно. Метод карт Карно сохраняет наглядность при числе переменных не более шести. При достаточно редких случаях, когда число аргументов больше шести, обычно используют метод Квайна-Мак-Класки. В связи с тем, что для обычной практики метод Карно наиболее оптимален, в дальнейшем, при обсуждении методов минимизации логических функций, в основном, будет описываться и применяться этот метод.
В процессе минимизации той или иной логической функции, обычно, учитывается в каком базисе эффективнее будет реализовать ее минимальную форму при помощи электронных схем.
Рассмотрим некоторые определения, которые будут использоваться в дальнейшем.
Произведение нескольких переменных, взятых с отрицаниями или без них, т.е. минтерм, называется также элементарным произведением, а дизъюнкция переменных, часть из которых может иметь отрицания, т.е. макстерм, называется элементарной дизъюнкцией.
Тогда НДФ функции есть логическая сумма любых элементарных произведений, т.е. минтермов, а НКФ - произведение любых элементарных дизъюнкций, т.е. макстермов.
Два слагаемых функции, представленной в СНДФ, или вообще два любых терма, отличающихся только одной переменной (в одном она имеет отрицание, а в другом - нет) называются соседними.
Теперь введем понятие накрытия для логических функций.
Пусть на каком-либо наборе аргументов функция f принимает значение а1, а функция на этом же наборе принимает значение а2. Тогда говорят, что функция f на данном наборе накрывает значение а2 функции своим значением а1.
Так, например, в СНДФ каждая единица заданной логической функции накрывается единицей только одного минтерма. Поэтому количество минтермов, входящих в СНДФ, равняется числу наборов, на которых функция равна единице. Например, СНДФ функции f11(x1,x2) (см. таблицу 7.5) имеет вид: f11(x1,x2) =x1x2x1x2x1x2. Нетрудно увидеть, что каждый минтерм, входящий в эту форму, накрывает только одну единицу функции.
Если некоторая логическая функция (в частном случае элементарное произведение) равна нулю на тех же наборах, на которых равняется нулю другая функция f, то говорят, что функция входит в функцию f. Другими словами, функция входит в функцию f тогда, когда она накрывает нулями все нули функции f, а единицы функции f могут быть накрыты как нулями, так и единицами функции . Вхождение обозначается: f. Например, в функцию f6(x1,x2) (см. таблицу 7.2) будут входить все функции, принимающие нулевые значения на наборах 0,0 и 1,1, т.е. функции f4(x1,x2) =x1x2, f2(x1,x2) = x1x2 и f0(x1,x2) = 0. Очевидно, что константа ноль входит во все функции, а в константу единица входят все функции.
Функцию , входящую в данную функцию f, называют ее импликантой.
Простыми импликантами логической функции f называют такие элементарные произведения или элементарные суммы, которые сами входят в данную функцию, но никакая собственная часть этих произведений не входит в функцию f.
Собственной частью называют произведение, полученное путем исключения из данного произведения одного или нескольких сомножителей. Например произведение xyz имеет такие собственные части: xy, yz, xz, x, y, z.
Простые импликанты представляют собой самые короткие элементарные произведения или самые короткие суммы, входящие в данную логическую функцию.
Для того, чтобы найти простые импликанты логической функции надо выписать все элементарные произведения, входящие в данную функцию, и выбрать из их числа те, собственные части которых в эту функцию не входят.
Пример. Рассмотрим логическую функцию трех аргументов, заданную следующей таблицей:

x y z f(x,y,z)
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 0

В эту функцию входят четыре элементарных произведения:xyz, xyz, xyz, xy. Простой подстановкой значений аргументов нетрудно проверить, что эти произведения обращаются в ноль на всех наборах, на которых равна нулю заданная функция. Простыми импликантами будут только два произведения: xyz и xy. А собственная часть xy оставшихся произведений входит в заданную функцию, поэтому они не являются элементарными.
Любая логическая функция равняется дизъюнкции всех своих простых импликант. Дизъюнкция всех простых импликант называется сокращенной дизъюнктивной нормальной формой логической функции.
Простые импликанты накрывают единицами не одну, а несколько единиц заданной функции. Например, простая импликанта x1 функции f11(x1,x2) обращается вместе с этой функцией в единицу на наборах 1,0 и 1,1, а простая импликанта x2 - на наборах 0,0 и 1,0. Поэтому простые импликанты x1 иx2 совместно накрывают единицами все единицы функции f11(x1,x2), которая вследствие этого может быть представлена в форме

f11(x1,x2) = x1x2,

что является сокращенной НДФ функции f11(x1,x2).
В таблице 8.1 приведены простые импликанты и сокращенные НДФ логических функций двух аргументов.

Т а б л и ц а 8.1. Простые импликанты логических функций двух аргументов

Логические функции Элементарные произведения, входящие в функцию Простые импликанты Сокращенная дизъюнктивная форма
f0(x,y) Ytn Ytn 0
f1(x,y) xy xy xy
f2(x,y) xy xy xy
f3(x,y) x, xy, xy x x
f4(x,y) xy xy xy
f5(x,y) xy, xy, y y y
f6(x,y) xy, xy xy, xy xy xy
f7(x,y) xy, xy, xy, x, y x, y x y
f8(x,y) xy xy xy
f9(x,y) xy, xy xy, xy xy xy
f10(x,y) xy, xy, y y y
f11(x,y) y, x, xy, xy, xy x, y x y
f12(x,y) xy, xy, x x x
f13(x,y) x, xy, y, xy, xy y, x x y
f14(x,y) x, y, xy, xy, xy x, y x y
f15(x,y) x, y, x, y, xy, xy, xy, xy x, y, x, y 1

Теперь рассмотрим процесс упрощения логических выражений с использованием теорем и правил алгебры логики.
Наиболее эффективными для этого процесса являются закон поглощения и закон склеивания. Напомним, что в применении к функции в СНДФ эти законы имеют вид: XY + XY = Y b X + XY = X, где X и Y - любые функции.
Кроме того, применяется теорема де Моргана, вынесение общих членов за скобки, метод испытания членов и т.д.
Рассмотрим два простых примера.
Дана некоторая функция в СНДФ:

F(A, B, C) = ABC + ABC + ABC + ABC.

Четвертое слагаемое является соседним с любым из первых трех, поэтому есть смысл добавить это слагаемое еще два раза. Тогда получим:
F(A, B, C) = ABC + ABC + ABC + ABC + ABC + ABC.
Путем попарного склеивания получим:
F = AB + BC + AC.
Это выражение является тупиковой формой, т.к. не имеет избыточных слагаемых.
Рассмотрим второй пример.
Упростим выражение:
x1x2 + x1x2 + x1x2 + x2x3

упрощение производится следующим образом:

x1x2 + x1x2 + x1x2 + x2x3 =
=x1x2 + x1x2 + x1x2 + x1x2 + x2x3 по теореме x + x = x
=x2x1 +x2x1 + x1x2 + x1x2 + x2x3 по теореме xy = yx
=x2(x1 + x1) + x1(x2 + x2) + x2x3 по теореме x(y + z) = xy + xz
=x2(x1 +x1) + x1(x2 +x2) + x2x3 по теореме x + y = y + x
=x21 + x11 + x2x3 по теореме x +x = 1
=x2 + x1 + x2x3 по теореме x1 = x
= x1 +x2 + x2x3 по теореме x + y = y + x
= x1 +x2 + x3 по теореме x + xy = x + y

Таким образом получаем:x1x2 + x1x2 + x1x2 + x2x3 = x1 +x2 + x3

В функции, представленной в СНДФ, отыскиваются все соседние слагаемые и производится их склеивание. Можно применить и групповое склеивание, т.е. в выражении отыскиваются слагаемые, имеющие общие переменные, которые выносятся за скобки, а в скобках остается группа слагаемых более низкого ранга. Если эта группа состоит из 2k слагаемых k-го ранга, то она представляет собой полную совершенную форму для k переменных и, следовательно, равна единице. В результате остается одно слагаемое, содержащее переменные, вынесенные за скобки. Для удобства склеивания, в том числе и группового, если это необходимо, добавляют слагаемые, уже имеющиеся в исходном выражении.
После того, как возможности склеивания исчерпаны, делается попытка исключить избыточные слагаемые применением закона поглощения и, при необходимости, метода испытания членов, который заключается в следующем. Предварительно выполняются все возможные упомянутые процедуры склеивания и поглощения и тем самым получается сокращенная НДФ. Далее выполняется сам метод испытания каждого члена полученного выражения. Чтобы испытать некоторый член следует исключить его из сокращенной НДФ и подставить в оставшееся выражение такие значения переменных, при которых исключенный член обращается в единицу. Если при этом выражение тоже тождественно равно единице, то испытываемый член является лишним. После того, как будут отброшены таким образом все лишние слагаемые, получается тупиковая НДФ.
Пример. Найти тупиковые формы логической функции, заданной в сокращенной НДФ
f(A,B,C) = ABACBC.
1) Испытаем член AB, для чего подставим в выражение ACBC значения переменных A = 0, B = 0 (при этом AB = 00 = 1):
0C0C = C.
Так как это выражение не равно тождественно 1, то член AB исключать нельзя.
2) Испытаем член AC. Подставляя в выражение ABBC значения A = 1 b
C = 1 (AC = 11 = 1), убеждаемся, что его исключить нельзя:
1BB1 = 0BB1 =B.
3) Испытаем член BC, для чего подставим в выражение ABAC значения переменных B = 0, C = 1 (BC = 01 = 11 = 1):
A0A1 = A1A1 = AA = 1.
Полученное выражение тождественно равно 1, поэтому член BC можно исключить.
Ответ. Заданная функция имеет одну тупиковую форму, которая и является минимальной:
f(A,B,C) = ABAC.

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

8.2. Метод Квайна и импликантные матрицы

Метод получения сокращенной дизъюнктивной нормальной формы логической функции называется методом Квайна.
При минимизации по методу Квайна в базисе 1 предполагается, что исходная функция задана в СНДФ.
Напомним, что импликанта функции - это некоторая логическая функция, обращаемая в ноль при наборе переменных, на которых сама функция также равна нулю.
Поэтому любой минтерм в составе СНДФ, или группа минтермов, соединенных знаками дизъюнкции, являются импликантами исходной НДФ.
Первичная или простая импликанта функции - это импликанта типа элементарной конъюнкции некоторых переменных, никакая часть которой уже не является импликантой данной функции.
Дизъюнкция простых импликант, ни одну из которых исключить нельзя, называется тупиковой НДФ заданной функции. Некоторые функции имеют несколько тупиковых форм. Тупиковые формы, содержащие наименьшее количество букв, будут минимальными.
Задача минимизации по методу Квайна состоит в попарном сравнении всех импликант, входящих в СНДФ, с целью выявления возможности поглощения какой-то переменной:
Fxi Fxi = F
Таким образом, удается снизить ранг термов. Эта процедура проводится до тех пор, пока не останется ни одного члена, допускающего поглощение с каким-либо другим термом. Термы, подвергшиеся поглощению, отмечаются. Неотмеченные термы представляют собой первичные импликанты.
Полученное логическое выражение не всегда оказывается минимальным. Поэтому исследуется возможность дальнейшего упрощения. Для этого составляется таблица, в строках которой записываются найденные первичные импликанты, а в столбцах указываются термы исходного уравнения. Клетки этой таблицы отмечаются в случае, если первичная импликанта входит в состав какого-либо терма. После этого задача упрощения сводится к тому, чтобы найти такое минимальное количество первичных импликант, которые покрывают все столбцы.
В этом методе используются операции неполного склеивания (полным склеиванием, как нам известно, будет:xy xy = x) и поглощения (x xy = x). Применяемая в методе Квайна операция неполного склеивания определяется формулой: xy xy = x xy xy. Заметим, что в правой части равенства, кроме члена ч, полученного в результате полного склеивания, остаются оба члена, участвующие в склеивании.
Теорема Квайна. Если в совершенной дизъюнктивной нормальной форме логической функции провести все операции неполного склеивания и затем все операции поглощения, то в результате получается сокращенная дизъюнктивная нормальная форма этой функции, т.е. дизъюнкция всех ее простых импликант.
Метод Квайна выполняется в несколько этапов и сокращенную НДФ удобно находить в следующей последовательности.
Провести в СНДФ функции все возможные операции склеивания конституент единицы. В результате этого образуются произведения, содержащие (n - 1) букв. Подчеркнем, что склеиваться могут только произведения с одинаковым числом букв. Поэтому после этой процедуры производится операция поглощения, а затем выполняются все возможные склеивания членов с (n - 1) буквой.
После этого проводится поглощение членов с (n - 1) буквой и вновь выполняется операция склеивания членов с числом букв, равным (n - 2), и т.д.
Пример. Найти сокращенную дизъюнктивную нормальную форму логической функции, заданной таблично.

x 0 0 0 0 1 1 1 1
y 0 0 1 1 0 0 1 1
z 0 1 0 1 0 1 0 1
f(x, y, z) 0 0 0 1 1 1 0 0

Представим функцию в совершенной дизъюнктивной нормальной форме
f(x, y, z) =xyz xyz xyz.
В правой части полученного выражения можно выполнить только одно склеивание: второго члена с третьим по переменной z. При этом получим
f(x, y, z) = xy xyz xyz xyz.
Произведение xy поглощает члены xyz b xyz:
f(x, y, z) = xy xyz.
Это выражение является сокращенной дизъюнктивной нормальной формой заданной логической функции, так как дальнейшее применение склеивания и поглощения невозможно.
Теперь рассмотрим процедуру минимизации более сложной функции с использованием импликативных матриц.
Предположим, что требуется найти минимальную НДФ логической функции, СНДФ которой определяется выражением:
f(A, B, C, D) =ABCD ABCD ABCD ABCD ABCD ABCD
Построим для этой функции импликантную матрицу, представляющую собой таблицу, в вертикальные и горизонтальные входы которой записываются все конституенты единицы, т.е. все минтермы, и все простые импликанты заданной функции соответственно.
Для нахождения простых импликант мы должны провести вначале процедуру неполного склеивания. Чтобы быстрее находить члены, которые склеиваются друг с другом, напомним, что склеиваться могут только соседние члены, т.е. такие члены, у которых число переменных с отрицаниями отличается на единицу. Проведем операции склеивания в следующем порядке:
- выполним все возможные склеивания 1-го члена с остальными;
- выполним все возможные склеивания 2-го члена с остальными, кроме 1-го;
- выполним все возможные склеивания 3-го члена с остальными, кроме 1-го и 2-го и т.д.
Запишем результат:
1* - 2* =ABCD ABCD = ACD(BB) =ACD (по B);
2 - 3* =BCD (по A);
3 - 4* = ABD (по C);
4 - 5* = ABC (по D);
5 - 6* = BCD (по A).
Получили простые импликанты. После процедуры неполного склеивания выражение примет следующий вид:
f(A, B, C, D) =ABCD* +ACD +ABCD* +BCD + ABCD* + ABD + ABCD* +ABC + ABCD* +BCD +ABCD*
Звездочками отмечены те члены, которые поглощаются произведениями, образовавшимися после склеивания. Теперь проведем операцию поглощения. Для каждой импликанты найдем конституенты единицы, т.е. минтермы, которые ею поглощаются, т.е. те конституенты, собственной частью которых является данная импликанта. Например, импликанта ACD поглощает конституенты ABCD, ABCD, импликанта BCD - конституенты ABCD, ABCD и т.д.
ABCD* +ACD = ACD(1 + B) =ACD;
ABCD* + ABCD* +BCD = BCD(1 + A +A) =BCD;
ABCD* +ABC = ABC(1 + D) =ABC;
ABCD* +ABCD* +BCD = BCD(1 + A +A) = BCD;
Теперь рассмотрим принцип построения и использования импликантной матрицы на примере матрицы, приведенной в Таблице 8.2.
Клетки импликантной матрицы, образованные пересечением строк с импликантами и колонок с поглощенными ими конституентами, отметим крестиками.
Т а б л и ц а 8.2. Импликантная матрица

Конституенты единицы
№ п/п\ Простые импликанты ABCD ABCD ABCD ABCD ABCD ABCD
1 2 3 4 5 6
1 ACD X X
2 BCD X X
3 ABD X X
4 ABC X X
5 BCD X X

Чтобы получить минимальную НДФ заданной функции, достаточно найти минимальное число импликант, которые совместно накрывают крестиками все колонки импликантной матрицы.
Из таблицы следует, что в минимальную форму обязательно должны войти импликанты ACD и BCD, так как только они накрывают крестиками первую и шестую колонки таблицы.
Кроме того, импликанта ACD накрывает вторую, а импликантаBCD - пятую колонки. Поэтому остается накрыть только третью и четвертую колонки таблицы. Для этого можно выбрать пары импликант BCD и ABD; ABD и ABC или одну импликанту ABD. Если выбрать указанные выше пары импликант, члены BCD и ABC оказываются лишними, так как импликанта ABD одна накрывает третью и четвертую колонки таблицы. Таким образом, выбрав импликанту ABD, получим минимальную НДФ заданной функции:
f(A, B, C, D) =ACDABDBCD.
На основании вышеизложенного сформулируем алгоритм получения минимальных НДФ логической функции.
1. Логическую функцию представляют в совершенной НДФ, применяя либо запись "по единицам" функции, если функция задана таблично, либо применяя операции развертывания, правила де Морганаи и другие формулы алгебры логики, если функция задана в произвольной аналитической форме.
2. В полученной совершенной НДФ проводят все операции неполного склеивания и поглощения. В результате получается сокращенная НДФ заданной функции.
3. Находят минимальные НДФ по импликантной матрице. Если количество членов в сокращенной НДФ невелико, то можно найти тупиковые формы методом испытания членов и выбрать среди них минимальные.
Заметим, что в ряде случаев минимальная НДФ совпадает с сокращенной. Например, сокращенная НДФ любой логической функции двух аргументов совпадает с минимальной, в чем нетрудно убедиться, проведя испытание членов в сокращенной НДФ любой функции, приведенной в Таблице 7.2.
Для того чтобы найти выражение заданной логической функции, наиболее удобное для синтеза логической схемы, следует, кроме МНДФ функции, получить также ее минимальную НКФ и выбрать из них ту, при технической реализации которой потребуется наименьшее количество логических элементов.
Один из алгоритмов получения МНКФ функции практически аналогичен описанному. В этом случае также вначале тем или иным способом формируется СНКФ функции. Далее находится сокращенная НКФ, по которой определяются тупиковые НКФ. Наконец, по ним находится МНКФ заданной функции. Только очевидно, что если функция задана таблично, то СНКФ формируется "по нулям" функции. Во всех же дальнейших процедурах минимизации учитывается, что в этом случае используются макстермы, т.е. элементарные суммы, а не элементарные призведения. Импликанта, в том числе и простая, - также элементарная сумма.
Операция неполного склеивания и поглощения для конъюнктивной формы определяется соответственно следующими соотношениями:

(x + y)(x +y) = x(x + y)(x +y),
x(x + y) = x,

а формулы развертывания имеют вид:
x = (x + y)(x +y),
(x + y) = (x + y + z)(x + y +z).

При испытании членов сокращенной НКФ исключают испытываемый член и в оставшееся выражение подставляют такие значения переменных, которые обращают исключенный член в ноль. Если при этом оставшееся выражение также будет равно нулю, то испытываемый член является лишним. Таким образом получают тупиковые НКФ, из которых выбирают МНКФ. Если полученная сокращенная НКФ содержит большое число членов, то МНКФ получают с помощью импликантных матриц по методике, аналогичной используемой для получения МНДФ.
Но можно использовать и другой способ получения МНКФ. Предварительно находится МНДФ функции. Потом от полученной МНДФ берется отрицание и после преобразования по формулам де Моргана получают МНКФ заданной функции.

8.3. Метод Карно (диаграммы Вейча)

Процесс упрощения булевых, т.е. логических, выражений, как уже отмечалось, не является алгоритмическим. Далеко не очевидно, какое из тождеств следует применить на том или ином шаге. Исскуство приходит только с опытом. Поэтому для упрощения булевых выражений были разработаны алгоритмические методы. Например, метод карт Карно.
Карты Карно (их разновидностью являются карты Вейча, которые строятся как развертки куба на плоскости), являются графическим представлением таблиц истинности. Поэтому они строятся или по таблице истинности анализируемой функции, или же по ее СНДФ.
Напомним, что каждая строка таблицы истинности, для которой функция равна единице, соответствует конкретному минтерму функции, представленной в СНДФ. Строка, для которой функция равна нулю является определенным макстермом функции, представленной в СНКФ.
Карта Карно представляет собой прямоугольник, разбитый на квадраты, число которых равно общему числу наборов для данной функции n переменных, т.е. оно равно 2n. Так, для функции четырех переменных квадратов будет 16, для пяти переменных - 32 и т.д. Каждый квадрат соответствует определенному набору или терму, причем наборы располагаются так, чтобы соседние наборы или термы, как по горизонтали, так и по вертикали, отличались бы только значением одной переменной: в одном квадрате она с инверсией, а в другом, соседнем - без. Функцию в СНДФ наносят на карту, отмечая, например, знаком 1 квадраты, соответствующие тем наборам, на которых функция равна единице, т.е. в СНДФ функции есть соответствующий минтерм. Остальные квадраты отмечаются знаком 0. Иногда в углу квадрата ставят номер набора. Такой способ используется, если функция задана числовым образом, но он неудо-бен для процедуры минимизации.
Рассмотрим примеры построения карт Карно по таблицам истинности для 2-х, 3-х и 4-х переменных.
1) Логическая функция двух переменных, где а) - таблица истинности; а б) - карта Карно.

x y f(x,y)
0 0 f(0,0)
0 1 f(0,1) y = 0 y = 1
1 0 f(1,0) x = 0 f(0,0) f(0,1)
1 1 f(1,1) x = 1 f(1,0) f(1,1)
а б

2) Логическая функция трех переменных.

x y z f(x,y,z)
0 0 0 f(0,0,0)
0 0 1 f(0,0,1)
0 1 0 f(0,1,0)
0 1 1 f(0,1,1)
1 0 0 f(1,0,0)
1 0 1 f(1,0,1) yz = 00 yz = 01 yz = 11 yz = 10
1 1 0 f(1,1,0) x = 0 f(0,0,0) f(0,0,1) f(0,1,1) f(0,1,0)
1 1 1 f(1,1,1) x = 1 f(1,0,0) f(1,0,1) f(1,1,1) f(1,1,0)
а б

3) Логическая функция четырех переменных.

w x y z f(w,x,y,z)
0 0 0 0 f(0,0,0,0)
0 0 0 1 f(0,0,0,1)
0 0 1 0 f(0,0,1,0)
0 0 1 1 f(0,0,1,1)
0 1 0 0 f(0,1,0,0)
0 1 0 1 f(0,1,0,1)
0 1 1 0 f(0,1,1,0)
0 1 1 1 f(0,1,1,1)
1 0 0 0 f(1,0,0,0)
1 0 0 1 f(1,0,0,1)
1 0 1 0 f(1,0,1,0)
1 0 1 1 f(1,0,1,1) yz = 00 yz = 01 yz = 11 yz = 10
1 1 0 0 f(1,1,0,0) wx = 00 f(0,0,0,0) f(0,0,0,1) f(0,0,1,1) f(0,0,1,0)
1 1 0 1 f(1,1,0,1,) wx = 01 f(0,1,0,0) f(0,1,0,1) f(0,1,1,1) f(0,1,1,0)
1 1 1 0 f(1,1,1,0) wx = 11 f(1,1,0,0) f(1,1,0,1) f(1,1,1,1) f(1,1,1,0)
1 1 1 1 f(1,1,1,1) wx = 10 f(1,0,0,0) f(1,0,0,1) f(1,0,1,1) f(1,0,1,0)
а б

Карту Карно для функции, например, четырех переменных A, B, C, D можно представить и таким образом:

AB
00 01 11 10
00
CD 01 @[email protected]
11
10

Например, в клетке "а" записывается значение ЛФ на наборе 0101, т.е. на наборе FDCD\
В таком виде карту Карно для пяти аргументов A, B, C, D, E можно представить в следующем виде:

A=0 A=1
DE DE
00 01 11 10 10 11 01 00
00
BC 01 @[email protected]
11
10

Например, в клетке "а" записывается значение ЛФ на наборе 00110, т.е. на наборе FDCDE\
Наконец, карта Карно для шести аргуменов A, B, C, D, E, F может выглядеть, например, следующим образом:

A=0 A=1
DE DE
00 01 11 10 10 11 11 00
00
F=0 BC 01
11
10
10
F=1 BC 11
01 @[email protected]
00
00 01 11 10 10 11 01 00
DE DE
A=0 A=1

Например, в клетке "а" записывается значение ЛФ на наборе 001111, т.е. на наборе FDCDF\
Карту Карно для ЛФ, в частности пяти аргументов ABCDE, представляют и таким образом:

B B
E E E
A C
@[email protected] C
A @,@
C
D D D D D

Например, в клетке "а" записывается значение ЛФ на наборе ABCDE т.е. на наборе 11100, а в клетке "б" - на наборе ABCDE или 00111.
В итоге карту Карно можно оформлять любым подходящим образом, но только так, чтобы каждый квадрат соответствовал определенному набору или терму и они, как уже отмечалось, располагались бы таким образом, чтобы соседние наборы или термы, как по горизонтали, так и по вертикали, отличались бы только значением одной переменной: в одном квадрате она с инверсией, а в другом, соседнем - без. Причем, надо учесть, что квадраты, расположенные на противополжных концах каждой строки или столбца, также являются соседними.
Перечислим последовательность действий, выполняемых для минимизации функции по методу Карно.
1) Исходная функция, подлежащая минимизации, должна быть представлена в НДФ. Затем ее надо представить в СНДФ. Или же составляется таблица истинности минимизируемой функции.
Как уже отмечалось, между строками таблицы истинности и клетками (ячейками) на карте Карно существует взаимно однозначное соответствие. Когда карта Карно составляется по СНДФ минимизируемой функции, то очевидно, что каждая переменная без отрицания заменяется ее значением 1, а с отрицанием - 0.
2) Затем строится карта Карно по принципу, описанному ранее. Представим систему координат, в которой, например, для функции двух аргументов по горизонтальной оси откладываются значения одного аргумента, а по вертикали - другого. На пересечении соответствующих координат получаем ячейку, куда записывается значение функции (0 или 1), соответствующее данному набору. Если функция представлена в СНДФ, то в ячейке соответствующей существующему минтерму записывается 1, а в ячейке несуществующего минтерма - 0.
3) После этого объединяются в группы смежные ячейки, в которых записаны единицы, следующим образом: объединяется обязательно четное количество соседних ячеек с единицами как по вертикали, так и по горизонтали. Причем, каждая ячейка с 1 может попасть одновременно в две группы, полученные в результате объединения единиц как по вертикали, так и по горизонтали.
4) Каждой такой группе ставится в соответствие новый минтерм для изображения исходной функции в форме минимальной НДФ.
5) Изображение каждого нового минтерма формируется по следующему алгоритму:
а) переменная, которая в каждой ячейке образованной группы имеет значение только 0, изображается ее инверсией;
б) переменная, которая в каждой ячейке группы имеет значение только 1, изображается без инверсии;
в) переменная, которая в пределах образованной группы меняет свое значение, не изображается, т.е. отбрасывается.
Таким образом, карту Карно можно рассматривать как графическое представление совокупности всех (сушествующих и не существующих) минтермов функции в СНДФ данного числа логических переменных.
На основании закона дистрибутивности и теорем (F +A) = 1 и AA = 0= а также A + 0 = A и A0 = 0, два минтерма, находящиеся в соседних клетках, могут быть заменены одним новым минтермом, содержащим на одну переменную меньше. Если соседними являютя две пары минтермов, то такая группа из 4 минтермов может быть заменена новым минтермом, который содержит на две переменные меньше и т.д. В общем случае наличие единиц в 2n соседних клетках позволяет исключить n переменных.
При формировании на базе карты Карно новых минтермов для представления функции в минимальной НДФ, или же в минимальной НКФ, значения соответствующих переменных, равных 1, заменяются изображением переменных без отрицания, а при значениях равных 0 - с отрицанием.
Рассмотрим процесс минимизации на примере функции, заданной следующим логическим уравнением:
F(A,B,C,D) = BCD + ABD + BCD + ABC + ACD + BCD + ABC + ABC
Представим эту функцию в СДНФ:
F = BCD(A + A) + ABD(C + C) + BCD(A + A) + ABC(D + D) +ACD(B + B) +
+ BCD(A + A) + ABC(D + D) + ABC(D + D) = ABCD +ABCD + ABCD +
+ ABCD + ABCD + ABCD + ABCD + ABCD + ABCD + ABCD + ABCD.

Ниже изображена карта Карно, соответствующая рассматриваемой функции.

AB = 00 AB = 01 AB = 11 AB = 10
CD = 00 1 1 (ABC)
CD = 01 1 1 1 1
CD = 11 1 1 1 1 (D)
CD = 10 1



Минтермы функции образуют в карте четыре группы:
1) (ABC); 2) (ABC); 3) (D); 4) (ABC).
Следовательно

F = ABC + ABC + ABC + D = BC(A + A) + ABC + D = BC + ABC + D.

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

yz = 00 yz = 01 yz = 11 yz = 10
x = 0 1 1
x = 1

Минтерм, соответствующий этой группе получается xz.
Разорванные прямоугольные группы могут появляться и на картах с четырьмя переменными. На таких картах нужно считать склеенными не только правый и левый края, но, при необходимости, также верхний и нижний. Например:

yz yz
wx 00 01 11 10 wx 00 01 11 10
00 1 00 1 1
01 1 1 01
11 1 1 11
10 1 10 1 1
а) б)
Для варианта а): группа из 4-х ячеек соответствует минтерму xz, а группа из 2-х ячеек - минтерму xyz\
Для варианта б): ячейки в 4-х углах образуют одну группу, если поверхность считать тороидальной. Этой группе соответствует минтерм xz\
Рассмотрим ранее приведенный пример, но теперь представим карту в виде цилиндра. Тогда у нас получится три группы минтермов вместо четырех:

AB = 00 AB = 01 AB = 11 AB = 10
CD = 00 1 1
CD = 01 1 1 1 1
CD = 11 1 1 1 1 (D)
CD = 10 1



Минтермы функции образуют на карте три группы:
1) (BC) - минтерм, соответствующий группе из четырех верхних единиц;
2) (D); 3) (ABC).
Следовательно
F = BC + ABC + D.

При получении минимальной формы для СНКФ функция задается термами, принимающими нулевое значение на соответствующих наборах, т.е. макстермами. Поэтому в клетках минимизирующих карт пишут нули, которые группирую по описанной ранее методике.
Пример. Найти минимальные дизъюнктивные и конъюнктивные нормальные формы функции:

f(A, B, C) = ABC ABC ABC ABC ABC.

Карты Карно для данной функции выглядят следующим образом:

B B B B
A 1 1 1 0 A 1 1 1 0
A 0 0 1 1 A 0 0 1 1
C C C C C C

а) б)

Объединить единицы можно двумя вариантами (а и б). Этим вариантам соответствуют две минимальные дизъюнктивные формы:

f(A, B, C) = AB AC AB,
f(A, B, C) = AB BC AB.

Для получения минимальной конъюнктивной нормальной формы следует объединить нули логической функции. Две конституенты нуля, соответст-вующие клеткам, обведенным пунктирной линией (а), склеиваются по пере-менной С и представляются импликантой A B, а оставшийся ноль - конституентойABC. Поэтому минимальная НКФ заданной функции будет

f(A, B, C) = (A B) (A B C).

Заметим, что минимальная НКФ функции содержит меньше букв, чем минимальные НДФ.
Как уже отмечалось, для того чтобы найти выражение заданной логической функции, наиболее удобное для синтеза логической схемы, следует, кроме минимальных дизъюнктивных нормальных форм, получить также минимальные конъюнктивные нормальные формы и выбрать из них ту, при технической реализации которой потребуется наименьшее количество элементов. Существует несколько методов получения минимальных конъюнктивных нормальных форм. Один из наиболее распространенных и удобных методов был продемонстрирован в предыдущем примере.
При наличии уже сформированной минимальной НДФ функции минимальную НКФ можно также, в частности, найти следующим образом:
берется от найденной минимальной НДФ отрицание и производится преобразование по формуле де Моргана. Тем самым получается минимальная НКФ функции. Например,
если МНДФ функции равна

f(A, B, C) =AB + AC,

то проведя отрицание и применив теорему де Моргана, получим МНКФ:

f(A, B, C) =AB + AC = (A +B)(A + C).

Каждая строка таблицы истинности, или ячейка на карте Карно, соответствует определенному значению логической функции для соответствующей комбинации значений аргументов, т.е. для соответствующего набора. В некоторых случаях известно, что какой-то набор появиться не может или же если он появится, то это значение функции, по тем или иным причинам, не существенно. Для таких случаев нет необходимости определять это значение функции по таблице истинности. В таких случаях говорят о неопределенных условиях. Карты Карно позволяют строить МНДФ и МНКФ и в этих ситуациях.
На карте Карно неопределенное условие обозначается прочерком в соответствующей ячейке. Такие ячейки могут произвольным образом включатья в группы при построении минимальных макстермов или минтермов. Любую из них можно включить как в группу единичных, так и в группу нулевых ячеек, или же вообще никуда не включать.
В заключение обзора методов минимизации логических функций нужно отметить, что в настоящее время разработано много программ, позволяющих производить процедуру минимизации на компьютерах различными методами.


Глава 9.

МЕТОДЫ АНАЛИЗА И СИНТЕЗА ЛОГИЧЕСКИХ ЭЛЕКТРОННЫХ СХЕМ

9.1. Логические операторы электронных схем или цепей

Логической схемой называется совокупность логических электронных элементов, соединенных между собой таким образом, чтобы выполнялся заданный закон функционирования схемы, иначе говоря, - выполнялась заданная логическая функция.
По зависимости выходного сигнала от входного все электронные логи-ческие схемы можно условно разбить на:
схемы первого рода, т.е. комбинационные схемы, выходной сигнал которых зависит только от состояния входных синалов в каждый момент времени;
схемы второго рода или накапливающие схемы (схемы последова-тельностные), содержащие накапливающие схемы (элементы с памятью), выходной сигнал которых зависит как от входных сигналов, так и от состояния схемы в предыдущие моменты времени.
По количеству входов и выходов схемы бывают: с одним входом и одним выходом, с несколькими входами и одним выходом, с одним входом и несколькими выходами, с несколькими входами и выходами.
По способу осуществления синхронизации схемы бывают с внешней синхронизацией (синхронные автоматы), с внутренней синхронизацией (асинхронные автоматы являются их частным случаем).
Практически любой компьютер состоит из комбинации схем первого и второго родов разной сложности. Таким образом, основой любого цифрового автомата, обрабатывающего цифровую информацию, являются электронные элементы двух типов: логические или комбинационные и запоминающие. Логические элементы выполняют простейшие логические операции над цифровой информацией, а запоминающие служат для ее хранения. Как мы уже знаем, логическая операция состоит в преобразовании по определенным правилам входной цифровой информации в выходную.
Как уже отмечалось простые (элементарные) логические функции аппаратно реализуются при помощи соответствующих комбинационных электронных логических элементов - вентилей. Можно считать, что эти элементарные логические функции являются логическими операторами упомянутых электронных элементов, т.е. схем. Каждая такая схема обозначается определенным графическим символом, который может быть ориентированный или же неориентированный. Приведем примеры графического обозначения этих схем.
Схема, реализующая элементарную логическую функцию НЕ:


x y =x или x y =x


Схема, реализующая элементарную логическую функцию ИЛИ:


x1
x2 y = (x1 x2) = (x1x2 ) или




Схема, реализующая элементарную логическую функцию ИЛИ-НЕ
(стрелка Пирса):


x1
x2 y = (x1 x2) = (x1 x2) или


Схема, реализующая логическую функцию И:


x1
x2 y = (x1 x2) = (x1 +x2 ) или



Схема, реализующая логическую функцию И-НЕ (штрих Шеффера):



x1
x2 y = (x1 x2) = (x1 +x2) или



Схема, реализующая логическую функцию Исключающее ИЛИ, то есть формирующая сумму по модулю 2:



x1
x2 y = (x1 x2) =(x2x1 +x1x2) или



При анализе или синтезе логических цепей надо учитывать следующее обстоятельство.
Осуществить логические функции на практике позволяют различные, так называемые логические (цифровые) полупроводниковые схемы - вентили, выходные сигналы которых однозначно определяются комбинациями уровней сигналов на входах этих схем. Причем, как входные, так и выходные сигналы этих вентилей могут быть импульсными или потенциальными и имеют два фиксированных значения: высокий (H) или низкий (L) уровень. Когда логической "1" соответствует высокий уровень, тогда логическому "0" - низкий.
Если логической "1" соответствует наличие сигнала (высокого или низкого уровня), то в таком случае говорят, что логические схемы работают в положительной логике. Если же логической "1" соответствует отсутствие сигнала, то считается, что схемы работают в отрицательной логике. Существует также и смешанная логика, то есть когда в рассматриваемом электронном узле одни вентили работают в положительной логике, а другие - в отрицательной.
Отсюда следует, что, согласно уже известному нам свойству двойст-венности логических функций, один и тот же вентиль, который в поло-жительной логике реализует функцию, например, И-НЕ (или ИЛИ-НЕ), в отрицательной логике будет выполнять логическую функцию ИЛИ-НЕ (или И-НЕ). Например, вентиль, реализующий функцию И-НЕ в положительной логике, как уже отмечалось, изображается следующим образом:

A
B C = A&B (илиC = A&B )

Логически эквивалентная форма этого же вентиля при отрицательной логике представляется таким образом:

A
B C=A+B

Из этих чертежей видно, что там, где логической "1" соответствует отсутствие сигнала, а логическому "0" - наличие сигнала, на схеме принято чертить кружок. Иначе говоря, можно считать, что кружок означает, что на соответствующий вход логического элемента подается инверсия логической переменной, а с выхода - выводится инверсное значение переменной или логической функции.
Все это позволяет абстрагироваться от физических характеристик сигналов и считать, что на входах и выходах вентилей да и других компонент логической схемы появляются непосредственно логические значения. Поэтому можно прийти к заключению, что различные вентили или их комбинации на логическом уровне могут быть описаны с помощью логических операторов. Такое операторное описание вентилей позволяет отвлекаться (абстрагироваться) от физической природы конкретных вентилей и других электронных элементов и осуществлять анализ соответсвующих электронных схем. При этом оказывается, что для анализа совсем не обязательно иметь саму схему. Для того, чтобы получить значение функции на выходе какой-либо схемы, достаточно записать эту зависимость в виде логических операторов, связанных между собой в соответствии с выполняемой функцией.

9.1.1. Задачи анализа и синтеза электронных схем

Для анализа электронных схем с помощью аппарата алгебры логики нужно найти логическую функцию, описывающую работу заданной схемы. При этом исходят из того, что каждому функциональному элементу электронной схемы можно поставить в соответствие логический оператор. Этим самым устанавливается однозначное соответствие между элементами схемы и ее математическим описанием.
Анализ электронной схемы проводится в три этапа:
1) из принципиальной схемы удаляются все несущественные вспомо-гательные элементы, которые не влияют на логику работы схемы;
2) через логические операторы выражают все электронные элементы, получая логическое уравнение, которое является моделью функции, выполняемой заданной схемой;
3) любым способом получают МНКФ и МНДФ этого уравнения и тем самым выявляют лишние части анализируемой схемы, если конечно они в ней есть.
Изъятие лишних частей упрощает схему и тем самым улучшает ее технические характеристики.
Задачу синтеза электронных схем можно сформулировать следующим образом: при заданных входных переменных и известной выходной функции спроектировать логическое устройство, которое реализует эту функцию. Следовательно, в результате решения задачи синтеза возникает логическая схема, воспроизводящая заданную функцию.
Обычно, решая задачи анализа и синтеза, используют полные базисы логических функций. При этом каждую логическую функцию, входящую в базис, сопоставляют с некоторым физическим электронным элементом, что позволяет логическую схему заменить структурной схемой, состоящей из электронных элементов.
Таким образом, удается соединить математическую задачу синтеза логической схемы с инженерной задачей проектирования электронной схемы. При разработке электронной схемы за основные критерии принимают минимум аппаратуры, минимум типов применяемых элементов, максимум быстродействия и надежности .
С точки зрения математической логики задача синтеза решается при обеспечении минимального числа логических операторов, минимального количества типов логических операторов. Можно сформулировать после-довательно решаемые задачи при синтезе электронной схемы:
- составление математического описания (системы логических уравнений), адекватно отображающего процессы, происходящие в схеме;
- анализ логических уравнений и получение минимальной формы для каждого из них в заданном базисе;
- переход от логических уравнений к логической (структурной) схеме посредством применения логических операторов.
Таким образом, синтез электронных схем начинается с задания входных переменных и выходной функции или выходных функций. Очевидно, что все это может быть заданно или соответствующей таблицей истинности, или же аналитически. В любом случае следующим этапом синтеза является процедура получения любым методом МНДФ и МНКФ соответствующего логического уравнения или уравнений
Далее на основании полученных МНДФ и МНКФ синтезируются структурные или функциональные схемы нескольких вариантов синтезируемой электронной схемы с использованием различных базисов. После этого выбирается в качестве окончательного варианта та структурная схема, которая имеет минимальное число логических электронных элементов, минимальное количество типов этих элементов и минимальную "глубину" синтезируемой схемы.
Под термином "глубина" в данном случае понимается число логических элементов на пути сигнала от входа в схему до выхода. Минимальная глубина обеспечивает минимальную задержку реакции схемы на изменение сигналов на ее входах при выбранном типе (серии) электронных элементов синтезируемой схемы.
Задача синтеза, как правило, имеет различные решения в зависимости от выбранной системы логических элементов. Однако для любой заданной функции алгебры логики почти всегда можно синтезировать схему, соответствующую этой функции. Получение схемы с минимальным коли-чеством логических связок требует нахождения минимальной формы для логической функции.

9.2. Синтез логических схем с одним выходом

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


Свойство универсальности вентиля И-НЕ:


Схемы с одним выходом и несколькими входами относятся к наиболее простым схемам. Основная сложность при синтезе этих схем состоит в том, чтобы найти выражение для выходной функции в заданном базисе.
Рассмотрим некоторые простые примеры перехода от логических уравнений к логическим цепям, т.е. примеры синтеза простых логических цепей. В частности, рассмотрим переход от представления функции в НДФ (ДНФ) к ее реализации на элементах И-НЕ и ИЛИ-НЕ.
Пусть задана функция 4-х переменных в НДФ:
F =CD +ABD + ABD +ABC + ACD.
Проведем ее минимизацию с помощью карты Карно:

AB = 00 AB = 01 AB = 11 AB = 10
CD = 00 1 1 1 1
CD = 01 1 1 1 1
CD = 11 0 0 0 0
CD = 10 1 0 1 0

Минимальная НДФ имеет вид: F = ABD + ABD + C.
Рассмотрим реализацию этого уравнения с помощью элементов И-НЕ. В общем случае на элементах И-НЕ НДФ функция реализуется посредством двух ступеней логики. На первой ступени получаются инверсные значения логических произведений и однобуквенных членов. На второй ступени выполняются операции И-НЕ, т.е. НЕ-ИЛИ, над полученными инверсиями.
Действительно, посредством применения двойного отрицания можно привести заданную функцию к виду:

F = ABD + ABD + C = ABD ABD C

Схема, соответствующая данному уравнению, приведена ниже.


В приведенной схеме для элементов первой и второй ступени применены различные, но эквивалентные условные обозначения. При реализации НДФ функции посредством элементов И-НЕ такой прием позволяет вести проектирование схем, пользуясь операциями И, ИЛИ и НЕ.
По рассмотреным ранее правилам из вышеприведенной карты Карно, может быть найдена минимальная НКФ заданной функции:

F = (C +D)(A +B +C)(A + B +C)\

Отсюда, взяв двойное отрицание и применив теорему Де Моргана, получим


F = [(CD)(ABC)(ABC)]

На элементах И-НЕ КНФ функции реализуется с помощью трех ступеней (соответствующая схема приведена ниже). На первой ступени посредством операции И-НЕ над инверсными значениями переменных, входящих в КНФ, образуются логические суммы. На второй ступени выполняется операция И-НЕ над логическими суммами и однобуквенными членами (если они имеются), тем самым образуется инверсное значение функции. На третьей ступени выполняется инверсия и получается искомая функция.


При минимизации логических функций для логических схем, которые предполагается строить на базе элементов И-НЕ или ИЛИ-НЕ, необходимо кроме собственно минимизации стремиться также к тому, чтобы структурная формула была представлена в виде комбинации из элементов И-НЕ или ИЛИ-НЕ. Тогда переход от структурной формулы к функциональной схеме не будет сложным. В любом случае при построении логической схемы в базисе И-НЕ на основе логической функции, представленной в МНДФ, необходимо везде вместо элементов И и ИЛИ ставить элемент И-НЕ. При построении логической схемы в базисе ИЛИ-НЕ на основе логической функции, представленной в МНКФ, необходимо везде вместо элементов И и ИЛИ ставить элемент ИЛИ-НЕ. Однако надо учесть, что есть точка зрения, по которой считается, что наиболее удобным для решения синтеза схем цифровых автоматов является базис И, ИЛИ, НЕ.
Рассмотрим, например, выражение F = w +y & z +w(x + y). Применив закон де Моргана, запишем его в следующем виде:

F = {w(yz ) [w(x + y)]}

На основании последнего выражения реализуем эту функцию при помощи вентилей типа И-НЕ.

эта же функция, реализованная в базисе 1 будет иметь вид:



Как видим в этом случае схема реализовання в базисе 1 более компактна.
Теперь рассмотрим способы формирования схемы, реализующей функцию суммирования по модулю 2 (функция f6), в различных базисах. Логическая функция f6, как известно, в аналитическом виде представляется в виде:
F = AB +AB, и имеет следующую таблицу истинности:

A B F
0 0 0
0 1 1
1 0 1
1 1 0

В базисе И, ИЛИ, НЕ схема, реализующая функцию f6, имеет вид:


В базисе ИЛИ-НЕ:


F = AB + AB = A +B +A + B = A +B +A + B


В базисе И-НЕ:

F = AB + AB = AB AB

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

A B Ci S C0 AB = 00 AB = 01 AB = 11 AB = 10
0 0 0 0 0 Ci = 0 0 1 0 1
0 0 1 1 0 Ci = 1 1 0 1 0
0 1 0 1 0 S
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1 AB = 00 AB = 01 AB = 11 AB = 10
1 1 0 0 1 Ci = 0 0 0 1 0
1 1 1 1 1 Ci = 1 0 1 1 1
C0

На выходе S имеется результат сложения двух одноразрядных чисел - A и B - и переноса Ci предыдущего сумматора; перенос, который при этом возникает, подается на выход C0. Ситезируемую схему можно рассматривать как схему, состоящую из двух частей: схемы для получения поразрядной суммы S (полусумматор) и схемы для получения переноса C0.
Из карт Карно видно, что возможно минимизировать только функцию C0. Для составления схемы сумматора могут быть использованы частично минимизированные функции и после различных алгебраических преоб-разований можно получить следующие дизъюнктивные нормальные формы для функций S и C0:

S =ABCi + ABCi +ABCi + ABCi = (A + B + Ci)C0 + ABCi
C0 = AB + CiA + CiB = AB + Ci(A + B)

На основании этих уравнений можно построить схему полного сумматора на элементах И, ИЛИ и НЕ.
Введем следующие обозначения: E = A B; D = AB; T = A + B.
Тогда:
S = E Ci; C0 = D + ECi; C0 =T + ECi.

Схему разряда полного двоичного сумматора построенного на элементах
И-НЕ в соответствии с последними уравнениями можно реализовать следующим образом:

Схему сумматора можно также сформировать при помощи двух полу-сумматоров:

Ci S

A
B C0

Для полусумматора справедливы следующие уравнения:

S =AB + AB; b C0 = AB или Pi = AB.

Полусумматоры могут быть реализованы в базисе И-НЕ следующим образом:

Полусумматор в базисе И, ИЛИ, НЕ несколько компактнее:

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

9.3. Электронные схемы с несколькими выходами

Задача синтеза схемы с n входами и k выходами отличается от задачи синтеза k схем с n входами и одним выходом тем, что при решении необ-ходимо исключить дублирование в k схемах синтезируемых функций.
Примером схем с несколькими входами и выходами может служить схема дешифратора. Принцип работы дешифратора прост: при заданном наборе входных сигналов на выходе возбуждается один выход или несколько выходов в соответствии с заданной зависимостью. Например, предположим, что необходимо синтезировать дешифратор с четырьмя входными переменными
x1 - x4, у которого, при любой комбинации значений входных переменных, должен возбудиться только один выход из десяти.
Синтез такой схемы может быть осуществлен, если рассматривать раздельно каждую выходную функцию y0 - y9|

y0 = x1x2x3x4; y1 = x1x2x3x4; y2 = x1x2x3x4; y3 = x1x2x3x4;
y4 = x1x2x3x4; y5 = x1x2x3x4; y6 = x1x2x3x4; y7 = x1x2x3x4;
y8 = x1x2x3x4; y9 = x1x2x3x4;

Реализация этих выражений в виде конъюнктора дает возможность создать логическую схему дешифратора.
Рассмотрим упрощенную схему такого дешифратора и его таблицу истинности. Здесь A0 - A3 - входные переменные. Значения A0 -A3 фор-мируются в самом дешифраторе после первых инверторов. Дешифратор преобразует четырехразрядный двоичный код в десятичный. На выходах дешифратора логической единице соответствует низкий уровень сигнала, а на входах - высокий.
Комбинационная таблица дешифратора выглядит следующим образом:
Т а б л и ц а 9.1.

A3 A2 A1 A0 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
1 0 0 0 1 0 1 0 0 0 0 0 0 0 0
2 0 0 1 0 0 0 1 0 0 0 0 0 0 0
3 0 0 1 1 0 0 0 1 0 0 0 0 0 0
4 0 1 0 0 0 0 0 0 1 0 0 0 0 0
5 0 1 0 1 0 0 0 0 0 1 0 0 0 0
6 0 1 1 0 0 0 0 0 0 0 1 0 0 0
7 0 1 1 1 0 0 0 0 0 0 0 1 0 0
8 1 0 0 0 0 0 0 0 0 0 0 0 1 0
9 1 0 0 1 0 0 0 0 0 0 0 0 0 1
10 1 0 1 0
11 1 0 1 1
12 1 1 0 0 Неиспользуемые
13 1 1 0 1 комбинации
14 1 1 1 0
15 1 1 1 1

Схему дешифратора можно реализовать, например, так:



9.4. Временные булевы функции и последовательностные автоматы

Ранее были рассмотрены способы анализа и синтеза схем первого рода (комбинационных), которые невозможно использовать при описании схем второго рода (схем с памятью). Основная особенность схем с памятью (последовательностных автоматов) состоит в том, что алгоритм их работы зависит от времени. Следовательно, в число переменных, от которых зависит выходная функция схемы с памятью, должно входить время t. Но время не является двоичной переменной. Поэтому вводится понятие автоматного времени, принимающего дискретные целочисленные значения 0, 1, 2 и т.д. это означает, что работа схемы с памятью распадается на ряд интервалов, в течение которых автоматное время условно принимает постоянное значение. эти интервалы времени формируются некоторыми тактирующими сигналами - тактами.
Временная булева функция (ВБФ) - это логическая функция
y = (x1, x2, ..., xn, t), принимающая значение {0,1} при 0 t s-1, где s - количество интервалов автоматного времени.
Можно утверждать, что число различных ВБФ равно 13EMBED Equation.31415. В самом деле, если функция времени принимает ы значений, т.е. t = 0, 1, 2, ..., s-1, и каждому интервалу времени соответствует 2n различных двоичных наборов, то всегда будет s2n различных наборов. Следовательно, общее количество ВБФ равно 13EMBED Equation.31415.

Любая временная булева функция может быть представлена в виде

y = (x1, x2, ..., xn, t) = 00 11 s-1s-1, (9.1)

где i - конъюнктивный или дизъюнктивный терм от переменных (x1, x2, ..., xn); i - вспомогательная функция, принимающая значение i = {0, 1} в момент времени ti.
Приведенная форма представления временных логических функций позволяет применить к функции н все методы упрощения и минимизации, рассмотренные ранее.

Пример. Преобразовать функцию, заданную нижеследующей таблицей в вид (9.1).

x1 x2 t (x1, x2, t) x1 x2 t (x1, x2, t)
0 0 0 0 1 0 1 1
0 1 0 0 1 1 1 0
1 0 0 1 0 0 2 0
1 1 0 0 0 1 2 0
0 0 1 0 1 0 2 1
0 1 1 1 1 1 2 1

Решение. Функцию y = (x1, x2, t) представляем совокупностью трех логических функций 0(x1, x2); 1(x1, x2); 2(x1, x2), которые для таблицы имеют вид

0(x1, x2) = x1x2; 1(x1, x2) =x1x2 x1x2; 2(x1, x2) = x1x2 x1x2 = x1.

На основании (9.1) записываем окончательный вид временной логической функции:

y = x1x20 (x1x2 x1x2)1 x12.

Нужно учесть, что разложение (9.1) можно применить только к периодическим временным функциям. Переход к схеме от логического выражения (9.1) можно осуществить следующим образом.
Предположим, что на выходах некоторой схемы (дешифратора) в моменты времени е появляются сигналы:
если t1 = 0 , то на выходе 1 сигнал 0 = 1, при 1 = 0, 2 = 0 ;
если t2 = 1 , то на выходе 2 сигнал 1 = 1, при 0 = 0, 2 = 0;
если t3 = 2 , то на выходе 3 сигнал 2 = 1, при 0 = 0, 1 = 0.
Для каждой функции i строим соответствующую логическую схему, не зависящую от переменной е. После этого все схемы соединяем между собой в соответствии с (9.1).
Рекуррентная булева функия (РБФ) - логическая функция, зависящая как от текущих значений 13EMBED Equation.31415 входных переменных, так и от предшествующих значений самой функции y(t-1). Полная аналитическая запись такой функции

13EMBED Equation.31415
yt = {0, 1} при t > 0,

где - 13EMBED Equation.31415 текущие значения входных переменных; yj - значения выходных функций в момент времени j = t-1; t-2 и т.д.
Введем понятие элемента задержки (D), для которого справедливо равенство yt+1 = xi= т.е. значение выходного сигнала в момент времени t+1 равно значению входного сигнала в момент времени t. D(t) - является его логичес-ком оператором.
Теперь рассмотрим логическую схему, имеющую цепь обратной связи с включенной в нее схемой задержки






x(t) f(xi, yi)


y(t)



Предположим, что в качестве схемы с функцией f(x,y) взята логическая схема ИЛИ. Тогда в совокупности эта схема работает так, что

f(x,y) = xt+1 yt.

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


Глава 10.

ВВЕДЕНИЕ В ТЕОРИЮ АВТОМАТОВ И СТРУКТУРНЫЙ СИНТЕЗ ЦИФРОВЫХ АВТОМАТОВ

10.1. Основные понятия и определения

Как уже отмечалось, цифровым автоматом называют дискретный преобразователь информации, способный принимать различные состояния, переходить под воздействием входных сигналов, или команд программы решения задачи, из одного состояния в другое и выдавать выходные сигналы. Автомат называется конечным, если множество его внутренних состояний, а также множества значений входных и выходных сигналов конечны.
Цифровые автоматы могут быть с "жесткой", или схемной, логикой и с логикой, хранимой в памяти. Различают два класса автоматов: асинхронные и синхронные.
Синхронный автомат характеризуется тем, что функционирует под управлением тактовых (или синхронизирующих) сигналов - ТС, с постоянной длительностью tТС и постоянной частотой fТС, если квантование времени равномерное. Такт (квант) времени ti совмещается с фронтом i-того сигнала ТС. Входные сигналы могут воздействовать на автомат лишь при наличии сигнала ТС и не изменяются в течение tТС. Период следования сигналов ТС должен быть больше или равен времени, которое необходимо реальному автомату для перехода из одного состояния в другое. Когда рассматривается абстрактный автомат, то считается, что изменение внутренних состояний автомата происходит в интервалы времени между смежными ТС, а выходные сигналы формируются по фронту очередного ТС.
В асинхронных автоматах длительность интервала времени, в течение которого остается неизменным состояние входных сигналов, является величиной переменной и определяется временем, которое необходимо автомату для установки соответствующих выходных сигналов и завершения перехода в новое состояние. Следовательно, асинхронный автомат должен формировать каким-нибудь подходящим способом сигнал о завершении очередного такта, по которому текущие входные сигналы могут быть сняты, после чего может начаться следующий такт, т.е. возможно поступление новых входных сигналов.
Как отмечалось в главе 1, абстрактный автомат с одним входом и одним выходом можно представить следующим образом:

X Y


Для задания конечного автомата фиксируются три конечных множества (алфавита):
- множество возможных входных сигналов:
X = {x1, x2, ..., xm};
- множество возможных выходных сигналов:
Y = {y1, y2, ..., yk};
- множество возможных внутренних состояний автомата:
A = {a0, a1, ..., an}.
На этих множествах задают два логических оператора:
- функцию переходов f, определяющую состояние автомата a(t + 1) в момент дискретного времени t + 1 в зависимости от состояния автомата a(t) и значения входного сигнала x(t) в момент времени t:
a(t + 1) = f[a(t), x(t)]; (10.1)
- функцию выходов , определяющую зависимость выходного сигнала автомата y(t) от состояния автомата a(t) и входного сигнала x(t) в момент времени t:
y(t) = [a(t), x(t)]. (10.2)
Кроме того, на множестве состояний автомата фиксируют одно из внутренних состояний а0 в качестве начального состояния.
Понятие состояние автомата используется для описания систем, выходные сигналы которых зависят не только от входных сигналов в данный момент времени, но и от некоторой предыстории, т.е. сигналов, которые поступали на входы системы ранее. Следовательно, цифровые автоматы относятся к последовательностным схемам, которые, как уже отмечалось, обладают памятью. Понятие состояние автомата соответствует некоторой памяти о прошлом, поэтому ввод этого понятия позволяет устранить время как явную переменную и выразить выходные сигналы как функцию состояний и входных сигналов.
Работу абстрактного автомата следует рассматривать применительно к конкретным интервалам времени, т.к. каждому интервалу дискретности t будет соответствовать свой выходной сигнал y(t). Следовательно, функционирование автомата рассматривается через дискретные интервалы времени конечной продолжительности. В абстрактной теории цифровых автоматов считается, что входные сигналы воздействуют на синхронный автомат в момент начала каждого i-того интервала (кванта) времени, выделенного соответствующим синхроимпульсом (тактом), а изменение внутренних состояний автомата происходит в интервалы времени между смежными синхроимпульсами, когда нет воздействия входных сигналов.
Операторы, описывающие работу автомата, обычно задают таблицей переходов и таблицей выходов.
В таблице переходов показывают в какое состояние попадает автомат от того или иного входного сигнала. В таблице выходов показывают какой выходной сигнал генерирует автомат в зависимости от типа входного сигнала и текущего состояния автомата.
К примеру, рассмотрим таблицы переходов и выходов некоторого автомата.
Таблица переходов автомата

Входной Состояние
сигнал a0 a1 a2 a3
x1 a1 a2 a3 a3
x2 a0 a0 a0 a0

Таблица выходов автомата

Входной Состояние
сигнал a0 a1 a2 a3
x1 y2 y2 y1 y2
x2 y2 y2 y2 y3

В клетку таблицы переходов, находящуюся на пересечении столбца с буквой аi и строки с буквой xj, записывается состояние автомата, в которое он переходит из состояния аi при подаче на вход сигнала xj. В аналогичную клетку таблицы выходов записывается выходной сигнал yi, который формируется автоматом при таком переходе.
Операторы переходов и выходов могут быть заданы одной таблицей, по которой однозначно определяются переходы и выходы автомата.



Таблица переходов и выходов автомата

Выходной Cостояние
сигнал a0 a1 a2 a3
x1 a1 y2 a2 y2 a3 y1 a3 y2
x2 a0 y2 a0 y2 a0 y2 a0 y3

большую наглядность обеспечивает задание конечных автоматов с помощью графов или диаграмм состояний.
Граф автомата состоит из узлов, соединенных ветвями. Узлы (кружки на схеме графа) отождествляют внутренние состояния автомата. Каждая ветвь графа, т.е. ориентированная линия, стрелка которой указывает следующее состояние автомата, отмечается входным сигналом, вызывающим в автомате соответствующий данной ветви переход, и выходным сигналом, который возникает при этом переходе. Входной и соответствующий ему выходной сигналы разделяются на чертеже запятой или косой чертой. Если некоторый входной сигнал не меняет состояния автомата, то соответствующая ветвь замыкается на кружке (узле), из которого она выходит.
Поскольку таблица состояний и граф (диаграмма) состояний несут одну и ту же информацию, их можно преобразовать друг в друга. Каждое состояние представляется кружком, а каждый элемент таблицы преобразуется в отрезок ориентированной линии, соединяющей соответствующие кружки. Процедура обратного преобразования очевидна.
В настоящее время в классе синхронных атоматов рассматривают, в основном, два типа автоматов: автомат Мили и автомат Мура.
Графа атомата Мили, заданного вышеприведенными таблицами, отражен на рис. 10.1. Закон функционирования автоматов Мили может быть задан следующим образом:
a(t + 1) = f[a(t), x(t)];
y(t) = [a(t), x(t)],
где t = 1, 2, .....
Отличительная особенность автоматов Мили состоит в том, что их выходные сигналы в некоторый момент времени е зависят как от состояния автомата, так и от значения входного сигнала в этот же момент времени.


Рис. 10.1. Граф автомата Мили.

У автоматов Мура выходные сигналы в момент времени t однозначно определяются состоянием автомата в этот же момент времени и в явном виде не зависят от значения входных сигналов xi(t).
Функции переходов и выходов автомата Мура, заданного на множестве входных сигналов X, множестве внутренних состояний A = {a0, a1, ,an} и множестве выходных сигналов Y, можно записать в виде

a(t + 1) = f[a(t), x(t)], (10.3)
y(t) = [a(t)]. (10.4)

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

Отмеченная таблица переходов автомата

Выходной сигнал
y2 y2 y2 y1 y2 y3
Входной Состояние
сигнал a0 a1 a2 a3 a4 a5
x1 a1 a2 a3 a4 a4 a1
x2 a0 a0 a0 a5 a5 a0

Граф автомата Мура, заданного этой таблицей, приведен на рис. 10.2.
На этом рисунке состояния автомата обозначаются сиволами bi.
На графах автомата Мура значения выходных сигналов записываются около узлов.

Рис. 10.2. Автомат Мура.

Между автоматами Мили и Мура существует соответствие, позволяющее преобразовать закон функционирования одного из них в другой или обратно. Автомат Мура можно рассматривать как частный случай автомата Мили, имея в виду, что последовательность состояний выходов автомата Мили опережает на один такт последовательность состояний выходов автомата Мура, т.е различие между автоматами Мили и Мура состоит в том, что в автоматах Мили состояние выхода возникает одновременно с вызывающим его состоянием входа, а в автоматах Мура - с задержкой на один такт, т.к в автоматах Мура входные сигналы изменяют только состояние автомата.
Помимо автоматов Мили и Мура выделяют еще, так называемый, совмещенный автомат - С-автомат. Абстрактный С-автомат можно представить в виде устройства с одним входом, на который поступают входные сигналы X, и двумя выходами, на которых появляются выходные сигналы Y и U.

Y
X

U
рис. 10.3

Здесь X - входной алфавит; A - множество состояний; Y - выходной алфавит первого типа; U = {u1(t) ... um(t)} - выходной алфавит второго типа.
Отличие С-автомата от моделей Мили и Мура состоит в том, что он одновременно реализует две функции выходов 1 и 2, каждая из которых характерна для этих моделей в отдельности. Этот автомат можно описать следующей системой уравнений:

a(t+1) = f [a(t), x(t)]; (10.5)
y(t) = 1[a(t), x(t)];
u(t) = 2[a(t)].

Выходной сигнал u = 2(as) выделяется все время, пока автомат находится в состоянии as. Выходной сигнал yk = 1(as, xn) выдается во время действия входного сигнала xn при нахождении автомата в состоянии as. От С-автомата легко перейти к автоматам Мили или Мура (с учетом возможных сдвигов во времени на один такт), так же как возможна трансформация автомата Мили в автомат Мура и наоборот.

10.2. Методы структурного синтеза и языки описания цифровых автоматов

В зависимости от способа задания функций переходов и выходов (f и ) в настоящее время выделяют два класса языков описания цифровых автоматов - начальные языки и стандартные, или автоматные языки. В начальных языках автомат описывается на поведенческом уровне, т.е. функции переходов и выходов обычно в явном виде не заданы. Среди начальных языков следует выделить язык регулярных выражений алгебры событий, язык логических схем алгоритмов, язык граф-схем алгоритмов. Принципы построения граф-схем алгоритмов подробно описаны в Глава 11, там же рассматриваются некоторые возможные содержательные термины, которые обычно используются при описании алгоритмов.
Среди автоматных языков наиболее распространены таблицы переходов и выходов, а также графы, которые мы рассматривали ранее.
Используются также, так называемые, кодированные таблицы переходов и выходов, в которых определяется зависимость значений в двоичном коде внутренних состояний и выходных сигналов от значений в этом же коде входных сигналов и внутренних состояний элементарных автоматов в предыдущий момент времени.
Задача синтеза конечных автоматов заключается в построении сложного автомата из более простых автоматов, называемых элементарными автоматами. На практике в большинстве случаев применяют элементарные автоматы с двумя внутренними устойчивыми состояниями, которые соединяются между собой с помощью логических элементов таким способом, чтобы обеспечить функционирование схемы в соответствии с заданными кодированными таблицами переходов и выходов.
Для синтеза конечных автоматов необходимо прежде всего выбрать систему элементов, из которых должны строиться заданные автоматы. В большинстве схем цифровых автоматов в качестве элементов памяти применяются элементарные автоматы, имеющие следующие особенности.
1.Элементарные автоматы, например триггера, являются автоматами Мура и имеют два внутренних устойчивых состояния.
2. Двум внутренним состояниям элементарного автомата соответствуют два различных выходных сигнала, которые по существу и позволяют физически различать состояния элементарных автоматов.
3. В общем случае элементарные автоматы могут иметь несколько физических входов.
Для того чтобы можно было построить схему любого конечного автомата, набор элементов, с помощью которых проводится синтез автомата, должен быть функционально полным и включать в себя в качестве элементарных автоматов триггера, т.е, необходимо и достаточно, чтобы он содержал:
- хотя бы один элементарный автомат с двумя различными состояниями, для которых соблюдаются условия полноты системы переходов и выходов;
- логические элементы, образующие функционально полную систему для синтеза логических комбинационных схем.
Напомним, что набор логических элементов будет функционально полным, если из элементов этого набора можно построить любую логическую схему компьютера.
Приведем пример общей структурной модели последовательностной схемы, содержащей триггера.

X
Z



Q Y




Рис.10.4.

При решении задач анализа и синтеза последовательностных схем обычно разделяют последовательностную схему на элементы памяти и комбинационную часть.
В самом общем виде последовательность структурного синтеза пос-ледовательностного цифрового автомата можно представить следующим образом.
В начале в четкой словесной форме формулируется исходное задание проекта. В зависимости от типа и сложности проектируемого цифрового автомата последующий этап синтеза может быть различным.
Возможен вариант, когда можно сразу приступать к формированию в аналитической форме системы рекуррентных логических функций. Далее выбирается в зависимости от физического типа элементов функционально полный набор логических элементов (базис) и соответствующая этому набору система логических функций. Затем рекуррентные логические функции представляются через логические функции выбранной функционально полной системы и минимизируются в соответствии с выбранными критериями. Этот этап синтеза обычно называют комбинационным синтезом.
Задачи комбинационного синтеза последовательностных цифровых автоматов полностью совпадают с задачами синтеза комбинационных логических схем.
На этом же этапе разработок строится содержательная граф-схема алгоритма функционирования автомата. Далее формируются необходимые кодированные таблицы переходов и выходов и при необходимости строится граф автомата (диаграмма состояний).
Возможен вариант, когда вместо формирования системы рекуррентных функций в начале составляют некоторый предварительный упрощенный вариант граф-схемы (возможно содержательной) автомата или граф автомата, т.е. диаграммы состояний, и предварительный вариант кодированной таблицы состояний. И только после этого формируется система рекуррентных функций и выполняются все упомянутые последующие процедуры с по-этапным уточнением граф-схемы автомата, диаграммы его состояний и кодированных таблиц состояний (выходов, переходов и т.д.).
Далее, ориентируясь на сформированные таблицы и граф-схему, про-ектируется логическая схема цифрового автомата, в которой используются логические элементы выбранного базиса. Эта схема представляется как структурная или функциональная. После ее разработки можно приступать к созданию принципиальной схемы разрабатываемого последовательностного цифрового автомата.
Надо учесть, что в общем случае процедура синтеза цифрового автомата плохо формализуема и в значительной мере зависит от опыта разработчика.

10.3. Элементарный автомат (триггерный элемент)

Как уже отмечалось, наиболее типичным примером элементарного автомата и основным последовательностным Элементом является триггер. Термин "триггер" используется для электронных цифровых схем, обладающих двумя устойчивыми внутренними состояниями, которые они могут хранить неограниченно долго, во всяком случае до следующего такта.
Триггер имеет два выходных сигнала Q иQ. Сигнал Q считается истинным или прямым, а сигнал Q - дополнительным или инверсным. Этим сигналам соответствует один из двух уровней напряжения: L или H, и они дополняют друг друга. Выходные сигналы триггера постоянны до тех пор, пока они не будут изменены под воздействием входных сигналов, т.е. триггер имеет два устойчивых состояния (режима): Q = H иQ = L или Q = L и Q = H. Первое из них когда Q = H называется состоянием установки, а второе - состоянием сброса. Предположим, что для триггера используется положительная логика. Тогда состояниям установки и сброса ставятся в соответствие логические состояния 1 и 0.
Существуют различного типа триггерные схемы, в частности, типа: D, T, RS, JK. Для каждого из них имеется однозначное соответствие между входными сигналами и соответствующими переходами состояний триггера. Это соответствие задается таблицей состояний. Приведем, например, условное обозначение RS триггера и его таблицу состояний.

S Q


R Q

Рис.10.5

Таблица состояний RS триггера

Входы
Текущее состояние S = L R = L S = L R = H S = H R = L S = H R = H
Выходы
Q = L Q = H L H L H H L Не опре- делено

Триггер оказывается в состоянии установки, если на вход S подается сигнал высокого уровня, и в состоянии сброса, когда сигнал высокого уровня подается на вход R. Если на оба входа триггера подаются сигналы низкого уровня, то его состояние не меняется, но если на оба входа подаются сигналы высокого уровня, то состояние триггера будет неопределенным.
Логическое поведение триггера, как любого другого автомата, описы-вается логическими таблицами состояний и переходов. Приведем такие таблицы для RS триггера.
Таблица состояний

Входы SR
Текущее 00 01 10 11
состояние Выходы
Q = 0 Q = 1 0 1 0 0 1 1 Не опре- делено

Таблица переходов

Текущее состояние Q Следующее состояние Q S R
0 0 0 d
0 1 1 0
1 0 0 1
1 1 d 0

где d - недоопределенное состояние, т.е. в может равняться либо 0, либо 1.
Приведем вариант реализации RS-триггера на элементах И-НЕ:


В схеме с N триггерами (например регистр с N триггерами) состояния характеризуются N-разрядным двоичным словом, каждый разряд которого ассоциируется с одним из триггеров. Так как существует 2N различных комбинаций N-разрядного слова, то у данной схемы имеются 2N устойчивых состояний. Очевидно, что состояние выходных сигналов такого регистра зависит не только от того на какие его входы поступили сигналы, но и от того в каком состоянии были его триггера до прихода входных сигналов. Это и является отличительной чертой последовательностных схем от схем первого рода - комбинационных логических схем.
Обычный Т-триггер имеет один счетный вход Т и как все триггера два выхода: Q и Q. Он переключается только при изменении входного сигнала Т с значения 0 на 1.
Синхронизируемый Т-триггер имеет кроме счетного входа Т еще вход СК для синхронизирующего сигнала (синхроимпульса) СИ. Опрокидование триггера происходит в том случае, когда в момент прихода СИ Т = 1, если
T = 0, то СИ не оказывает воздействия на триггер.

10.4. Синтез цифрового автомата с памятью

Рассмотрим пример реализации процесса построения простой после-довательностной схемы
Построим десятичный счетчик с помощью синхронизируемых
Т-триггеров. Эта схема содержит четыре таких триггера, выходные сигналы которых формируют кодовый набор, интерпретируемый как десятичная величина в двоично-десятичном коде. Каждый синхроимпульс увеличивает значение кода, которое, достигнув 9, переводится следующим синхроимпульсом в 0. При переходе от 9 к 0 схема выдает выходной сигнал, который указывает на переполнение счетчика: этот сигнал часто называют сигналом переноса.
Первый шаг в процессе проектирования - определение структурной модели и использование ее для идентификации входных и выходных переменных. На рис.10.7 показана подобная модель для десятичного счетчика. В этой схеме, кроме синхросигнала, нет других входных сигналов. Единственным выходным сигналом комбинационной подсхемы является сигнал переноса С.
Если кроме сигнала С вывести также сигналы Q0 - Q3 от всех четырех Т-триггеров, то, используя несколько таких счетчиков, можно получить изображение числа поступивших извне сигналов СИ в двоично-десятичном коде (Д-коде). В таком случае внешний СИ очевидно должен поступать на счетчик, формирующий младшую тетраду кода. Для всех других счетчиков в качестве СИ будет сигнал С предыдущего счетчика. Сигнал С счетчика, формирующего старшую тетраду, является признаком переполнения разрядной сетки, сформированной данной группой этих десятичных счетчиков.

Сигнал переноса C


Q3 - Q0 T3 - T0



Рис.10.7 Структурная модель десятичного счетчика

Следующий шаг состоит в построении либо таблицы состояний, либо диаграммы состояний, описывающих поведение схемы. Диаграмма состояний для этого счетчика приведена на рис.10.8. Согласно диаграмме, схема имеет 10 допустимых состояний, последовательность которых есть 0000, 0001, 0010 ... ,1000, 1001, затем следует повторение 0000, 0001 и т.д. Поскольку схема не имеет входов, на ориентированных линях указан лишь текущий выходной сигнал, соответствующий каждому состоянию. Эти значения равны 0 для всех допустимых состояний, за исключением 1001. Таблица 10.1 является соответствующей таблицей состояний. Так как схема не имеет входов, таблица содержит только один внутренний столбец. Отметим, что для шести неиспользованных состояний от 1010 до 1111 следующие состояния не заданы, они обозначены как неопределенные состояния.


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

Т а б л и ц а 10.1. Таблица состояний десятичного счетчика

Текущее состояние Следующее состояние
Q3 Q2 Q1 Q0 Q3 Q2 Q1 Q0
0 0 0 0 0 0 0 1/0
0 0 0 1 0 0 1 0/0
0 0 1 0 0 0 1 1/0
0 0 1 1 0 1 0 0/0
0 1 0 0 0 1 0 1/0
0 1 0 1 0 1 1 0/0
0 1 1 0 0 1 1 1/0
0 1 1 1 1 0 0 0/0
1 0 0 0 1 0 0 1/0
1 0 0 1 0 0 0 0/1
1 0 1 0 d d d d/d
1 0 1 1 d d d d/d
1 1 0 0 d d d d/d
1 1 0 1 d d d d/d
1 1 1 0 d d d d/d
1 1 1 1 d d d d/d

Т а б л и ц а 10.2. Таблица переходов Т-триггера

Текущее состояние Q Следующее состояние Q N
0 0 0
0 1 1
1 0 1
1 1 0

Таблица 10\3\

Текущее состояние Выход Текущее состояние Следующее состояние Вход триггера
Q3 Q2 Q1 Q0 C Q3 Q2 Q1 Q0 Q3 Q2 Q1 Q0 T3 T2 T1 T0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 1
0 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 1
0 0 1 1 0 0 0 1 1 0 1 0 0 0 1 1 1
0 1 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1
0 1 0 1 0 0 1 0 1 0 1 1 0 0 0 1 1
0 1 1 0 0 0 1 1 0 0 1 1 1 0 0 0 1
0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 1
1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1
1 0 0 1 1 1 0 0 1 0 0 0 0 1 0 0 1
1 0 1 0 d 1 0 1 0 d d d d d d d d
1 0 1 1 d 1 0 1 1 d d d d d d d d
1 1 0 0 d 1 1 0 0 d d d d d d d d
1 1 0 1 d 1 1 0 1 d d d d d d d d
1 1 1 0 d 1 1 1 0 d d d d d d d d
1 1 1 1 d 1 1 1 1 d d d d d d d d

Следующим шагом является получение выражений для выходного сигнала С и входных сигналов триггеров Т3, Т2, Т1 и Т0. На рис.10.9 показаны карты, использованные при получении этих минимальных сумм произведений. Логическая схема десятичного счетчика, реализованная в соответствии с этими выражениями посредством вентилей И, ИЛИ, НЕ и четырех синхронизируемых Т-триггеров, приведена на рис.10.10.

Q1Q0 Q1Q0 Q1Q0 Q1Q0 Q1Q0 Q1Q0 Q1Q0 Q1Q0
Q3Q2 0 0 0 0 Q3Q2 0 0 1 0
Q3Q2 0 0 1 0 Q3Q2 0 0 1 0
Q3Q2 d d d d Q3Q2 d d d d
Q3Q2 0 1 d d Q3Q2 0 0 d d
T3 = Q3Q0 + Q2Q1Q0 T2 = Q1Q0

Q1Q0 Q1Q0 Q1Q0 Q1Q0 Q1Q0 Q1Q0 Q1Q0 Q1Q0
Q3Q2 0 1 1 0 Q3Q2 1 1 1 1
Q3Q2 0 1 1 0 Q3Q2 1 1 1 1
Q3Q2 d d d d Q3Q2 d d d d
Q3Q2 0 0 d d Q3Q2 1 1 d d
T1 =Q3Q0 T0 = 1

Q1Q0 Q1Q0 Q1Q0 Q1Q0
Q3Q2 0 0 0 0
Q3Q2 0 0 0 0
Q3Q2 d d d d
Q3Q2 0 1 d d
C = Q3Q0

Рис.10.9.




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

АЛГОРИТМЫ РЕАЛИЗАЦИИ АРИФМЕТИЧЕСКИХ ДЕЙСТВИЙ В ЦИФРОВЫХ АВТОМАТАХ

11.1. Общие принципы разработки алгоритмов

Любые действия, процедуры, по обработке информации, в частности цифровой, выполняются по тому или иному алгоритму. Перед тем, как подробно рассматривать алгоритмы арифметических действий, выполняемых в цифровых автоматах, приведем определение самого понятия алгоритма и общие принципы составления любых алгоритмов.
Совокупность правил перехода цифрового автомата из одного состояния в другое в зависимости от входной информации и внутренних состояний автомата называется алгоритмом преобразования (переработки) информации.
Вообще алгоритмом называется конечная совокупность точно сформулированных правил решения какой-то задачи. Иначе говоря, алгоритм решения любой задачи это точно описанная последовательность шагов решения поставленной задачи, на каждом из которых выполняется определенное действие или процедура. Причем, эти действия могут выполняться чисто аппаратно, или же под управлением соответствующей программы или микропрограммы.
Можно привести еще одно определение понятия алгоритма. Алгоритм - это строго формальное описание конечной последовательности некоторых "элементарных" действий или процедур, которые надо выполнить над исходными данными и над промежуточными результатами, возникшими в ходе выполнения этих операций, для того чтобы прийти к информации, являющейся результатом обработки исходных данных.
Последовательность операций, описываемых в алгоритме, может быть статической (в порядке описания) и динамической ( в порядке выполнения). Соответствие между статической и динамической последовательностями нарушается в тех местах алгоритма, где происходит его ветвление по условию и в местах обращения к подпрограммам и функциям. Участок алгоритма, на котором эти последовательности совпадают называется линейным участком или цепочкой.
Цепочки и ветвления являются базовыми структурами алгоритов. К таким структурам относятся также подпрограммы, функции и циклы.
Подпрограмма или функция - это группа команд реализующая некоторую процедуру, которая может встречаться в основном алгоритме. После выполнения подпрограммы или функции управление передается тому месту основной алгоритма (программы) откуда они были вызваны. Подпрограммы (процедуры) и функции - это отдельные программные объекты, которые могут быть заранее созданы и используются в алгоритмах, которые реализуются программно.
Участок алгоритма, который по условию решения задачи должен быть выполнен подряд несколько раз, называется циклом. Чтобы обеспечить многократное выполнение какой-либо группы команд (команды "тела цикла"), достаточно завершить эту группу командой перехода на первую ее команду. Такой переход должен быть условным, т.е. зависить от выполнения некоторого условия, определяющего необходимость повторения этой группы команд.
Циклы могут быть:
- итерационного типа, когда число повторений заранее не известно, а определяется по некоторому условию, которое может изменяться в процессе выполнения цикла;
- с известным заранее числом повторений или во время состаления программы, или к моменту входа в цикл, т.е. циклы "со счетчиком".
Нужно учесть что совокупность команд или процедур, образующих тело цикла, может в свою очередь содержать другой цикл. Такую структуру называют вложенными циклами.
Таким образом, цикл - это такой фрагмент структуры алгоритма (программы), который позволяет необходимое число раз выполнить некоторую группу процедур, вхдящих данный алгоритм, без многократного их отражения в структуре алгоритма (программы). Циклы используются в алгоритмах, которые реализуются как аппаратно, так и программно.
Следовательно, подпрограммы, функции и циклы позволяют мини-мизировать структуру разрабатываемого алгоритма. Использование готовых подпрограмм и функций к тому же минимизирует объем необходимых разработок и облегчает процедуру модернизации разработанного алгоритма, если возникает в этом необходимость. Но нужно учесть, что все перечисленные структуры не увеличивают скорость выполнения алгоритма.
При помощи перечисленных базовых структур алгоритма: цепочка, ветвление, подпрограмма или функция и цикл, можно описать любой алгоритмический процесс.
Алгоритм можно описать, например, словесно, используя максимально четкие и лаконичные выражения; или же при помощи специальных языков, предназначенных для этой цели; а также с помощью блок-схем, т.е. граф-схем. Последний метод наиболее наглядный и поэтому наиболее распространенный.
Словесное описание алгоритма состоит из словесного перечня действий (шагов), составляющих алгоритм. Каждый шаг имеет порядковый номер. Алгоритм выполнятся последовательно шаг за шагом. Если последовательность выполнения действий должна быть нарушена, то в тексте алгоритма отмечается переход к пункту с необходимым номером. Словесное описание алгоритмов не отличается наглядностью, поэтому такое описание используется для несложных алгоритмов.
При построении блок-схем, т.е. граф-схем, алгоритма используется определенный набор графических символов, соединяемых между собой линиями. Символы обозначают выполняемые операции, а линии со стрелками - последовательность их выполнения. Символ может быть начальным, конечным, операторным и условным. При построении граф-схемы алгоритма должны выполняться следущие условия:
каждый операторный символ имеет один вход и один выход;
начальный символ- один выход, а конечный - один вход;
условный символ имеет один вход и два выхода, обозначаемых цифрами 1 и 0 или словами "да" и "нет";
выходы и входы символов соединяются друг с другом с помощью линий со стрелками, направленных всегда от выхода одного символа ко входу другого;
каждый выход соединяется только с одним входом;
любой вход соединяется по крайней мере с одним выходом.
Рассмотрим назначение и конфигурацию некоторых основных символов граф-схем алгоритмов.
Начало и конец алгоритма представляются овалами:


Начало Конец


Операторный символ обозначается прямоугольником, в который вписывется условное обозначение оператора, реализуемого на данном шаге алгоритма:


и т.д.

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


1 0


Этот символ означает выбор направления выполнения алгоритма в зависимости от того выполняется или нет некоторое логическое условие, обозначение которого вписывается в ромб. Если условие выполняется, то ветвление происодит по выходящей линии, обозначенной "1" или словом "да", в противном случае по выходящей линии, обозначенной "0" или словом "нет".
Когда хотят подчеркнуть соответствие структур словесного описания алгоритма и его граф-схемы графические символы нумеруют. Причем, номер символа должен соответствовать номеру шага словесного описания алгоритма, на котором реализуется процедура вписанная в данный графический символ. Номер символа вписывается в разрыв вертикальной или верхней горизонтальной линии в левой части символа.
При необходимости около символа можно привести некоторый краткий комментарий, уточняющий определенные детали процедуры, которую отражает данный графический символ. Текст комментария оформляют следующим образом:






Приведем простой пример граф-схемы алгоритма:





















Для упрощения процедуры построения граф-схемы в данном тексте во всех случаях используется только прямоугольный символ. Например, вместо ромба использовать прямоугольный символ с двумя выходами:


или и т.д,
где Y - это YES, а N - это NO.
Однако надо учесть, что при таком варианте построения граф-схемы алгоритма несколько теряется наглядность и нарушается стандарт на изображение графических символов граф-схем алгоритмов.
Наконец, есть еще один вспомогательный символ - кружок с меткой (буквой или цифрой), который пририсовывается к концу некоторой линии и обозначает ее соединение с другой линией этой же граф-схемы, имеющей на своем конце кружок с такой же меткой.
При помощи этих символов можно описать практически любой алгоритм обработки информации.
Граф-схемы алгоритмов широко используются при проектировании различных функциональных устройств компьютеров и программ, вы-полняющих те или иные действия.
В символы операторов и условий вписывают некоторые условные обозначения, например, буквы или слова, которым ставят в соответствие некоторые конкретные процедуры и условия, описываемые отдельно. В эти символы можно также вписывать конкретные процедуры и логические условия описанные при помощи, так называемых, содержательных терминов. В этом случае граф-схема алгоритма называется содержательной.
Содержательные термины можно обозначать по разному, но они должны быть максимально лаконичными и в тоже время четко обозначать выполняемую процедуру. Например, можно привести следующие общепринятые содержательные термины.
Pr1 := A - в регистр Pr1 загружается значение операнда А;
[PrА] - сдвиг содержимого регистра PrА вправо на один разряд;
[SC] - содержимое счетчика SC;
SC |= SC + 1 - прибавление 1 к содержимому счетчика SC;
Pr2 := [Hu2] - инвертирование содержимого регистра Pr2;
Pr1 := [Pr1]ДП - перевод содержимого регистра Pr1 в дополнительный код;
Pr1[m] или Pr1(m)_ m-тый разряд регистра Pr1;
L(n, PrA) - сдвиг содержимого регистра PrA влево на n разрядов;
R(n,HuA) - сдвиг вправо;
PrC := PrA PrB; PrC := PrA PrB; и т.д.
Регистры можно обозначать только присвоенными им именами. Например, регистры А, С, СА, MQ, SR и т.д.
Процедура передачи некоторому регистру значения, полученного в результате определенных арифметических или логических действий, или же передача данных из другого регистра, а также из любых других источников, принято обозначать знаками действий := или = . Например, АС := 0,
0 AC, AC [SR], AC := [SR] + [MQ] и т.д.
Знаки же =, <, > и т.д. обозначают соответствующие логические действия. Знаки + и - это двоичное сложение и вычитание, а символ add2 - означает двоичное алгебраическое сложение.
Как уже отмечалось, к названию регистра, при необходимости, в скобках приписывается название (или номер) разряда или группы разрядов этого регистра, с которыми выполняется та или иная процедура. Например: AC(S), MQ(M), SR(S, M) и т.д. Если содержимое всего регистра, или группы его разрядов, инвертируется, то это обозначается следующим образом: [MQ], [AC(M)] и т.д.
Рассмотренные варианты содержательных терминов используются также и при словесном описании алгоритмов.
Рассмотрим еще для примера граф-схему фрагмента алгоритма, в котором организуется цикл, обеспечивающий заданное число повторных выполнений некоторой группы процедур. Эта группа процедур будет составлять так называемое "тело цикла". Нужное количество повторных выполнений (n) записывается предварительно в некоторый счетчик SC. Тогда содержательная граф-схема такого цикл будет выглядеть следующим образом.














При разработке алгоритма практически любой процедуры обработки информации сперва этот алгоритм представляется с минимальным уровнем детализации процедуры. Потом, постепенно уровень детализации увеличивается и доводится до отображения элементарных действий, выполняемых соотвествующей аппаратурой, или же операторами и командами языка программирования, на котором будет создаваться программа, предназначенная для реализации разрабатываемого алгоритма. Очевидно, что в последнем случае в структуре алгоритма должна быть учтена специфика языка программирования, на котором будет реализована данная программа. В частности, учтены методы или способы обращения к подпрограммам (процедурам), функциям характерные для данного зыка программирования.
Теперь рассмотрим общие принципы организации арифметических действий в цифровых автоматах, т.е. в компьютерах. Остановимся на варианте, когда арифметические действия с числами в форме с фиксированной и плавающей запятой выполняются разными арифметическими устройствами, а числа в форме с фиксированной запятой являются целыми n-разрядными числами, представленными в прямом коде. Напомним, что числа, с которыми выполняют те или иные арифметические действия, принято называть операндами.
Очевидно, что для выполнения любой арифметической процедуры надо сперва загрузить операнды в соответствующие регистры арифметического устройства (АУ) и передать в АУ некоторый код, определяющий тип арифметического действия, которое надо выполнить над загруженными операндами. Результат арифметического действия в свою очередь считывается из определенного регистра АУ в форме, используемой в конкретном компьютере. АУ является важнейшей частью АЛУ процессора.
АЛУ процессора компьютера обычно состоит из нескольких регистров данных, в которых можно хранить информацию, и логических схем блока управления АЛУ, обеспечивающего выполнение определенных арифметических и логических операций с содержимым этих регистров.
В состав блока управления АЛУ, в частности, могут входить ряд двоичных счетчиков необходимой разрядности; группа триггеров и так называемый статусный регистр, при помощи которых фиксируются или устанвливаютя определенные логические условия; регистры "масок", в том числе сдвиговые, для выполнения различных логических операций с содержимым регистров данных.
Данные, хранящиеся в упомянутых регистрах данных могут обрабатыватся следующим образом.
1. Регистры могут быть сброшены.
2. Содержимое регистров может быть преобразовано в обратный или дополнительный код.
3. Содержимое регистров, или сразу двух регистров как одно целое, может быть сдвинуто вправо или влево.
4. Содержимое регистров может быть увеличино или уменьшено на единицу.
5. Передача содержимого одного регистра в другой.
6. Сложение или вычитание данных составляющих содержимое двух регистров, выполняемое при помощи соответствующего параллельного сумматора.
7. Дизъюнкция или конъюнкция данных составляющих содержимое двух регистров.
Каждая операция АЛУ выполняется по соответствующей микропрограмме, команды которой обеспечивают выполнение необходимых элементарных операций. Вся совокупность таких микропрограмм хранится в специальной памяти процессора. Каждая микропрограмма активизируетя под управлением соответствующей базовой команды (команды ассемблера) процессора.
Поскольку мы обсуждаем алгоритмы арифметических действий, то будем рассматривать только те узлы и функции АЛУ, которые обеспечивают выполнение именно этих действий, т.е. вкратце рассмотрим основное аппаратное обеспечение арифметического устройства.
Структура алгоритмов реализации арифметических действий во многом зависит от структуры соответствующего арифметического устройства, предназначенного для выполнения этих действий. По этой же причине допустимый уровень детализации алгоритма зависит от уровня детализации, по которому описана структура АУ.
В принципе для каждого арифметического действия, даже при одном и том же аппаратном обеспечении, можно разработать различные алгоритмы его реализации. Из всей совокупности этих алгоритмов выбирается тот алгоритм, который обеспечивает максимальную скорость выполнения данного арифметического действия при минимальном, или же заранее заданном, аппаратном обеспечении.
Рассмотрим с этой точки зрения некоторые варианты алгоритмов арифметических действий при частном, но типичном, варианте соот-ветствующего аппаратного обеспечения. В начале вкратце опишем принятые варианты этого обеспечения арифметических устройств, предназначенных для реализации разрабатываемых алгоритмов. Это необходимо для того, чтобы при разработке алгоритмов использовать только те действия по обработке данных, которые может реализовать данное арифметическое устройство. Таким образом, перед рассмотрением алгоритмов арифметических действий нужно с необходимой детализацией привести описание соответствующих АУ, при помощи которых предполагается реализовать эти алгоритмы.


11.2. Алгоритмы реализации арифметических действий с операндами, представленными в форме с фиксированной запятой


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






Регистр SR

Накапливающий сумматор АС









Рис\ 11.1\
В устройство входят:
накапливающий сумматор АС, включающий:
накапливающий регистр АС и параллельный сумматор ;
запоминающий регистр SR;
регистр множителя-частного MQ;
n-разрядный вспомогательный регистр сдвига LR;
6-разрядный регистр RG;
счетчик сдвигов SC;
двухбитовый регистр кода процедуры OPCODE;
однобитовые регистры: SI, Т, ADOV, DVOV.
Все однобитовые регистры, т.е. триггера, чаще всего объединяются в один статусный регистр.
На рис.1 узел управления арифметическим устройством не показан. Этот узел управляет передачей содержимого из одного регистра в другой, управляет всеми арифметическими и логическими процедурами над содержимым этих регистров, анализирует всю статусную информацию. Он может быть реализован чисто аппаратно, или же функционировать под управлением соответствующих микропрограмм.
В n-разрядных регистрах AC, SR, MQ старший, n-ый, разряд S выделен под знак числа. Остальные n - 1 разряды этих регистров отведены для представления значения числа и обозначаются как AC(M), SR(M), MQ(M). Разряд AC(Q) используется в одном из алгоритмов деления.
В зависимости от структуры регистров АС и MQ можно прямой код содержимого этих регистров преобразовывать в дополнительный или же в обратный код и выполнять также соответствующую обратную процедуру. Возможные варианты структур регистров с такими характеристиками приведены на рис.16а и 16б в разделе 4.
При вычитании содержимого регистра SR из содержимого регистра АС вычитаемое может представляться в дополнительном коде непосредственно на входах параллельного сумматора . Структура одного разряда такого сумматора выглядит следующим образом:

SR(i)


SM S AC(i)

P Pi
Pi-1
Сложение
Вычитание
AC(i)
Рис. 11.2\
В младшем разряде сумматора на SM вместо сигнала Pi-1 поступает сигнал "Вычитание", если алгебраическое сложение выполняется в дополнительном коде. Таким образм, параллельный сумматор такой конфигурации позволяет выполнять не только процедуру сложения, но и процедуру вычитания из содержимого регистра АС содержимое регистра SR без предварительного представления последнего в дополнительном коде.
Регистры АС и MQ объединены в один так называемый "касрегистр" для процедуры совместного сдвига их содержимого вправо или влево. Сдвигается содержимое всех разрядов, кроме знакового, т.е. разряды AC(M) и MQ(M). Причем, таким образом, чтобы при каждом таком сдвиге содержимое очередного младшего, 0-го, разряда АС(М) попадало в старший, (n -1)-ый разряд MQ(M) и наоборот. Процедуры сдвига используются при умножении и делении.
Регистры ADOV и DVOV сигнализируют о состоянии переполнения при выполнении операций сложения или умножения и деления соответственно. В регистр OPCODE заносится код, по которому определяется какую процедуру необходимо выполнить: сложение, вычитание, умножение или деление.

11.2.1.Сложение и вычитание

При сложении слагаемые размещаются в регистрах SR и АС. При вычитании от уменьшаемого из регистра АС отнимается вычитаемое из регистра SR. Регистр MQ в этих случаях не используется. Результат размещается в регистре АС, поэтому сперва в АС загружается исходный операнд и результат алгебраического сложения формируется в сумматоре , а на следующем такте этот результат алгебраического сложения записывается в регистр АС. Если результат арифметического действия получился в дополнительном или обратном коде, то он после выполнения этого действия представляется в прямом коде с отрицательным знаком, т.е. в знаковый бит записывается единица.
Таким образом, при сложении: [AC] + [SR] AC, а при вычитании:
[AC] + [SR] AC. В соответствующем алгоритме можно учесть, отмеченный ранее способ организации процедуры вычитания при помощи параллельного сумматора, включенного в состав АУ, но можно и не использовать эту возможность. Рассмотрим последний вариант как более рациональный в данном случае.
Алгоритм выполнения каждого арифметического действия можно разделить на две основные части: алгоритм процедуры инициализации данного арифметического действия и алгоритм выполнения самого арифметического действия.
После загрузки операндов в регистры АС и SR можно выполнить необязательную процедуру проверки значений операндов на 0 с соответствующей реакцией, которая приведена на рис. 3.
Во время инициализации процедур сложения или вычитания выполняются следующие действия:
1. Если код процедуры соответствовал вычитанию, то знак операнда, размещенного в регистре SR, изменяется, т.е. выполняется процедура
инвертирования: [SR(S)].
2. Если AC(S) = SR(S), то 1 SI, иначе 0 SI.
3. Если AC(S) = 1, то AC(M) := [AC(M)] + 1, т.е представляется в допол-нительном коде.
4. Если SR(S) = 1, то SR(M) := [SR(M)] + 1.
После инициализации выполняется процедура самого алгебраического сложения: AC:= [AC] add2 [SR]\
5. Если при [SI] = 1 и после сложения AC(S) = SR(S), то переход к пункту 7, иначе вырабатывается сигнал переполнения: ADOV = 1, т.е. 1 ADOV и переход к пункту 9.
6. Если [SI] = 0, то переход к пункту 7.
7. Если значащая часть результата равна 0, т.е. AC(M) = 0, то в знаковый бит регистра АС засылается 0: 0 AC(S) и переход к пункту 9.
8. Если AC(S) =1, то результат получился в дополнительном коде и его преобразуют в прямой код: AC(M) := [AC(M)] + 1\
9. Конец процедуры алгебраического сложения.
Граф-схема этого варианта алгоритма алгебраического сложения приведена на рис.11.3.

11.2.2. Умножение

При умножении [SR] [MQ] касрегистр {AC-MQ}.
Умножение можно выполнять с анализом одного младшего бита множителя MQ(0) или двух младших битов множителя MQ(1,0).
Процедура инициализации умножения заключается в следующем.
1. Если один из операндов равен 0, то результату умножения при-сваивается значение 0 и тем самым процедура умножения заканчивается:
0 MQ, 0 AC\
2. Если у операндов одинаковые знаки, то результату присваивается положительный знак, т.е.0 AC(S), и 0 MQ(S), 0 SR(S)\
3. Если у операндов разные знаки, то результату присваивается отрицательный знак, т.е 0 AC(S) и 1 MQ(S), 0 SR(S)\
4. Обнуляется регистр АС: 0 AC(M).
Как уже отмечалось, при умножении чисел множимое из регистра SR умножается на множитель из регистра MQ, а произведение помещается в "касрегистр", образованный из регистров АС и MQ. В регистре АС находится старшая часть произведения, а в регистре MQ - младшая часть. Множимое остается в регистре SR, а множитель в регистре MQ теряется.
Рассмотрим сперва вариант умножения с анализом одного младшего бита множителя.
Перед началом процедуры умножения в счетчик SС записывается число
(n-1), равное числу разрядов значащей части числа в форме с фиксированной запятой, и определяющее в данном случае число элементарных шагов процедуры умножения.
На каждом элементарном шаге умножения выполняются следующие действия.
1. Если MQ(0) = 0, то содержимое касрегистра {AС(M)-MQ(M)} сдвигается вправо на один разряд: [AC(M)-MQ(M)]\
2. Если MQ(0) = 1, то содержимое регистра SR складывается с содержимым регистра АС: AC := [AC] + [SR], после чего содержимое касрегистра
{AС(M)-MQ(M)} сдвигается вправо на один разряд.
3. В конце каждого элементарного шага вычитываетя 1 из содержимого счетчика SC, после чего проверяется равно ли 0 содержимое SС, если да, то процедура умножения заканчивается. В противном случае элементарный шаг повторяется.
4. Если по окончании умножения содержимое AС(M) не равно 0 вы-рабатывается сигнал переполнения: 1 ADOV\
Теперь рассмотрим вариант умножения с анализом двух младших разрядов множителя MQ(1,0). Граф-схема соответствующего алгоритма приведена на рис.11.4.
В связи с тем, что в этом случае в процессе выполнения операции умножения на каждом цикле операции анализируется сразу два младших разряда множителя, то таких циклов понадобится (n-1)/2. Это число циклов записывается в счетчик SС. При обнулении содержимого счетчика SС процедура умножения останавливается. В конце каждого цикла производится одновременный сдвиг на два разряда вправо содержимого касрегистра {AС(M)-MQ(M)}. Обозначим эту процедуру условно как ПС. Очевидно, что и в этом случае произведение будет сформировано в разрядной сетке, первоначально отведенной для множителя, т.е. в регитре MQ.
В зависимости от результата анализа разрядов MQ(1,0) предусматриваются следующие действия.
1. Если [MQ(1,0)] = 00= то выполняются только процедуры: ПС и SC = SC-1.
2. Если [MQ(1,0)] = 01, то последовательно выполняются процедуры:
AC := [AC] + [SR], GC и SC = SC-1.
После каждого выполнения процедуры AC := [AC] + [SR] проверяется равно ли 0 содержимое AC(S)! Если нет, то выполняется процедура 1 ADOV и выполнение арифметического действия прекращается.
3. Если [MQ(1,0)] = 10, то выполняются процедуры: сдвиг множимого влево на 1 разряд, т.е. умножение его на два, потом AC := [AC] + [SR], GC и
SC = SC _ 1.
Перед сдвигом множимого, т.е. перед процедурой [SR], проверяется равно ли содержимое разряда SR(n-1) единице, если да, то выполняется процедура 1 ADOV и выполнение арифметического действия прекращается.
4. Если [MQ(1,0)] = 11, то выполняется три раза процедура AC := [AC] + [SR] потом ПС и SC = SC _ 1.
Иногда процедуру трехкратного сложения заменяют однократным вычитанием: AC := [AC] - [SR].
5. Когда [SC] = 0 - операция умножения заканчивается.
Как и в предыдущем случае если содержимое АС(М) после окончания процедуры умножения не равно нулю вырабатывается сигнал переполнения:
1 ADOV.
При умножении и делении необходимо бывает выполнить процедуру AC := [AC] _ [SR]. Как уже отмечалось, в этом случае операнд, размещенный в регистре SR, представляется в дополнительном коде непосредственно на входе сумматора, а не в самом регистре SR. Для этого на входе сумматора предусматривается специальная схема управления.

11.2.3. Деление

Рассмотрим четыре варианта алгоритма деления. Первые два требуют выравнивания левого края делителя с левым краем делимого. При выполнении этих двух алгоритмов делимое загружается в регистр АС, а делитель в регистр SR регистр MQ обнуляется, частное формируется в регистре MQ:
[{AC-MQ}] / [SR] MQ, а остаток в АС. Делитель после выполнения операции остается в регистре SR, а делимое теряется.
При всех вариантах алгоритма деления инициализация процедуры деления заключается в следующем.
1. Если делимое равно 0, то результату присваивается значение 0: 0 MQ и тем самым процедура деления заканчивается.
2. Если делитель равен 0, то вырабатывается сигнал ошибки: 1 DVOV, результату присваивается значение 0: 0 MQ, и тем самым процедура деления заканчивается.
3. Если делимое меньше делителя, то вырабатывается сигнал ошибки:
1 DVOV и процедура деления заканчивается: 0 MQ и 0 AC(S)\
4. Если у операндов одинаковые знаки, то результату присваивается положительнй знак: 0 MQ(S), 0 AC(S), 0 SR(S)\
5. Если у операндов разные знаки, то результату присваивается отрицательный знак: 1 MQ(S), 0 AC(S), 0 SR(S)\
В первых двух вариантах алгоритма деления инициализация завершается процедурой выравнивания.
Выравнивание левого края делителя по отношению к левому краю делимого выполняется путем сдвига влево содержимого SR(M). Тем самым "совмещаются" старшие единицы делимого и делителя. Если число сдвигов было равно, например, m, то число M = m + 1 записывается в счетчик SC, т.е нужно будет повторить М раз элементарные шаги деления.
Рассмотрим вначале эти два варианта алгоритма деления.
На каждом элементарном шаге деления с восстановлением остатка (первый вариант алгоритма) выполняются следующие действия.
1. AC := [AC] _ [SR].
2. Если [AC] < 0= то переход к пункту 3, иначе переход к пункту 4.
3. AC := [AC] + [SR] и сдвиг содержимого касрегистра влево на один разряд: [AC(M) - MQ(M)], потом MQ(0) := 0, далее переход к пункту 5.
4. Сдвиг содержимого касрегистра влево на один разряд и MQ(0) := 1.
5. SC := SC - 1. Если [SC] 0= то переход к пункту 1, иначе переход к пункту 6.
6. Выравнивание остатка: сдвиг содержимого AC(M) вправо на М разрядов.
7. Конец процедуры деления.
Граф-схема этого алгоритма приведена на рис. 11.5.
При делении без восстановления остатка (второй вариант алгоритма) изменяется только пункт 3:
3. Сдвиг содержимого касрегистра влево на один разряд и MQ(0) := 0, далее AC := [AC] + [SR], SC := SC _ 1. Если [SC] 0, то переход к пункту 2, иначе переход к пункту 6.
Процедура выравнивания левого края делителя, алгоритм которой приведен на рис. 11.8, очень часто получается достаточно длительной. Поэтому ускорение самой процедуры деления за счет уменьшения числа элементарных шагов деления не всегда уменьшает суммарное время, необходимое для выполнения всего алгоритма деления. В связи с этим используют также алгоритмы деления, не требующие процедуры выравнивания. Возможные варианты таких алгоритмов приведены на рис. 11.6 и 11.7. Разряд AC(Q) накапливающего сумматора АС используется только в последнем из этих алгоритмов, в котором учитывается специфика структуры используемого в АУ накапливающего сумматора. Этот алгоритм позволяет минимизировать аппаратуру описанного АУ, т.к. не требует применения регистров LR, SC1, T, которые используются в других вариантах алгоритма деления, и упрощает процедуру передачи информации из регистра MQ в регистр АС.

[AC] [SR] AC













































Рис. 11.3. Алгоритм алгебраического сложения чисел в форме с фиксированной запятой.


[AC] [SR] AC













































Рис. 11.3а. Алгоритм алгебраического сложения чисел в форме с фиксированной запятой.



Рис. 11.4. Умножение операндов с фиксированной запятой (вариант 2)
C:= A / B или MQ := {AC-MQ} / [SR], остаток в АС


















































Рис. 11.5. Алгоритм деления (вариант 1) операндов с фиксированной запятой с восстановлением остатка.
A / B = C : [{AC-MQ}] / [SR] MQ, остаток в АС


















































Рис. 11.6. Деление операндов с фиксированной запятой.
(вариант 3, не требует процедуры выравнивания левого края делителя)
A / B = C : [{AC-MQ}] / [SR] MQ, остаток в АС

















































Рис. 11.7. Деление операндов с фиксированной запятой.
(вариант 4, не требует процедуры выравнивания левого края делителя)




























Рис. 11.8. Процедура выравнивания левого края делителя
(дополнение к алгоритму, приведенному на рис. 11.5.)

11.3 Алгоритмы реализации арифметических действий с операндами, представленными в форме с плавающей запятой

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

















Рис. 11.9.

АС - накапливающий сумматор;
SR - запоминающий регистр;
MQ - регистр множителя-частного;
SC - счетчик сдвигов;
CHOV - индикатор переполнения порядка;
CHUN - индикатор исчезновения порядка;
DVOV - индикатор ошибки при делении;
FR - часть регистра, относящаяся к мантиссе (разряды:m 1; 1 _ младший разряд, m - старший);
CH - часть регистра, относящаяся к порядку;
QCH, QFR _ служебные разряды субрегистров AC(CH), AC(FR) соот-ветственно, которые используются для контроля за переполнением разрядной сетки;
L - регистр со значением смещения l.
Напомним, что обычно в формате с плавающей запятой вместо показателя p используют так называемую характеристику ("смещенный порядок"):

r = p + l,

где l - избыток (смещение), значение которого подбирается таким образом, чтобы при изменении значения показателя от некоторого минимального значения -|pmax| до максимального +|pmax|, характеристика r менялась от 0 до rmax\ Следовательно, характеристика не меняет своего знака. Для этого принимается, что

l = 2k-1 ,

где k - число разрядов, выделеных для представления порядка числа в формате с плавающей запятой.
Таким образом, каждый из регистров AC, SR, MQ включает в себя два субрегистра, один из которых предназначен для размещения кода характеристики операнда, а другой для размещения мантиссы. Эти субрегистры могут независимо участвовать в тех или иных арифметических процедурах.
В этом АУ, как и в АУ для операндов с фиксированной запятой, при вычитании содержимого регистра SR из содержимого регистра АС вычитаемое представляется в дополнительном коде непосредственно на входах параллельного сумматора
Субрегистры FC(FR), MQ(FR) объединены в один так называемый "касрегистр" (линия связи 1 и 2) для процедуры сдвига их содержимого вправо или влево. Причем, таким образом, чтобы при каждом таком сдвиге по линии связи 1 очередной младший разряд FC(FR) попадал в старший разряд MQ(FR) и наоборот. По линиии связи 2 содержимое старшего разряда субрегистра FC(FR) передается младшему разряду субрегистра MQ(FR). При активизации одной линии связи другая блокируется.
Здесь так же, как и на рис.11.1 не показан узел управления АУ.

11.3.1. Сложение и вычитание

При сложении складываются содержимое регистров SR и AC. При вычитании вычитаемое размещается в регистре SR, а уменьшаемое - в АС. Результат формируется в регистре АС.
Граф-схема алгоритма алгебраического сложения операндов с плавающей запятой приведена на рис.11.10. В этом алгоритме не учитывается особенность используемого в АУ параллельного сумматора.
Процедура сложения или вычитания состоит из 4 основных частей:
инициализации;
выравнивания порядка, т.е характеристики;
сложения или вычитания мантисс;
нормализации.
Во время инициализации выполняются следующие процедуры.
1. Если в OPCODE код вычитания, то содержимое SR(S) инвертируется, т.е. [SR(S)].
2. 0 MQ.
3. Если AC(FR) = 0, то переход к пункту 5, иначе к пункту 4.
4. Если SR(FR) = 0, то переход к пункту 6, иначе переход к процедуре выравнивания порядков.
5. Если SR(FR) = 0, то переход к пункту 6, иначе [SR] FC и переход к пункту 6.
6. Конец процедуры алгебраического сложения.
Во время выравнивания порядков мантисса операнда с меньшим порядком (характеристикой) сдвигается по разрядной сетке вправо с прибавлением единицы к его характеристике при каждом сдвиге на один разряд. Эта процедура продолжается до тех пор, пока характеристики обоих операндов не станут равными. Полученная таким образом характеристика, одинаковая для обоих операндов, присваивается, как предварительная, результату операции. Значение этой характеристики засылается в субрегистр AC(CH). Граф-схема процедуры выравнивания порядков приведена на рис.11.11 и более подробно на рис.11.12.
Далее осуществляется сложение или вычитание мантисс по правилам, аналогичным правилам для чисел с фиксированной запятой. В этой процедуре использутся субрегистры SR(S, FR), FC(S, QFR, FR).
В этом арифметическом устройстве при выполнении алгебраического сложения мантисса отрицательного операнда также представляется в дополнительном коде. Например, если SR(S) = 1, то SR(FR) := [SR(FR)] + 1, если же AC(S) = 1, то AC(FR) := [AC(FR)] + 1.
Если результат получился в дополнительном коде: AC(S) = 1= то он преобразуется в прямой, т.к. мантисса всегда модуль со знаком. Для этого выполняется следующая процедура: AC(FR) := [AC(FR)] + 1.
После алгебраического сложения выполняется процедура нормализации результата, граф-схема которой приведена на рис.11.13.
1. Если [AC(QFR)] = 1, то мантисса результата сдвигается вправо вместе с этим разрядом, а характеристика результата увеличивается на единицу.
2. Если в процессе нормализации произошло переполнение порядка: AC(QCH) = 1= то единица засылается в регистр CHOV\
3. Если [AC(QFR)] = 0 и старший разряд субрегистра AC(FR) также равен 0, то в счетчик SС загружается число равное числу разрядов, выделенных под мантиссу числа. После этого выполняется сдвиг [AC(FR)] на один разряд влево с вычитанием единицы из [AC(CH)] и SC = [SC] _ 1. Эта процедура продолжается пока в старшем разряде не появится единица или пока не станет [SС] = 0.
4. Если не произошло исчезновение порядка (r < 0), то процедура сложения или вычитания заканчивается. При исчезновении порядка в регистр CHUN засылается единица, а в регистр AС - 0.

11.3.2. Умножение

При умножении множитель размещается в регистре MQ, а множимое в регистре SR.
Процедура умножения состоит из следующих частей:
инициализации;
сложения порядков, т.е. характеристик;
умножения мантисс;
нормализации.

При инициализации выполняются следующие процедуры.
1. Если MQ(S) = SR(S), то 0AC(S) и 0MQ(S), иначе 1AC(S) и 1MQ(S).
2. Если SR(FR) = 0 или MQ(FR) = 0, то 0 FC и 0 MQ и конец процедуры умножения, иначе переход к сложению характеристик и умножению мантисс.

Сложение характеристик сводится к следующим процедурам.
1. MQ(CH) AC(QCH, CH).
2. AC(QCH, CH) := [SR(CH)] + [AC(QCH, CH)] _ l, т.е. из этой суммы надо вычесть смещение, если складывались характеристики, а не порядки.
Сперва выполняется сложение:
AC(QCH, CH) := [SR(CH)] + [AC(QCH, CH)], а потом [L] SR(CH), далее:
AC(QCH, CH) := [AC(QCH, CH)] _ [SR(CH)].
Содержимое SR(СH) переводится в дополнительный код прямо на входе накапливающего сумматора AC.
3. Если AC(QCH) = 1= то произошло переполнение порядка поэтому засылается единица в CHOV и процедура умножения завершается.
4. Если AC(QCH) = 0, то происходит переход к умножению мантисс.

Умножение мантисс производится по одному из алгоритмов умножения чисел с фиксированной запятой. В процедуре умножения мантисс используются субрегистры SR(FR), MQ(FR) и касрегистр {AC(QFR, FR) - MQ(FR)}, причем субрегистр AC(QFR, FR) предварительно обнуляется. Произведение мантисс образуется в касрегистре, причем в AC(QFR, FR) содержатся старшие разряды произведения, а в MQ(FR) - младшие.
Граф-схема процедуры умножения приведена на рис.11.14а.
После завершения процедуры умножения мантисс производится нормализация результата умножения по следующему алгоритму (рис.11.14б).
1. Выполняется процедура [AC(CH)] MQ(CH).
2. Если [AC(FR)] 0, то производятся сдвиги содержимого касрегистра вправо последовательно на один разряд по линии 1 и MQ(CH) := [MQ(CH)] +1 пока не выполнится условие AC(FR) = 0.
3. Если в процессе этих сдвигов станет MQ(QCH) = 1, то выполняется засылка 1 в CHOV и процедура умножения прекращается.
4. При обнулении AC(FR), если старший разряд субрегистра MQ(FR) не содержит единицы, то производится последовательно сдвиг содержимого MQ(FR) на один разряд влево и MQ(CH) := [MQ(CH)] _ 1 пока старшая единица мантиссы результата не попадет в старший разряд субрегистра MQ(FR).
Таким образом, результат умножения формируется в регистре MQ.

11.3.3. Деление

При делении делимое находится в регистре AC, а делитель в SR. Результат деления получается в регистре MQ. Процедура деления состоит из следующих частей:
инициализации;
вычитания порядков, т.е. характеристик;
деления мантисс;
нормализации результата.

Во время инициализации выполняются следующие процедуры.
1. 0 MQ.
2. Если AC(S) = SR(S), то 0 MQ(S), иначе 1 MQ(S).
3. Если SR(FR) = 0= то 1 DVOV и конец процедуры деления, иначе переход к следующему пункту.
4. Если AC(FR) = 0= то 0 MQ, 0 FC и конец процедуры деления, иначе переход к вычитанию характеристик и делению мантисс.
Процедура вычитания характеристик заключается в следующем.
1. AC(QCH, CH) = [AC(QCH, CH)] _ [SR(CH)] + l, т.е. к результату добавляется смещение, если оперируют характеристиками, а не порядками.
Сперва выполняется процедура AC(QCH, CH) = [AC(QCH, CH)]_[SR(CH)], потом [L] SR(CH) далее AC(QCH, CH) := [AC(QCH, CH)] + [SR(CH)].
Содержимое SR(CH) переводится в дополнительный код прямо на входе накапливающего сумматора AC.
2. Если [AC(QCH, CH)] < 0, то 1 CHUN и процедура деления заканчивается, иначе переход к делению мантисс.
Деление мантисс выполняется по одному из алгоритмов деления чисел с фикированной запятой, только с той разницей, что в этом случае исключается процедура выравнивания левых краев и поэтому в счетчик SC загружается число, равное числу разрядов, выделенных под мантиссу операндов. В процедуре деления мантисс используются субрегистры SR(FR), MQ(FR) и касрегистр {AC(QFR, FR) - MQ(FR)}. Результат деления мантисс получается в субрегистре MQ(FR), а остаток - в субрегистре AC(QFR, FR).
Граф-схема процедуры деления приведена на рис. 11.15а.
После деления мантисс выполняется процедура нормализации частного по следующему алгоритму (рис. 11.15б).
1. Выполняется процедура [AC(CH)] MQ(CH).
2. Если старший разряд (m) субрегистра MQ(FR) не содержит единицы, то выполняется сдвиг влево на один разряд содержимого касрегистра по линии связи 2 и одновременно процедура MQ(CH):=[MQ(CH)]_1. Если [m] = 1=, то конец нормализации.
Эти процедуры выполняются до тех пор пока не выполнятся условия [m] = 1 или [MQ(CH)] = -1. В последнм случае засылается единица в CHUN и процедура деления прекращается.
Таким образом результат деления и в этом случае формируется в регистре MQ.

[AC] [SR] AC












































Рис. 11.10. Сложение и вычитание операндов с плавающей запятой



















Рис. 11.11. Выравнивание порядков































Рис. 11.12. Процедура выравнивания порядков



































Рис. 11.13. Нормализация результата алгебраического сложения

[SR] [MQ] { AC-MQ }
































Рис. 11.14а. Умножение операндов с плавающей запятой
(Инициализация и сложение порядков)





















Рис 11.14б. Нормализация результата умножения

[AC] / [SR] MQ





































Рис. 11.15а Деление операндов с плавающей запятой
(Инициализация и вычитание порядков)






















Рис. 11.15б Нормализация результата деления



11.4. Блок-схемы регистра накапливающего сумматора

11.4.1. Для работы с обратным кодом




+1
-1

Исходные данные N'

Параллельная запись

Сдвиг вправо
Сдвиг влево



Рис .11.16а.

11.4.2. Для работы с дополнительным кодом


Исходные данные +1
C2 -1

C1

Параллельная запись

Сдвиг вправо
Сдвиг влево



Рис. 11.16б.

По сигналу С2 и сигналу параллельной записи в регистр вводятся данные при загрузке АУ.
По сигналу С1 и сигналу параллельной записи в регистр вводится инверсия его содержимого. Если отрицательные числа при алгебраическом сложении представляются в дополнительном коде, то после этой процедуры выполняется прибавление единицы к содержимому регистра.



11.5. Алгоритм извлечения квадратного корня операнда с плавающей запятой

Есть два способа аппаратной реализации процедуры извлечения квадратного корня. Первый способ связан с разработкой микропрограммы извлечения квадратного корня, основанной на использовании основных арифметических операций и являющейся реализацией того или иного итерационного метода извлечения квадратного корня. Другой путь состоит в создании алгоритма извлечения квадратного корня сходного по структуре с алгоритмами основных арифметических действий. Предполагается, что второй вариант алгоритма выполняется быстрее, но он обычно требует достаточно существенного усложнения блока управления арифметического устройства цифрового автомата.
Рассмотрим второй способ организации алгоритма извлечения квадратного корня только положительного операнда в форме с плавающей запятой, который загружается в регистр AC.
Перед началом процедуры проводится проверка знака операнда и его величины на ноль.
Очевидно, что процедура извлечения квадратного корня в этом случае распадается на две операции: извлечение квадратного корня из характеристики числа и из мантиссы. Первая операция достаточно тривиальна. Если характеристика числа четная, то ее делят на два, т.е. выполняется процедура [AC(CH)]. Если же характеристика нечетная, то выполняется один шаг денорализации: [AC(FR)] и [AC(CH)] _ 1\ Потом характеристика делится на два. В обоих случаях окончательный результат засылается в MQ(CH), т.к. в регистре MQ формируется результат извлечения квадратного корня.
Весь процесс извлечения кадратного корня из мантиссы операнда разбивается на ряд однотипных шагов, выполняемых последовательно, и на каждом шаге находится очередная цифра результата, начиная со старшей. Этот алгоритм очень похож на обычный алгоритм деления, за тем исключением, что на каждом очередном шаге реализации алгоритма все время меняется "делитель", который формируется в регистре SR из текущего значения результата извлечения квадратного корня. Окончательный результат получается за m -1 элементарных шагов алгоритма или же после того шага, на котором очередной остаток получился равнм нулю.
Значение очередной цифры результата определяется вычитанием из остатка (на первом шаге остаток - это подкоренное число!) специально сформированного "делителя". Как уже отмечалось, результат извлечения корня из мантиссы операнда формируется в субрегистре MQ(FR), а очередное значение "делителя" форимируется в субрегистре SR(FR).
На первом шаге алгоритма (i = 1)"делитель" (d) равен 12-1-i, т.е. 0.01.
На втором шаге d = ci-12-(i-1) + 12-(1 + i) = {c12-1 } + 12-3.
На третьем шаге d = c12-1 + ci-12-(i-1) + 12-(1 + i) = {c12-1 + c22-2} + 12-4
и т.д.
Фигурными скобками выделен очередной результат извлечения квадратного корня, полученный на текущем шаге алгоритма.
Здесь ci-1 -значение цифры очередного разряда результата, полученного на i-том шаге алгоритма. Само же значение цифры определяется на (i-1)-том шаге. Если результат вычитания из остатка положителен, то для следующего шага алгоритма ci-1 = 1, если же результат отрицателен, то ci-1 = 0.
В общем виде значение "делителя" на i-том шаге деления можно представить следующим образом:

13EMBED Equation.31415
Как уже отмечалось, фигурными скобками выделено формируемое значение результата извлечения квадратного корня.
Рассмотрим детально алгоритм извлечения квадратного корня из некоторого числа A = rAmA представленного в форме с плавающей запятой. Здесь rA - характеристика числа, mA - мантисса.
В этом алгоритме последовательно выполняются следующие процедуры.
1. 0 TQ, F FC| mA AC(FR), rA AC(CH). Если А < 0 или А = 0, то конец процедуры извлечения корня квадратного: переход к п.14. В первом случае фиксируется ошибка: 1 TQ\
2. 0 MQ, 0 SR, m SC, 0 AC(QFR).
3. Если [AC(CH)] нечетно, то [AC(FR)], AC(CH) := [AC(CH)] _ 1\
4. [AC(CH)], [AC(CH)] MQ(CH).
5. 1 SR([SC] _ 1)\
6. AC(QFR,FR) := [AC(QFR,FR)] _ [SR(S,FR)], если [AC(QFR,FR)] = 0, то переход к п.13, иначе переход к п.7.
7. Если QFR = 0= то 1 MQ([SC]) и переход на п.8, иначе переход на п.9.
8. Если AC(FR) = 0, то переход к п. 13 , иначе переход к п. 10.
9. 0 MQ([SC]), AC(FR) := [AC(QFR,FR)] + [SR(FR)].
10. SC := [SC] _ 1, [AC(FR)].
11. Если [SC] = 0, то переход к п. 13, иначе переход к п.12.
12. [MQ(FR)] SR(FR) и переход к п. 5.
13. Если [AC(m)] = 0= то выполняется обычная процедура нормализации. В любом случае после п.13 происходит переход к п. 14.
14. Конец процедуры извлечения квадратного корня.
Совокупность процедур от пункта 5 до пункта 12 включительно составляет элементарный шаг алгоритма.
Граф-схема алгоритма извлечения квадратного корня приведена на
рис. 11.17.
Блок управления АУ, предназначенного не только для выполнения основных арифметических действий с операндами в форме с плавающей запятой, но и выполняющего процедуру извлечения квадратного корня, должен обеспечить передачу содержимого из MQ(FR) и SR(FR), ввод 1 в разряд регистра SR с номером равным значению [SC] - 1 и ввод 1 или 0 в разряд регистра MQ с номером равным [SC]. В АУ предусматривается дополнительный триггер TQ для фиксации ошибки при выполнении алгоритма извлечения квадратного корня.
В данном алгоритме выполняется процедура восстановления остатка. В принципе можно разработать алгоритм извлечения квадратного корня и без процедуры восстановления остатка.






















































Рис. 11.17.

Приложение

Определения основных понятий и терминов

Информация - это сведения обопределенных свойствах или параметрах тех или иных явлений или объектов и о зависимостях между этими свойствами.

Сообщение - это информация, воплощенная и зафиксированная в некоторой материальной форме.

Сигнал - это физическое средство передачи сообщения. Или иначе: сигнал - это процесс изменения во времени некоторого физического параметра s(t) какого-либо объекта, служащий для отображения, регистрации и передачи сообщения.

Типы сигналов: аналоговый, дискретный, квантованный, оцифрованный (кодированный), модулированный, импульсный и т.д.

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

Система счисления - это совокупность приемов и правил для записи чисел цифровыми знаками.

Непозиционная система счисления - это система, для которой значение символа, т.е. цифры, не зависит от его положения в числе.

Позиционная система счисления - это система, в которой значение каждой цифры зависит не только от ее числового эквивалента, но и от ее места (позиции) в числе, т.е. один и тот же символ (цифра) может принимать различные значения.

Основание или базис q позиционной системы счисления - это количество знаков или символов, используемых для изображения числа в данной системе. В частности, различают десятичную (q = 10), двоичную (q = 2), восьмеричную (q = 8) и шестнадцатеричную (q = 16) позиционные системы счисления.

Код числа - это запись числа в некоторой системе счисления. Например, двоичный код, десятичный, восьмеричный и т.д.

Длина разрядной сетки - число разрядов (позиций), выделяемых в компьютере для представления числа в позиционной системе счисления (в основном в двоичной системе).

Вес разряда числа в позиционной системе счисления - это величина Pi = qi, где i- номер разряда разрядной сетки, отсчитываемый справа налево.

Длина числа (слова) - это количество позиций (или разрядов) в записи числа.

Бит - один разряд (одна позиция) в двоичной системе счисления.

Байт - восемь битов.

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

Машинное (автоматное) изображение числа - это представление числа в разрядной сетке компьютера.

Форма представления двоичных чисел в компьютере. Различают две основные формы представления: с фиксированной запятой (точкой) и с плавающей запятой.

Фиксированная запятая (точка) - машинная форма представления целых чисел или правильной дроби. Разрядная сетка, выделенная для представления числа в этой форме, разбивается на две части: старший разряд выделяется под знак числа, а в остальной части (в поле числа) представляется значение числа. Для целых чисел запятая фиксируется правее младшего разряда, а для правильной дроби - левее старшего разряда поля числа.

Формы представления отрицательных чисел с фиксированной запятой:
прямой код - значение модуля числа представляется в обычном двоичном коде;
обратный код - все разряды значения числа, представленного в прямом коде, инвертируются;
дополнительный код - к значени. числа, представленного в обратном коде, прибавляется единица.
Во всех случаях в знаковый разряд отрицательного числа записывается единица.

Плавающая запятая (точка) - машинная форма представления вещественных чисел. Разрядная сетка, выделенная для представления числа в этой форме, разбивается на три части: старший разряд обычно выделяется под знак числа, следующие np разрядов под порядок (или храктеристику) числа (p), остальная часть разрядной сетки nm предназначена для представления модуля мантиссы числа (m).
Нормализованное число - число в форме с плаваюей запятой, модуль мантисы m которого удовлетворяет следующему неравенству:
0.12 m<1.

Абсолютная погрешность представления - это разность между истинным значением входной величины А и ее значением, полученным из машинного изображения АМ, т.е. [A] = A - АМ

Относительная погрешность представления равна: [A] = [A]/АМ.

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

Алгебра логики - это алгебра высказываний и она является логической основой компьютеров.

Высказывание - это всякое утверждение, которое может быть истинным или ложным. Истинному высказывани. приписывается символ 1, а ложному - 0. В алгебре логики цифры 0 и 1 явля.тся символами состояния или высказываниями, а не числами.

Простое высказывание это логическая переменная, а сложное высказывание это логическая функция (ЛФ).

Логические связки - объединяют простые высказывания, т.е. логические переменные, в сложные высказывания, т.е. в логические функции. Например, знаками логических связок являются следующие символы: + или , & или , , и т.д.

Логическая переменная - логическая (булева) переменная, или простое высказывание, эта такая величина, которая может принимать только два значения: 0 или 1. Например, когда логическая переменная А истинна, то
А = 1, если же ложна, то А = 0.

Инверсия или отрицание некоторой логической переменной, например переменной А, это фактически также логическая переменная, принимающая значение обратное значению переменной А, и обозначаемая как А. Если
А =1, то А = 0, если же А =0, то А = 1.

Литерал - логическая переменная или ее инверсия (отрицание). Например, переменная А и ее инверсия А - это одна переменная с разными значениями, но два литерала.

Набор - совокупность значений аргументов логической функции. Любая логическая функция n аргументов может иметь 2n наборов. Каждому набору значений аргументов приписывается номер, равный двоичному числу, соответствующему значению данного набора.

Логическая функция (ЛФ). - Функция f(x1, x2, ..., xn) называется логической (переключательной), или булевой, если она, так же как и ее аргументы xi, может принимать только два значения: 0 или 1.
Число различных ЛФ n аргументов конечно и равно 213EMBED Equation.31415или 2m, где m = 2n - число наборов n аргументов. Это объясняется тем, что на каждом наборе у ЛФ может быть два значения: 1 или 0. Поэтому каждой ЛФ можно поставить в соответствие m-разрядное двоичное число, а количество различных двоичных m-разрядных чисел равно 2m, следовательно, количество различных ЛФ равно 2m.
Каждой логической функции данного набора аргументов, принято приписывать номер: 0, 1, 2,...

Неполность. определенная ЛФ n переменных, это функция, заданная на числе наборов меньшем 2n.

Временная булева функция (ВБФ) - это логическая функция
y = (x1, x2, ..., xn, t), принимающая значение {0,1} при 0 t s-1, где s -количество интервалов автоматного времени. Число различных ВБФ равно 13EMBED Equation.31415.

Элементарные функции одной и двух переменных: NOT, AND, OR, XOR,
AND-NOT, OR-NOT, IF...THEN и т.д.

Логическое отрицание, или функция НЕ (NOT): f3(x) = x = x. В данном случае функция является инверсией или отрицанием аргумента.

Дизъюнкция - логическое сложение, или функция ИЛИ (OR) - это функция, которая истинна тогда, когда истинна хотя бы одна из ее переменных:
f7(x1, x2) = x1 + x2 = x1 x2 = x1 ! x2.

Конъюнкция - логическое умножение или функция И (AND) - это функция, которая истинна тогда, когда все ее переменные одновременно истинны:
f1(x1, x2) = x1 x2 = x1 x2 = x1 & x2\

Функция (штрих) Шеффера или функция И-НЕ - это функция, которая ложна тогда, когда все переменные одновременно истины: f14(x1, x2) = x1/x2.

Функция (стрелка) Пирса (Вебба) или функция ИЛИ-НЕ - это функция, которая истинна только тогда, когда все переменные ложны: f8(x1, x2) = x1 x2 = x1 O x2.

Импликация или функция ЕСЛИ-ТО (IF-THEN) - это функция, которая ложна тогда и только тогда, когда x1 истинно и x2 ложно. Аргумент x1 называется посылкой, а x2 - следствием: f13(x1, x2) = x1 x2.

Исключающее ИЛИ (XOR) - это функция неравнозначности, которая фактически реализует процедуру суммирования по модул. 2:f6(x1, x2) = x1 x2 = x1 x2.

Суперпозиция - подстановка в логическую функцию вместо ее аргументов других логических функций.

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

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

Терм - группа логических переменных в прямой или инверсной форме, т.е. группа литерал, некоторой логической функции, объединенных одним и тем же знаком логической связки: логического сложения или же логического умножения. В терме каждая переменная или ее отрицание встречается только один раз, т.е. в терм может входить или переменная данной функции, или ее отрицание.

Ранг терма - количество переменных и их инверсий, т.е. количество литерал, входящих в данный терм. Терм, в который входят все переменные, или их отрцания, данной ЛФ имеет максимальный ранг.

Макстерм (H), т.е. дизъюнктивный терм, - это логическая функция, связывающая все переменные в прямой или инверсной форме, т.е. литералы, знаком дизъюнкции.

Минтерм (F), т.е. конъюнктивный терм, - это логическая функция, связывающая переменные в прямой или инверсной форме, т.е. литералы, знаком конъюнкци.

Конституента единицы (К1) тождественна минтерму.

Конституента нуля (К0) тождественна макстерму.

Элементарное произведение - конъюнкция нескольких переменных или их отрицаний, т.е фактически минтерм.

Элементарная сумма - дизъюнкция переменных, часть которых может иметь отрицания, т.е. фактически макстерм.

Базис - функционально полная система элементарных функций, с помощь. которой любая логическая функция может быть представлена суперпозицией исходных элементарных функций. Существует 5 типов базисов.

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

Числовой способпредставления логической функции: в случае СНДФ под знаком суммы ( или ) перечисляются, заключенные в скобки, номера наборов, на которых функция равна единице. В случае СНКФ - под знаком произведения ( или ) перечисляются, заключенные в скобки, номера наборов, на которых функция равна нулю. Например, f1 = (1, 3, 5, 6)=
f2 = (0, 4, 7)

Геометрический (графический) способпредставления логической функции: например, функция двух переменных представляется в виде квадрата, вершины которого соответству.n комбинациям переменных; функция трех переменных представляется в виде трехмерного куба; а четырех переменных - в виде четырехмерного куба и т.д.

Карты Карно (Вейча) - один из способов графического представления логической функции. Используются в процедурах минимизации ЛФ.

Нормальная форма аналитического представления логической функции:
НДФ - Fi, где Fi - минтермы любого ранга, включая единичный, - в данном случае знак логического сложения.
НКФ - Hi, где Hi - макстермы любого ранга, - в данном случае знак логического умножения.

Совершенная (стандартная или каноническая) форма аналитического представления ЛФ:
СНДФ - Fi, где Fi - минтермы только максимального ранга.
СНКФ - Hi, где Hi - макстермы только максимального ранга.

Минимальные нормальные формы представления ЛФ:
МНДФ - НДФ с минимальным числом минтермов, имеющих минимальные ранги, ни один из которых исключить нельзя, или НДФ содержащая наименьшее количество букв (литерал).
МНКФ - НКФ с минимальным числом макстермов, имеющих минимальные ранги, ни один из которых исключить нельзя, или НКФ содержащая наименьшее количество букв (литерал).

Минимизация логической функции - получение ее МНДФ или МНКФ для того, чтобы в дальнейшем получить минимальное количество логических элементов в электронной схеме, предназначенной для реализации данной логической функции.

Соседние термы - термы в НДФ или НКФ, которые отличаются только одной переменной: в одном терме переменная без отрицаниия, а в другом - с отрицанием.

Вхождение одной ЛФ в другую: если некоторая логическая функция равна нулюна тех же наборах, на которых равняется нулю другая функция f, то считается, что функция входит в функцию f.

Импликанта - некоторая логическая функция, входящая в данную ЛФ и обращаемая в ноль при наборе переменных, на котором сама ЛФ также равна нулю.

Импликанта дизъюнктивная - любой минтерм, или группа минтермов исходной НДФ.

Импликанта конъюнктивная - любой макстерм, или группа макстермов исходной НКФ.

Простые или элементарные импликанты - самые короткие произведения или короткие суммы, входящие в данную ЛФ, или импликанта типа элементарного произведения (минтерма) или элементарной суммы (макстерма), никакая собственная часть которого уже не является импликантой данной ЛФ.

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

Сокращенная форма аналитического представления ЛФ - дизъюнкция всех ее простых импликант.

Тупиковая форма аналитического представления ЛФ - дизъюнкция простых импликант, ни одну из которых исключить нельзя.

Накрытие - если на каком-либо наборе аргументов функция f принимает значение а1, а функция на этом же наборе принимает значение а2, то тогда говорят, что функция f на данном наборе накрывает значение а2 функции своим значением а1.

Поглощение - A(A + B) = A; A + AB = A.

Склеивание - AB +AB = B ( A +A) = B; (A + B)(A +B) = A.

Неполное склеивание - xy + xy = x + xy + xy.

Формула развертывания: x = (x +y)(x +y); (x + y) = (x + y + z)(x + y +z).

Теорема (законы) де Моргана - A + B + C = ABC; ABC = A +B +C.

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

Логические схемы - это электронные схемы, реализующие определенные логические функции.

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

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

Логический элемент (вентиль) - комбинационная логическая схема, реализующая одну из элементарных логических функций: НЕ, И, ИЛИ, И-НЕ и т.д.

Логический оператор - элементарная логическая функция, реализуемая соответствующим комбинационным логическим элементом, т.е. вентилем.

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

Отрицательная логика работы логической схемы - это когда высокому уровню сигнала ставится в соответствие логический ноль, а низкому уровню - логическая единица.

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

Граф-схема алгоритма - алгоритм описанный специальными графическими символами.

Цифровой автомат - это дискретный преобразователь информации, способный принимать различные состояния aj(t), переходить под воздействием входных сигналов xk(t), или команд программы решения задачи, из одного состояния в другое и выдавать выходные сигналы yz(t).
Цифровые автоматы могут быть с "жесткой", или схемной, логикой и с логикой, хранимой в памяти. Различают два класса автоматов: асинхронные и синхронные.

Синхронный автомат характеризуется тем, что функционирует под управлением тактовых ( или синхронизирующих ) сигналов (ТС), имеющих постоянну. длительность и постоянну. частоту, если квантование времени выбрано равномерным. Такт времени ti совмещается с фронтом i-того сигнала ТС. Входные сигналы xk(t) могут воздействовать на автомат лишь при наличии сигнала ТС и не изменяются в течение его длительности. Когда рассматривается абстрактный автомат, то считается, что изменение внутренних состояний автомата aj(t) происходит в интервалы времении между смежными ТС, а выходные сигналы yz(t) формируются по фронту очередного ТС.

Асинхронный автомат - у этого автомата длительность интервала времени, в течение которого остается неизменным состояние входных сигналов xk(t), является величиной переменной и определяется временем, которое необходимо автомату для установки соответствующих выходных сигналов yz(t) и завершения перехода в новое состояние aj(t). Следовательно, асинхронный автомат должен формировать сигнал о завершении очередного такта, по которому текущие входные сигналы могут быть сняты, после чего может начаться следующий такт, т.е. возможно поступление новых входных сигналов.

Функция переходов - определяет состояние автомата a(t + 1) в момент дискретного времени t + 1 в зависимости от состояния автомата a(t) и значения входного сигнала x(t) в момент времени t| a(t + 1) = f[a(t), x(t)].

Функция выходов - определяет зависимость выходного сигнала автомата y(t) от состояния автомата a(t) и входного сигнала x(t) в момент времени t:
y(t) = 1 [a(t), x(t)] или y(t) = 2 [a(t)].

Граф автомата - графическая схема, состоящая из узлов, соединенных ветвями. Узлы отождествляют внутренние состояния автомата. Каждая ветвь отмечается входным сигналом, вызывающим в автомате соответствующий данной ветви переход, и выходным сигналом, который возникает при этом переходе.

Автомат Мили - синхронный автомат, у которого выходные сигналы зависят как от состояния автомата, так и от значения входного сигнала:
y(t) = 1 [a(t), x(t)]; a(t + 1) = f[a(t), x(t)].

Автомат Мура - синхронный автомат, выходные сигналы которого в момент времени t однозначно определяются состоянием автомата в этот же момент времени и в явном виде не зависят от значений входных сигналов:
y(t) = 2 [a(t)]; a(t + 1) = f[a(t), x(t)]\

Совмещенный автомат (С-автомат) - отличается от автоматов Мили и Мура тем, что он одновременно реализует две функции выходов 1 и 2, каждая из которых характерна для этих автоматов в отдельности.

Триггер - элементарный автомат Мура имеющий два внутренних устойчивых состояния, соответствующих логическим 1 и 0, т.е. логический элемент запоминания.

ЛИТЕРАТУРА

1. А.Я.Савельев. Арифметические и логические основы цифровых автоматов. М.: Высшая школа. 1980.
2. А.Я.Савельев. Прикладная теория цифровых автоматов. М.:Высшая школа. 1987.
3.Е.Н.Вавилов, Г.П.Портной. Синтез схем электронных цифровых машин. М.: Советское радио. 1963.
4. Г.Н.Соловьев. Арифметические устройства ЭВМ. М.: Энергия. 1978.
5. А.Г.Филиппов, О.С.Белкин. Проектирование логических узлов ЭВМ. М.: Советское радио.1974.
6. Я.Будинский. Логические цепи в цифровой технике. М.: Связь. 1977.
7. Ч.Гилмор. Введение в микропроцессорную технику. М.: Мир. 1984.
8. Я.Чу. Организация ЭВМ и микропрограммирование. М.: Мир. 1975.
9. А.М.Шауман. Основы машинной арифметики. Л.: Из-во Ленинградского университета. 1979.
10. В.А.Ильин. Телеуправление и телеизмерение. М.: Энергоиздат. 1982.
11. Б.М.Каган. Электронные вычислительные машины и системы. М.: Энергоатомиздат. 1991.
12. М.А.Карцев. Арифметика цифровых машин. М.: Наука. 1969.
13. С.В.Яблонский. Введение в дискретную математику. М.: Наука. 1986.
14. Ф.Е.Темников, В.А.Афонин, В.И.Дмитриев. Теоретические основы информационной техники. М.: Энергия. 1971.
15. В.Г.Лазарев, Е.И.Пийль. Синтез управляющих автоматов. М.: Энергия. 1978.
16. Д.Кнут. Искусство программирования для ЭВМ т.2. М.: Мир. 1977.
17. Под редакцией А.Уильямса. Применение интегральных микросхем. М.: Мир. 1987.
18. В.В.Гусев, Л.Г.Зеличенко и др. Основы импульсной и цифровой техники. М.: Советское радио. 1975.
19. Под редакцией Г.Хелмса. Компьютеры. М.: Мир. 1986.


14  $ ( 0 4 К
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· Є
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Root EntryEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation Native

Приложенные файлы

  • doc 18395096
    Размер файла: 1 MB Загрузок: 0

Добавить комментарий