Минимизация логических функций Логическая функция, задающая принцип построения схемы цифрового устройства, может быть, как было показано выше, представлена в виде таблицы истинности или в виде СДНФ или СКНФ и может быть использована для получения логической схемы устройства. Однако полученная логическая схема, как правило, не будет оптимальна. Поэтому важным этапом синтеза логических схем является минимизация логических функций, для чего разработан ряд методов. Одним из простых методов минимизации является метод непосредственных преобразований, который осуществляется с использованием основных теорем алгебры логики. Например, логическую функцию F в виде СДНФ, полученную в «Логических функциях и способах их записи», можно минимизировать следующим образом: 1. Добавим к данной функции слагаемое х1•x2•x3, которое уже есть в данной функции, используя правило 3 (см. Рис. 4):  2. Применим метод склеивания (теорема II, рис. 3.26) одинаково подчеркнутых элементарных конъюнкций. 3.Применим метод склеивания для двух последних элементарных конъюнкций  Полученная в результате минимизации логическая функция называется тупиковой. Логическая функция может иметь несколько тупиковых форм. Для минимизации логических функций широко используется графический метод с помощью карт «Карно» или карт (диаграмм) Вейча, который удобен при небольшом числе переменных. Карты Карно и карты Вейча являются важным средством проектирования логических схем, представляют собой определенную таблицу истинности обычно для двух, трех и четырех переменных и отличаются друг от друга способом обозначения строк и столбцов таблиц истинности. На рис. 5 представлены карты Вейча для двух, трех и четырех переменных соответственно.   Рис. 5 Расположение групп переменных х, не имеет значения, необходимо лишь, чтобы каждая клетка отличалась от любой соседней лишь на одну переменную. Согласно принятой форме построения карт соседними также считаются клетки первой и последней строк, клетки первого и последнего столбцов. Число клеток карты равно числу возможных комбинаций значений переменных и в каждую клетку записывается значение логической функции, соответствующее данному набору переменных. Этот набор переменных определяется присвоением значения логической 1 переменным, на пересечении строк и столбцов которых расположена клетка. Например, если логическая функция задана таблицей истинности (рис. 6(а)), то карта Карно для нее будет иметь вид, показанный на рис. 6(б). а) б)  Рис. 6 Булево выражение данной функции имеет вид  Но для упрощения функции можно использовать и карты Карно, в которых логические 1, записанные в соседних клетках, обозначают, что соответствующие этим 1 конъюнкции (произведения) отличаются лишь по одной переменной, которые дополняют друг друга и их можно опустить. Так в первой строке карты Карно (см. рис. 6(б)) переменная х1 встречается в комбинации с x2 и , которые дополняют друг друга:
 Таким образом, группируя две соседние клетки в верхней строке (контур на рис. 6(б)), можно исключить одну переменную и получить упрошенное выражение - x1. Аналогично, группируя две соседние клетки в левом столбце (контур на рис. 6(б)) и исключая отличающиеся переменные (x1 и х1), получим упрощенное выражение — х2. Полученные упрощенные выражения объединяют с помощью операции ИЛИ. Таким образом, упрощенное выражение логической функции будет иметь вид  Таким образом, соседние клетки карты Карно можно группировать для исключения переменной. Число группируемых клеток может быть и больше двух, но их число должно быть четным и они должны соприкасаться (являться соседними) друг с другом. Допускается также иметь несколько групп перекрывающихся клеток, как в только что рассмотренном примере. Группироваться могут также клетки первой и последней строк, первого и последнего столбцов, т. е. карту допускается сворачивать в цилиндр, как по вертикальной, так и по горизонтальной оси. Для исключения n переменных общее число группируемых клеток должно быть равно 2n. Так, для исключения одной переменной требуется объединить две соседние клетки, а для исключения трех переменных уже требуется объединить восемь соседних клеток. Таким образом, для того чтобы получить минимизированную логическую функцию, необходимо сгруппировать все соседние клетки карты Карно, содержащие 1, а затем объединить полученные группы с помощью операции ИЛИ. Клетки, содержащие 1, которые не удалось объединить с другими клетками, образуют в минимизированной логической функции самостоятельные члены, каждый из которых содержит все переменные. Рассмотрим несколько примеров карт Вейча и способы построения контуров группировки соседних клеток для получения упрощенной логической функции. Так, карта Вейча для логической функции приведена на рис. 7 | | | | | | | | | | | | 0 | | | | Рис. 7 На этом рисунке показан правильный способ объединения соседних ячеек, т. е. карта Вейча как бы свернута в вертикально расположенный цилиндр. Упрощенное выражение логической функции имеет вид Таким образом, группируя соседние клетки в единый квадрат, удалось исключить две переменные (x1 и х2) и получить простое выражение для логической функции.  Рис. 8 Рассмотрим пример минимизации логической функции  для которой карта Вейча имеет вид рис. 8. Группируемые ячейки обведены двумя контурами. Нижний контур даст возможность исключить одну переменную X3 и после этого в нем остается член x1•x2•x3. В верхнем контуре можно исключить две переменные(х2 и x4) и после этого в нем остается член х1х3. Упрошенное булево выражение логической функции имеет вид  Можно объединять в квадрат также четыре угловые клетки карты Вейча, как это показано на рис. 9, которая построена для логической функции  Рис. 9  Объединенные клетки являются соседними (если поверхность представить в виде тора), и это объединении позволяет исключить две переменные х1 и x2 и получить простое выражение логической функции Рассмотрим минимизацию логической функции, карта Вейча которой представлена на рисунке 10:  Рис. 10 Булево выражение этой функции имеет вид  Четыре угловые клетки можно объединить в одну группу, как это делалось в предыдущем примере. Это объединение позволяет исключить две переменные (х1 и х2) и получить член х3• х4. Две единицы из первой строки можно объединить с двумя единицами из нижней строки, получить группу из четырех ячеек, которая позволяет исключить две переменные (х4 и х3) и получить член  Наконец, единственную оставшуюся единицу (из второй строки и последнего столбца) можно объединить с клеткой, находящейся над ней, и это позволит исключать одну переменную (x4) и получить член  Таким образом, мы получим минимизированную логическую функцию Следует отметить, что для получения минимальной формы логической функции необходимо группировать наибольшее число клеток, причем некоторые клетки могут входить в разные группы. В зависимости от выбора групп объединения клеток можно получить несколько упрощенных выражений логической функции, В ряде случаев не все значения логической функции бывают определены однозначно. Например,в некоторых случаях, известно, что какие-то комбинации входных переменных (сигналов на входе логической схемы) появиться не могут, или, если они появляются, то значение логической функции (сигнала на выходе логической схемы) не существенно. В таких случаях говорят о неопределенных условиях, и на карте Вейча такое неопределенное условие может обозначаться прочерком. Рассмотрим, как карту Вейча с неопределенными условиями можно использовать для минимизации логической функции. Пусть имеется карта Вейча такой функции (рис. 11)  Рис. 11 При минимизации клетки с недоопределенными состояниями могут произвольным образом включаться в группы при объединении клеток, причем им может присваиваться любое значение (0 или 1) таким образом, чтобы сгруппировать наибольшее число клеток Так, в рассматриваемом примере вместо всех прочерков можно проставить логические 1 и получить две большие группы по восемь клеток (два контура на рис. 11), что позволит исключить три переменные и получить следующее упрошенное выражение логической функции: Если клетки с неопределенными условиями не использовать, то можно получить две группы по четыре клетки, что позволит получить следующее упрощенное выражение логической функции:  Очевидно, что данное выражение логической функции сложнее предыдущего. При минимизации логической функции, содержащей более четырех переменных, используются другие способы минимизации. Реализация логических функций Техническая реализация логической функции предполагает построение цифрового устройства, сигналы, на выходе которого определяются сигналами на его входах в соответствии с этой функцией. Для построения цифрового устройства достаточно иметь элементы, реализующие три основные логические операция И, ИЛИ и НЕ. На практике также используют элементы, выполняющие другие простейшие логические операции. Такие элементы называют логическими. Их называют также логическими вентилями. Если соединить логические элементы в соответствии со структурой выражения для логической функции, То получим цифровое устройство, реализующее заданную логическую функцию. Логический элемент может быть реализован в виде интегральной схемы. Часто интегральная схема содержит несколько логических элементов. На рис. 12 приведены примеры условных графических обозначений некоторых логических элементов, булево выражение реализуемой логической функции и их таблицы истинности. Рис. 12 Положим, что имеется логическая функция вида: По этому выражению можно построить устройство, схема которого приведена на рисунке 13 Рис. 13 При проектировании цифрового устройства рекомендуется поступать следующим образом: 1.По условию работы устройства определяется, что именно должно делать устройство, и уточняется алгоритм его работы. 2.Составляется таблица истинности для логической функции, реализуемой устройством. 3.Составляется логическая функция и проводится ее минимизация. 4.Разрабатывается схема проектируемого устройства. Рассмотрим примеры проектирования некоторых цифровых устройств. Пример 1. Необходимо спроектировать устройство включения и выключения звукового сигнала в помещении переключением одного из двух ключей, независимо от состояния другого ключа. Требуется спроектировать логическое устройство, на выходе которого появляется сигнал логической 1 (F= 1), когда сирена включается. Если ключи (x и у) замкнуты, то это соответствует логическим нулям на входах устройства (х = 0, у = 0), а разомкнутые ключи соответствуют логическим единицам на входах устройства (x = 1, у = 1). Учитывая сказанное, составим таблицу истинности (рис. 14). Рис. 14 Поясним таблицу истинности. При обоих замкнутых ключах сирена включена (первая строка таблицы истинности). Выключение любого из двух ключей приводит к отключению сирены (вторая и третья строки таблицы). Выключение оставшегося включенного ключа приводит к включению сирены (последняя строчка). По данной таблице истинности составим логическую функцию  Полученное логическое выражение может быть реализовано следующим образом (Рис. 15). Рис. 15 Пример 2. Требуется спроектировать логическое устройство, осуществляющее передачу данных с одного из четырех входов на один выход в зависимости от комбинации сигналов на адресных входах. Из описания следует; что проектируемое устройство имеет один выход F четыре входах1, х2, х3, х4 и на которые могут подаваться логические сигналы 0 или 1, и один из входов должен подключаться к выходу в зависимости от комбинации сигналов на адресных входах. Так как входов четыре, то, следовательно, и комбинаций на адресных шинах должно быть четыре, а для этого достаточно иметь два адресных входа А1 и А2. С учетом этого описания можно составить следующую таблицу истинности (Рис. 16). Рис. 16 Из данной таблицы следует, что при нулях на обоих адресных входах к выходу устройства подключен первый вход данных х1, при А1=1, А2 = 0 к выходу подключен вход данных х2, при А1= 0, А2 = 1 к выходу подключен вход данных х3,а при А1= 1, А2 = 1 к выходу подключен вход данных х4 По данной таблице составим логическую функцию Используя данное выражение, построим логическую схему проектируемого устройства (Рис. 17). Рис. 17 Далее мы увидим, что спроектированное устройство является мультиплексором на четыре входа и находит широкое применение в цифровой электронике. Особенности построения логических устройств Обычно при построении логических устройств, с целью сокращения номенклатуры используемых логических элементов, используют либо два элемента, выполняющие операции И-НЕ и ИЛИ-НЕ, либо только один из этих элементов. Это обусловлено тем, что эти элементы И-НЕ и ИЛИ-НЕ являются универсальными. Универсальность проявляется в том, что каждый из них позволяет реализовать все три основные булевы операции И, ИЛИ, НЕ (Рис. 18).  Рис. 18 Следовательно, любую логическую функцию можно реализовать, используя только логические элементы И-НЕ или ИЛИ-НЕ. При построении логического устройства число входов логических элементов обычно бывает задано, что тоже вносит определенные трудности. Для построения устройства на заданных логических элементах И-НЕ или ИЛИ-НЕ необходимо логическую функцию преобразовать к соответствующему виду так, чтобы в ней присутствовали только логические операции И-НЕ или ИЛИ-НЕ. Для этого используют теоремы 5 и 10 (см. рис. 4) булевой алгебры, т. е. двойное отрицание, и теорему Де Моргана. В качестве примера рассмотрим построение логического устройства на двухвходовых элементах И-НЕиИЛИ-НЕ по логической функции  Построим вначале устройство на элементах И-НЕ Полученная форма является алгебраической формой элемента И-НЕ с тремя входами: и , т. е. схема данного устройства будет иметь следующий вид (Рис. 19).  Рис. 19 Путем несложных преобразований, которые понятны из окончательной схемы устройства (Рис. 20), получим устройство, построенное на двухвходовых элементах И-НЕ с входными сигналами x,y,z.  Рис. 20 Проводя аналогичные преобразования, функциюFможно реализовать на двухвходовых элементах ИЛИ-НЕ  Учитывая, что и ,получим:  Следовательно, схема проектируемого устройства будет иметь следующий вид (Рис. 21). При реализации цифровых устройств на конкретных логических элементах не все их входы, по ряду причин, могут быть использованы. Обычно с неиспользуемыми входами поступают следующим образом: Рис. 21 - объединяют их с используемыми (с учетом теоремы 3, Рис. 4), если это не ведет к превышению нагрузочной способности логического элемента, к выходу которого подключены объединенные входы; - в зависимости от логики работы устройства подают на неиспользуемые входы либо логический 0, либо логическую 1. Для того чтобы не изменять логику работы элемента с неиспользуемыми входами, на них нужно подать: либо логическую 1, если элемент реализует логическую функцию И, так как согласно теореме I (см. рис.4)X•1=X либо логический 0, если элемент реализует логическую функцию ИЛИ, так как согласно теореме I (см. рис. 3.26) х + 0 = х. Для подачи логического 0 неиспользуемые входы просто соединяют с шиной питания («землей»). Для подачи логической 1 неиспользуемые входы подключают к источникам питания микросхем обычно через резисторы (в единицы кОм), предотвращающие пробои неиспользуемых входов. Реализовать логическую функцию можно не только на основе логических элементов, как это было только что показано, но и другими способами, о чем речь пойдет далее. ЛОГИЧЕСКИЕ ЭЛЕМЕНТЫ |