- •Основы компьютерной арифметики и логики
- •Предисловие
- •Глава 4, подготовленная доцентом о.П. Шафеевой, посвящена вопросам разработки алгоритмических моделей выполнения арифметических операций и моделирования на пэвм спроектированных алгоритмов.
- •Основы двоичной компьютерной арифметики
- •1.1. Позиционные системы счисления
- •Десятичная позиционная система счисления
- •Двоичная позиционная система счисления
- •1.1.3. Восьмеричная позиционная система счисления
- •1.1.4. Шестнадцатеричная позиционная система счисления
- •Сложение Вычитание
- •Перевод чисел из одной позиционной системы счисления в другую
- •1.2.1. Перевод целых чисел
- •1.2.2. Перевод правильных дробей
- •1.2.3. Перевод неправильных дробей из одной системы счисления в другую
- •1.2.4. Частный случай перевода чисел из одной системы счисления в другую
- •1.2.5. Перевод чисел из одной системы счисления в другую с использованием промежуточной двоично-десятичной системы
- •1.3. Представление чисел с фиксированной запятой (точкой)
- •1.4. Представление чисел с плавающей запятой (точкой)
- •1.5. Коды двоичных чисел
- •1.5.1. Прямой код
- •1.5.2. Обратный код
- •1.5.3. Модифицированный обратный код
- •1.5.4. Дополнительный код
- •2.1.1. Алгебраическое сложение чисел в дополнительном коде
- •2.1.2. Алгебраическое сложение чисел в обратном коде
- •2.1.3. Переполнение разрядной сетки при сложении чисел
- •2.2. Сложение (вычитание) двоичных чисел с плавающей запятой
- •2.2.1. Метод ускоренного сложения двоичных чисел с запоминанием переносов
- •2.3. Умножение двоичных чисел с фиксированной запятой
- •2.4. Машинные технологии выполнения операции умножения двоичных чисел с фиксированной запятой
- •2.5. Умножение двоичных чисел с плавающей запятой
- •2.6. Методы ускоренного выполнения операции умножения двоичных чисел
- •2.6.1. Метод пропуска такта суммирования
- •2.6.2. Метод анализа сомножителей
- •2.6.3. Метод расшифровки и одновременного умножения на два разряда множителя
- •2.6.4. Метод ускоренного умножения Мак-Сорли
- •2.6.5. Метод ускоренного умножения Лемана
- •2.6.6. Метод умножения с расшифровкой пар разрядов множителя и запоминанием переносов
- •2.7. Деление двоичных чисел с фиксированной запятой
- •2.8. Деление двоичных чисел с плавающей запятой
- •3. Основы десятичной компьютерной арифметики
- •3.1. Машинное кодирование десятичных чисел
- •3.2. Выполнение арифметических операций с десятичными числами
- •3.2.1. Сложение десятичных чисел в эвм
- •3.2.2. Умножение десятичных чисел в эвм
- •3.2.3. Ускорение умножения в -кодах
- •Деление десятичных чисел в эвм
- •4.2. Моделирование алгоритма сложения двоичных чисел
- •Различные случаи ненормализованных мантисс
- •4.3. Проектирование алгоритма умножения чисел
- •4.5. Проектирование алгоритма деления чисел
- •4.7. Разработка алгоритма вычисления квадратного корня
- •Определение 1. Пусть и произвольные множества. Соответствием называется тройка множеств
- •Свойства отношений
- •Эквивалентность
- •Толерантность
- •Отношения порядка
- •Самодвойственные функции
- •Монотонные функции
- •Линейные функции
- •Функции, сохраняющие константу
- •5.2.7. Минимизация булевых функций
- •Метод Блейка
- •Метод Квайна-Мак-Класки
- •Минимизация с использованием карт Карно
- •Дана функция четырех переменных (рис. 5.13):
- •Минимизация не полностью определенных булевых функций
- •Минимизация систем булевых функций
- •5.3. Методика синтеза комбинационных схем на логических элементах
- •5.3.1. Логические элементы
- •5.3.2. Общий алгоритм построения комбинационных схем
- •5.3.3. Синтез кс в классическом базисе
- •5.3.4. Синтез кс в базисах «и-не», «или-не»
- •5.3.5. Реализация кс в базисе Жегалкина
- •5.3.6. Синтез составных кс
- •Заключение
- •Библиографический список к главам 1, 2, 3, 4
- •Библиографический список к главе 5
5.2.7. Минимизация булевых функций
Использование булевых выражений в совершенных формах для технической реализации логических функций посредством дискретных логических элементов будет достаточно сложным и нерациональным. При синтезе схем используют так называемые сокращенные формы, при этом предпочтение отдается минимальным формам, которым соответствует самая простая реализация.
Минимизация булевой функции предполагает нахождение такой сокращенной формы (минимальной формы) в заданном базисе, которая является самой простой, т.е. соответствует самому простому выражению.
В основе всех методов минимизации лежат правила склеивания и поглощения:
1) правило полного склеивания: ,
2) правило неполного склеивания: ,
3) правило обобщенного склеивания: ,
4) правило поглощения: .
Метод Блейка
Метод основан на использовании правила обобщенного склеивания и правила поглощения. Для применения метода необходимо выполнить следующие шаги:
1) пополнить ДНФ новыми членами с использованием правила обобщенного склеивания;
2) произвести элементарные поглощения, в результате которых появится новая ДНФ;
3) считая новую ДНФ исходной, перейти к п. 1;
4) повторять пп. 1-3 пока ДНФ будет пополняться новыми членами.
Пример. 5.17. .
1 2 3
Применим правило обобщенного склеивания:
1 2 1-2 3 1-3
.
1 2 3 4 5
Произведем поглощения:
2-5
3-4
.
Метод Блейка позволяет получить минимальную ДНФ из произвольной ДНФ, не обязательно совершенной.
Метод Квайна-Мак-Класки
Минимизация функции основывается на использовании правила поглощения, позволяющего вычислить все множество 1-, 2-, … n- кубов, образующих комплекс K(f). Из этого комплекса выделяются кубы наибольшей размерности, покрывающие все множество вершин функции, определяя покрытие Z(f) функции. Покрытие Z(f) упрощается с целью получения минимального.
Здесь 0-куб есть вершина, т.е. булев вектор, или набор аргументов типа «0100», «0000». 1-куб можно рассматривать как вектор, одна координата которого безразлична. Очевидно, что 1-куб может быть образован 0-кубами, различающимися только на одну единицу. Например, «0100» и «0000» образуют 1-куб «0x00». Аналогично 2-кубы образуются из 1-кубов, отличающихся только на 1 единицу (и имеющих «x» в одинаковых позициях), например «0x01» и «0x11» дадут 2-куб «0xx1» и т.д.
В задачах минимизации булевых функций используется понятие простой импликанты. Некоторый куб zK называется простой импликантой, если он не содержится ни в каком другом кубе комплекса К, т.е. не является гранью никакого другого куба из этого комплекса. Совокупность всех таких кубов образует множество Z={z} простых импликант данного комплекса. Любой куб минимального покрытия Сmin является простой импликантой; следовательно, СminZ. Минимизация функции состоит из последовательных этапов.
1. Нахождение простых импликант. Все 0-кубы сравниваются попарно между собой на предмет образования 1-кубов. Если 0-кубы образуют 1-куб, они помечаются. Для упрощения данной операции удобно множество 0-кубов разбить на группы, содержащие равное число единиц, 1-кубы могут быть образованы объединением 0-кубов только из смежных групп. Множество полученных 1-кубов записывается в столбик и подразделяется на группы, содержащие одинаковое количество единиц. На базе данных множеств строится множество 2-кубов, при этом 1-кубы, участвовавшие в образовании 2-кубов, также помечаются. Этап заканчивается, когда ни один куб более высокого порядка не может быть построен. Все неотмеченные кубы комплекса K(f) являются простыми импликантами и образуют покрытие Z(f) функции f, которое в общем случае не является минимальным.
2. Составление таблицы покрытий. Задача данного этапа – удалить все лишние простые импликанты. Составляется так называемая таблица покрытий. Строки данной таблицы помечаются простыми импликантами, полученными на шаге 1, столбцы - 0-кубы( термы) минимизированной функции. На пересечении i-й строки и j-го столбца ставится метка 1, если i-я импликанта покрывает j-й 0-куб, т.е. соответствующие символы совпадают или покрываются символом “x” со стороны импликанты.
3. Определение существенных импликант. Если в каком-либо столбце таблицы покрытий имеется только одна метка, то соответствующая ей импликанта помечается как существенная. Данная импликанта обязательно будет входить в минимальное покрытие, поскольку без нее невозможно покрыть все 0-кубы функции, в определяемое покрытие вносят все существенные импликанты, а из таблицы вычерчиваются соответствующие строки и столбцы, покрываемые данными импликантами.
4. Вычеркивание лишних столбцов. Если в остаточной таблице, полученной после выделения существенных импликант, имеются два столбца, имеющие метки в одинаковых строках, то один из них вычеркивается, т.к. покрытие вычеркнутого столбца обеспечивается за счет покрытия оставшегося столбца.
5. Вычеркивание лишних простых импликант. Если в остаточной таблице имеются строки, не имеющие ни одной метки, импликанты, соответствующие данным строкам, вычеркиваются.
6. Нахождение минимального покрытия. В остаточной таблице, полученной после выделения существенных импликант, выбирается совокупность простых импликант, позволяющих покрыть все столбцы с минимальными затратами. То есть по возможности предпочтение отдается импликантам, содержащим больше “x” (сокращается сложность применяемых для реализации логических элементов), и импликантам, содержащим больше “1”, чем “0” (при этом в некоторых случаях уменьшается число необходимых инверторов). С учетом проведенных вычислений записывается минимальное покрытие как объединение множества существительных импликант и простых импликант, отобранных на данном этапе.
Записывается минимальная ДНФ как дизъюнкция элементов минимального покрытия.
Пример 5.18.
х1 х2 х3 х4
0 0 0 0 0 Запишем минимизируемую фун-
1 0 0 0 1 кцию в виде комплекса К0, при этом
2 0 0 1 0 для удобства разобьем на группы, со-
3 1 0 0 0 держащие одинаковое число единиц, и
4 0 0 1 1 пронумеруем каждый 0-куб. В про-
5 0 1 1 0 цессе вычислений будем также поме-
6 1 0 0 1 чать кубы.
7 0 1 1 1
8 1 1 1 0
9 1 1 1 1
Определение простых импликант.
Построим комплекс K1, помечая, посредством слияния каких 0-кубов или импликант создана текущая импликанта.
1 0 0 0 х 0 – 1
2 0 0 х 0 0 – 2
3 х 0 0 0 0 – 3
4 0 0 х 1 1 – 4
5 х 0 0 1 1 – 6
7 0 х 1 0 2 – 5
8 1 0 0 х 3 – 6
9 0 х 1 1 4 – 7
10 0 1 1 х 5 – 7
11 х 1 1 0 5 – 8
12 х 1 1 1 7 – 9
13 1 1 1 х 8 – 9
Построим комплекс :
х 0 0 х 1 – 8
0 х 1 х 6 – 10
х 1 1 х 10 – 13
Будем также помечать « » все импликанты, покрываемые кубами более высокого порядка.
Таким образом, имеем набор простых импликант:
0 0 х х
х 0 0 х
0 х 1 х .
х 1 1 х
Составляем таблицу покрытий (табл. 5.3).
Таблица 5.3
0-куб
Импликанта |
0000 |
0001 |
0010 |
1000 |
0011 |
0110 |
1001 |
0111 |
1111 |
0 0 х х |
1 |
1 |
1 |
|
1 |
|
|
|
|
х 0 0 х |
1 |
1 |
|
1 |
|
|
1 |
|
|
0 х 1 х |
|
|
1 |
|
1 |
1 |
|
1 |
|
х 1 1 х |
|
|
|
|
|
1 |
|
1 |
1 |
По таблице покрытий находим две существенные импликанты х00х и х11х (соответствующие единицы подчеркнуты), покрывающие все 0-кубы, кроме 0011. Таким образом, в данном случае можно построить два минимальных покрытия:
х 0 0 х х 0 0 х
х 1 1 х х 1 1 х
0 0 х х 0 х 1 х
Запишем результат в виде ДНФ:
и
.
Обе минимальные формы равноправны, поскольку, как будет показано в дальнейшем, имеют одинаковую цену реализации.
Замечание 1. Очевидно, что нахождение простых импликант связано со значительным объемом вычислений. При увеличении числа переменных количество столбцов резко возрастает. С целью упрощения процедуры нахождения простых импликант Мак-Класки предложил использовать числовые представления булевых функций для выполнения операций по методу Квайна. Данный метод подробно изложен в [3] .
Замечание 2. Для решения задачи минимального покрытия может быть использован алгоритм Петрика (см., например, [9]).
Данный алгоритм применяется к упрощенной таблице покрытий, полученной после вычеркивания существенных импликант, лишних столбцов и строк. Алгоритм формализует выбор минимального покрытия в такой таблице. Строки таблицы, соответствующие импликантам, обозначим прописными латинскими буквами, столбцы, соответствующие 0-кубам, - строчными.
Пример 5.19.
|
a |
b |
c |
d |
А |
1 |
|
1 |
1 |
В |
|
1 |
|
1 |
С |
|
1 |
1 |
|
D |
1 |
|
|
|
По таблице составляется булево выражение, которое представляет собой конъюнкцию дизъюнктивных термов, каждый дизъюнктивный терм включает обозначения импликант, соответствующие единицам в строке.
Для нашего примера имеем:
.
Далее раскрываются скобки и выражение преобразуется в ДНФ:
Из полученного выражения выбираются термы наименьшей длины, каждый из которых определяет возможный вариант покрытия.
.
Определяя цены каждого покрытия, выбираем покрытие, соответствующее наиболее простому выражению.