2. 3. 2. Безразличные значения
В некоторых случаях определенные наборы входных значений цифровых схем никогда не используются. Для примера рассмотрим двоично-десятичное представление числа (Binary-Coded Decimal, BCD). Десятичные цифры от 0 до 9 можно представить с помощью четырех двоичных переменных, b3, b2, b1 и b0 (рис. 2.6). Эти четыре переменные могут составить 16 разных наборов значений, из которых для представления десятичных цифр используются только 10. Оставшиеся значения не используются. Следовательно, логическая схема, обрабатывающая данные в формате BCD, никогда не получит в качестве входных данных ни один из шести оставшихся наборов значений. Такое представление десятичных цифр называется двоично-кодированным представлением десятичных цифр.
На рис. 2. 6 приведена таблица истинности для конкретной функции, принимающей в качестве аргумента двоично-кодированную десятичную цифру. Значения этой функции для неиспользуемых входных наборов нас, естественно, не интересуют. Такие значения называются безразличными (don't care) и в таблице истинности они обозначаются буквой «d». При реализации функции им можно присвоить либо нуль, либо единицу, в зависимости от того, какое из этих двух значений позволит минимизировать результирующую схему. Единица присваивается в том случае, если такая замена приводит к расширению группы ячеек с единичными значениями функции. Поскольку большим группам соответствуют меньшие выражения, результат лучше минимизируется.
Функция, приведенная на рис. 2. 6, реализует следующий алгоритм обработки входной десятичной цифры: выходное значение равно 1, если входное значение является любым ненулевым числом, кратным 3. Три единицы на карте Карно расположены таким образом, что для их охвата требуются три группы квадратов, а безразличные значения определяются так, чтобы предельно увеличить размеры этих групп
Рис. 2.6. Карта Карно для четырех логических переменных
2. 4. Синтез вентилей и-не и или-не
А сейчас нам предстоит рассмотреть еще два базовых логических вентиля, называемых И-НЕ и ИЛИ-НЕ. Эти вентили очень широко применяются в логических схемах, что объясняется простотой их технической реализации. Таблицы истинности вентилей И-НЕ и ИЛИ-НЕ приведены на рис. 2. 7. Они представляют собой функции И и ИЛИ, к результату которых применена функция НЕ. Если мы обозначим операторы И-НЕ и ИЛИ-НЕ символами «↑» и «↓», то, используя закон де Моргана (см. табл. 2. 4), сможем представить их следующим образом:
Вентили И-НЕ и ИЛИ-НЕ могут использоваться и с более чем двумя входными переменными, и действуют они в соответствии с очевидным обобщением закона де Моргана:
и
Разработка логических схем с вентилями И-НЕ и ИЛИ-НЕ не так проста, как разработка схем с вентилями И, ИЛИ и НЕ. Одной из главных трудностей в решении этой задачи является то, что по отношению к операциям И-НЕ и ИЛИ-НЕ ассоциативный закон не действует. Позже мы с вами еще вернемся к этой проблеме. Но сейчас давайте рассмотрим простую и универсальную процедуру синтеза произвольной логической функции с использованием только вентилей И-НЕ. Эту процедуру легче всего продемонстрировать на примере. Произведем алгебраическое преобразование логического выражения, соответствующего схеме с четырьмя входными переменными, которая включает три вентиля И-НЕ, имеющих по две входные переменные:
Для выполнения нужных преобразований мы воспользовались законами де Моргана и возведения в степень. На рис. 2. 8 показаны логические схемы, соответствующие этим преобразованиям. Поскольку любую логическую функцию можно синтезировать с помощью суммы произведений (И-ИЛИ) и поскольку приведенные преобразования обратимы, мы можем сделать вывод, что любую логическую функцию можно синтезировать в форме И-НЕ-И-НЕ. Причем это предположение верно для функций с любым количеством переменных. Очевидно, что общее количество входных переменных вентилей И-НЕ при этом должно быть таким же, как общее количество входных переменных вентилей И и ИЛИ.
Рис. 2.7. Вентили: И-НЕ (а); ИЛИ-НЕ (б)
Рис. 2.8. Эквивалентные схемы на основе вентилей И-НЕ и вентилей И и ИЛИ
Теперь давайте вернемся к вопросу о затруднении, возникающем вследствие того, что оператор И-НЕ не подчиняется ассоциативному закону. При разработке логической схемы на основе вентилей И-НЕ с использованием процедуры, иллюстрируемой рис. 2.8, может потребоваться вентиль И-НЕ с большим количеством входов, чем можно реализовать физически. Для схемы на основе вентилей И и ИЛИ это не проблема, поскольку благодаря ассоциативности данных операций один вентиль с большим количеством входов можно заменить несколькими вентилями с меньшим количеством входов, как на рис. 2.9, а. В случае вентиля И-НЕ решение не так просто. Например, функцию И-НЕ с тремя входными переменными нельзя реализовать в виде соединения двух вентилей И-НЕ, имеющих по два входа. Как показано на рис. 2.9, 6, для ее реализации потребуется три вентиля И-НЕ.
Рис. 2.9. Реализация логических функций с тремя входными переменными на основе вентилей с двумя входами: И и ИЛИ (а); И-НЕ (б)
Аналогичным образом строятся схемы на основе вентилей ИЛИ-НЕ: любая логическая функция может быть представлена в виде суммы произведений и реализована в виде эквивалентной схемы на основе вентилей ИЛИ-НЕ.
Итак, вы познакомились с некоторыми базовыми концепциями проектирования логических схем.
Еще раз хотим обратить внимание на тот факт, что для каждой логической функции существует множество вариантов реализации. Для практического воплощения функции важно выбрать вариант с наименьшей стоимостью. Кроме того, часто бывает необходимым минимизировать задержку распространения сигнала в логической схеме. С идеей минимизации схем мы познакомили вас в предыдущих разделах, чтобы объяснить суть процесса логического синтеза и показать, за счет чего может быть достигнуто снижение стоимости реальных логических схем. Для этой цели можно применить карты Карно, которые подскажут, какие алгебраические операции приведут к оптимальному решению. Оптимизацию схем не обязательно выполнять вручную. К услугам конструкторов имеется сложное и достаточно мощное программное обеспечение для автоматизированного проектирования (Computer-Aided Design, CAD). Пользуясь такой программой, конструктор задает исходную функцию, и программа сама генерирует наиболее эффективную и простую схему для ее реализации.
Вопросы для самопроверки.
Как осуществляется объединение логических функций?
Что показывает логическая таблица истинности функции n переменных?
С какой целью проводят минимизацию логических выражений?
Какими способами проводят минимизацию логических выражений?