Карта Карно: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Jack-ov (обсуждение | вклад) Нет описания правки |
Qldor (обсуждение | вклад) |
||
Строка 130: | Строка 130: | ||
Теперь по полученной минимальной ДНФ можно построить логическую схему:<br> |
Теперь по полученной минимальной ДНФ можно построить логическую схему:<br> |
||
[[Изображение:Logic Nikolay.PNG|left|200px]] |
[[Изображение:Logic Nikolay.PNG|left|200px]] |
||
Из за отсутствия в наличии шести-входового элемента ИЛИ, реализующего функцию дизъюнкции, пришлось |
Из за отсутствия в наличии шести-входового элемента ИЛИ, реализующего функцию дизъюнкции, пришлось каскадировать пяти- и двух-входовые элементы(D7, D8).{{-}}<br> |
||
Составим мин. КНФ:<br> |
Составим мин. КНФ:<br> |
||
[[Изображение:Nikolay_map_KNF.png|290px|left]]<br> |
[[Изображение:Nikolay_map_KNF.png|290px|left]]<br> |
Версия от 18:25, 22 февраля 2009
Карта Карно́ — графический способ минимизации переключательных функций обеспечивающий относительную простоту работы с большими выражениями и устранение потенциальных гонок. Представляет собой операции попарного неполного склеивания и элементарного поглощения. Карты Карно рассматриваются как перестроенная соответствующим образом таблица истинности функции. Карты Карно можно рассматривать как определенную плоскую развертку n-мерного булева куба.
Карты Карно были изобретены в 1952 Эдвардом В. Вейч'ем и усовершенствованы в 1953 Морисом Карно, физиком из «Бэлл Лабс», и были призваны помочь упростить цифровые электронные схемы.
В карту Карно булевы переменные передаются из таблицы истинности и упорядочиваются с помощью кода Грея в котором каждое следующее число отличается от предыдущего только одним разрядом.
Описание
Карта Карно может быть составлена для любого кол-ва переменных, однако удобно работать при кол-ве переменных не более пяти. По сути Карта Карно - это таблица истинности составленная в 2-х мерном виде. Благодаря использованию кода Грея в ней верхняя строка является соседней с нежней, а правый столбец соседний с левым, т.о. вся Карта Карно сворачивается в фигуру тор (бублик). На пересечении строки и столбца проставляется соответствующее значение из таблицы истинности. После того как Карта заполнена можно приступать к минимизации.
Если необходимо получить минимальную ДНФ, то в Карте рассматриваем только те клетки которые содержат единицы, если нужна КНФ, то рассматриваем те клетки которые содержат нули. Сама минимизация производится по следующим правилам (на примере ДНФ):
- объединяем смежные клетки содержащие единицы в область, так чтобы одна область содержала ( целое число = 0...) клеток(помним про то что крайние строки и столбцы являются соседними между собой), в области не должно находится клеток содержащих нули;
- область должна располагаться симметрично оси(ей) (оси располагаются через каждые четыре клетки);
- не смежные области расположенные симметрично оси(ей) могут объединятся в одну;
- область должна быть как можно больше, а кол-во областей как можно меньше;
- области могут пересекаться;
- возможно несколько вариантов накрытия.
Далее берём первую область и смотрим какие переменные не меняются в пределах этой области, выписываем конъюнкцию этих переменных, если неменяющаяся переменная нулевая, проставляем над ней инверсию. Берём следующую область, выполняем тоже самое что и для первой, и т.д. для всех областей. Конъюнкции областей объединяем дизъюнкцией.
Например(для Карт на 2-ве переменные):
Для КНФ всё то же самое, только рассматриваем клетки с нулями, не меняющиеся переменные в пределах одной области объединяем в дизъюнкции (инверсии проставляем над единичными переменными), а дизъюнкции областей объединяем в конъюнкцию. На этом минимизация считается законченной.
Так для Карты Карно на рис.1 вырожение в формате ДНФ будет иметь вид:
В формате КНФ:
Так же из ДНФ в КНФ и обратно можно перейти использовав Законы де Моргана.
Пример
У мальчика Коли есть мама, папа, дедушка и бабушка. Коля пойдёт гулять на улицу если ему разрешат хотя бы двое родителей.
Для краткости обозначим родителей Коли через буквы:
мама – х1
папа – х2
дедушка – х3
бабушка – х4
Условимся обозначать согласие родителей единицей, не согласие нулём. Возможность пойти погулять обозначим буквой f, Коля идёт гулять – f = 1, Коля гулять не идёт – f = 0.
Составим таблицу истинности:
Перерисуем таблицу истинности в 2-х мерный вид:
Переставим в ней строки и столбцы в соответствии с кодом Грея. Получили Карту Карно:
Заполним её значениями из таблицы истинности:
Минимизируем в соответствии с правилами:
- 1. Все области содержат 2^n клеток;
- 2. Т.к. Карта Карно на четыре переменные оси располагаются на границах Карты и их не видно (подробнее смотри пример Карты на 5 переменных);
- 3. Т.к. Карта Карно на четыре переменные все области симметрично осей - смежные между собой (подробнее смотри пример Карты на 5 переменных);
- 4. Области S3, S4, S5, S6 максимально большие;
- 5. Все области пересекаются (не обязательное условие);
- 6. В данном случае рациональный вариант только один.
Теперь по полученной минимальной ДНФ можно построить логическую схему:
Из за отсутствия в наличии шести-входового элемента ИЛИ, реализующего функцию дизъюнкции, пришлось каскадировать пяти- и двух-входовые элементы(D7, D8).
Составим мин. КНФ:
Пример Карты Карно на пять переменных
Имеем такую таблицу истинности:
Карта Карно будет выглядеть следующим образом (для лучшего визуального восприятия в Карту нули не записываем):
Неправильно (на примере ДНФ):
- - Область S1 – накрыта правильно;
- - Область S2 – нарушает п.1;
- - Область S3 – нарушает п.2;
- -Области S4 и S6 – не выполняют п.3, это не является ошибкой – выражение получится больше чем если бы S4 и S6 представляли собой одну область;
- - Область S5 - нарушает п.1 по кол-ву клеток и по недопустимости нахождения нулей в области.
Правильно:
Минимизировав эту Карту получаем минимальную ДНФ:
Составим минимальную КНФ:
Другой вариант той же самой Карты Карно:
Ничего не меняется только в строках записано три переменных, а в столбцах две.
Пример большой Карты Карно на восемь переменных
Предположим, по имеющейся таблицы истинности составлена такая Карта Карно:
Найдём минимальную ДНФ:
Минимальная КНФ: