
144 Глава 3. Цифровой логический уровень
Чтобы увидеть, каким образом осуществляется этот другой тип записи, отметим, что любую булеву функцию можно определить, указав, какие комбинации значений переменных дают значение функции 1. Для функции, приведенной на рис. 3.3, а, существует 4 комбинации переменных, которые дают значение функции 1. Мы будем рисовать черту над переменной, чтобы показать, что ее значение инвертируется. Отсутствие черты означает, что значение переменной не инвертируется. Кроме того, мы будем использовать знак умножения (точку) для обозначения булевой функции И (знак умножения может опускаться) и + для обозначения булевой функции ИЛИ. Например, ABC принимает значение 1, только если А=1, В=0 и С=1. АВ+ВС принимает значение 1, только если (А=1 и В=0) или (В=1 и С=0). В таблице на рис. 3.3, а функция принимает значение 1 в четырех строках: ABC, ABC, ABC и ABC. Функция М принимает значение истины (то есть 1), если одно из этих четырех условий истинно. Следовательно, мы можем написать
М=АВС+АВС+АВС+АВС.
Это компактная запись таблицы истинности. Таким образом, функцию от п переменных можно описать суммой максимум 2" произведений, при этом в каждом произведении будет по п множителей. Как мы скоро увидим, такая формулировка особенно важна, поскольку она ведет прямо к реализации данной функции с использованием стандартных вентилей.
Важно понимать различие между абстрактной булевой функцией и ее реализацией с помощью электронной схемы. Булева функция состоит из неременных, например А, В и С, и операторов И, ИЛИ и НЕ. Булева функция описывается с помощью таблицы истинности или специальной записи, например:
F=ABC+ABC.
Булева функция может реализовываться с помощью электронной схемы (часто различными способами) с использованием сигналов, которые представляют входные и выходные переменные, и вентилей, например, И, ИЛИ и НЕ.
Реализация булевых функций
Как было сказано выше, представление булевой функции в виде суммы максимум 211 произведений делает возможной реализацию этой функции. На рисунке 3.3 можно увидеть, как это осуществляется. На рисунке 3.3, б входные сигналы А, В и С показаны с левой стороны, а функция М, полученная на выходе, показана с правой стороны. Поскольку необходимы дополнительные величины (инверсии) входных переменных, они образуются путем провода сигнала через инверторы 1,2 и 3. Чтобы сделать рисунок понятней, мы нарисовали 6 вертикальных линий, 3 из которых связаны с входными переменными, а 3 другие — с их инверсиями. Эти линии обеспечивают передачу входного сигнала к вентилям. Например, вентили 5, 6 и 7 в качестве входа используют А. В реальной схеме эти вентили, вероятно, будут непосредственно соединены проводом с А без каких-либо промежуточных вертикальных проводов.
Схема содержит четыре вентиля И, по одному для каждого члена в уравнении для М (то есть по одному для каждой строки в таблице истинности с результатом 1). Каждый вентиль И вычисляет одну из указанных строк таблицы истинное-
" I
Вентили и булева алгебра 145
ти. В конце концов все данные произведения суммируются (имеется в виду операция ИЛИ) для получения конечного результата.
Посмотрите на рис. 3.3, б. В этой книге мы будем использовать следующее соглашение: если две линии на рисунке пересекаются, связь подразумевается только в том случае, если на пересечении указана жирная точка. Например, выход вентиля 3 пересекает все 6 вертикальных линий, но связан он только с С. Отметим, что другие авторы могут использовать другие соглашения.
Из рисунка 3.3 должно быть ясно, как реализовать схему для любой булевой функции:
Составить таблицу истинности для данной функции.
Обеспечить инверторы, чтобы порождать инверсии для каждого входного сигнала.
Нарисовать вентиль И для каждой строки таблицы истинности с результатом 1.
Соединить вентили И с соответствующими входными сигналами.
Вывести выходы всех вентилей И в вентиль ИЛИ.
Мы показали, как реализовать любую булеву функцию с использованием вентилей НЕ, И и ИЛИ. Однако гораздо удобнее строить схемы с использованием одного типа вентилей. К счастью, можно легко преобразовать схемы, построенные по предыдущему алгоритму, в форму НЕ-И или НЕ-ИЛИ. Чтобы осуществить такое преобразование, все, что нам нужно, — это способ воплощения НЕ, И и ИЛИ с помощью одного типа вентилей. На рисунке 3.4 показано, как это можно сделать, используя только вентили НЕ-И или только вентили НЕ-ИЛИ. Отметим, что существуют также другие способы подобного преобразования.
Для того чтобы реализовать булеву функцию с использованием только вентилей НЕ-И или только вентилей НЕ-ИЛИ, можно сначала следовать алгоритму, описанному выше, и сконструировать схему с вентилями НЕ и И и ИЛИ. Затем нужно заменить многовходовые вентили эквивалентными схемами с использованием двухвходовых вентилей. Например, A+B+C+D можно поменять на (A+B)+(C+D), используя три двухвходовых вентиля. Затем вентили НЕ и И и ИЛИ заменяются схемами, изображенными на рис. 3.4.
Хотя такая процедура и не приводит к оптимальным схемам с точки зрения минимального числа вентилей, она демонстрирует, что подобное преобразование осуществимо. Вентили НЕ-И и НЕ-ИЛИ считаются полными, потому что можно вычислить любую булеву функцию, используя только вентили НЕ-И или только вентили НЕ-ИЛИ. Ни один другой вентиль не обладает таким свойством, вот почему именно эти два типа вентилей предпочтительны при построении схем.
Эквивалентность схем
Разработчики схем часто стараются сократить число вентилей, чтобы снизить цену, уменьшить занимаемое схемой место, сократить потребление энергии и т. д. Чтобы упростить схему, разработчик должен найти другую схему, которая может вычислять ту же функцию, но при этом требует меньшего количества вентилей (или может работать с более простыми вентилями, например двухвходовыми вместо четырехвходовых). Булева алгебра является ценным инструментом в поиске эквивалентных схем.