Карта Карно
Карта Карно — это графический способ минимизации логических функций (булевых выражений) путём наглядного представления таблиц истинности. Предложена в 1952 году американским инженером-электриком Морисом Карно (Maurice Karnaugh). Карта Карно позволяет упрощать сложные логические схемы, находя минимальные дизъюнктивные или конъюнктивные нормальные формы (ДНФ, КНФ) без громоздких алгебраических преобразований и применения законов булевой алгебры. Широко применяется в цифровой электронике, схемотехнике, проектировании интегральных микросхем и программировании логических контроллеров.
История
Метод восходит к работам американского математика и логика Эдварда Вейча (Edward W. Veitch), который в 1952 году предложил табличный способ минимизации, основанный на диаграммах Венна. Вейч использовал прямоугольную таблицу, где каждая клетка соответствовала одной комбинации входных переменных. Однако его таблица не обеспечивала простого визуального выявления соседних минтермов, отличающихся одной переменной.
В 1953 году Морис Карно, работавший в Bell Labs, модифицировал метод Вейча, введя циклический код Грея для упорядочивания строк и столбцов. Это позволило соседним клеткам карты (включая края и углы) отличаться ровно одной переменной, что сделало возможным наглядное объединение минтермов в прямоугольные группы (импликанты). Карта Карно стала стандартным инструментом в курсах цифровой логики и схемотехники.
Принцип построения
Карта Карно представляет собой прямоугольную таблицу, количество клеток которой равно \(2^n\), где \(n\) — число входных переменных. Каждая клетка соответствует одной строке таблицы истинности — определённой комбинации значений переменных. Внутри клетки проставляется значение выходной функции (0 или 1, либо «X» для безразличных состояний).
Порядок переменных
Строки и столбцы нумеруются с использованием кода Грея (рефлексивного двоичного кода), при котором соседние коды отличаются только одним битом. Например, для двух переменных (A, B) порядок строк/столбцов: 00, 01, 11, 10. Это обеспечивает, что соседние клетки (по горизонтали, вертикали и, в некоторых вариантах, по краям) соответствуют наборам, различающимся одной переменной.
Примеры размерностей
- 2 переменные: 2×2 клетки (4 комбинации).
- 3 переменные: 2×4 клетки (8 комбинаций). Часто рисуют как прямоугольник 2×4.
- 4 переменные: 4×4 клетки (16 комбинаций). Наиболее распространённый размер.
- 5 переменных: 4×8 клеток (32 комбинации). Для наглядности часто используют две карты 4×4, наложенные друг на друга (одна для пятой переменной = 0, другая для = 1).
- 6 переменных: 4×16 или 8×8 клеток (64 комбинации). При большем числе переменных метод становится громоздким, и предпочтение отдаётся алгоритмическим методам (например, метод Квайна — Мак-Класки).
Правила минимизации
Минимизация с помощью карты Карно основана на визуальном поиске и объединении единиц (или нулей) в прямоугольные группы, размер которых является степенью двойки (1, 2, 4, 8, 16…). Группы могут быть любой конфигурации, но обязательно прямоугольными (включая «скручивание» краёв — края карты считаются соседними). Цель — покрыть все единицы (или нули) минимальным числом максимально больших групп.
Основные правила
- Группировка единиц (для получения минимальной ДНФ) или нулей (для получения минимальной КНФ). Если функция задана в виде таблицы истинности, выбирают, какая форма (ДНФ или КНФ) даёт более простое выражение.
- Размер группы — только степени двойки: 1, 2, 4, 8, 16 и т.д. Группа может быть квадратной или прямоугольной, но не «L-образной» или «T-образной».
- Соседство по краям: клетки, расположенные на противоположных краях карты (например, левый и правый край, верхний и нижний), считаются соседними. Это позволяет объединять их в одну группу.
- Перекрытие групп: одна и та же клетка может входить в несколько групп. Это не запрещено, но может привести к избыточности. Оптимальное покрытие — минимальное количество групп, покрывающих все единицы (или нули).
- Безразличные состояния («X»): могут быть использованы как 0 или 1 по желанию, чтобы увеличить размер группы. Однако их не обязательно покрывать, если это не упрощает выражение.
Алгоритм минимизации
- Построить карту Карно по таблице истинности.
- Отметить все клетки, где функция равна 1 (для ДНФ) или 0 (для КНФ).
- Найти все возможные прямоугольные группы единиц (нулей) размером 2, 4, 8 и т.д., включая группы, «скрученные» по краям.
- Выбрать минимальный набор групп, покрывающий все единицы (нули). Приоритет отдаётся группам большего размера.
- Для каждой группы записать произведение (для ДНФ) или сумму (для КНФ) переменных, которые не меняются внутри группы. Переменная, которая меняет своё значение в пределах группы, исключается из терма.
- Записать итоговое выражение как сумму произведений (ДНФ) или произведение сумм (КНФ).
Пример минимизации
Рассмотрим функцию трёх переменных \(F(A, B, C)\), заданную таблицей истинности:
| A | B | C | F |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 |
| 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 |
Карта Карно (3 переменные, 2×4):
`` BC 00 01 11 10 A=0 0 1 1 1 A=1 0 1 1 0 ``
Группировка единиц:
- Группа 1: клетки (A=0, BC=01), (A=0, BC=11), (A=1, BC=01), (A=1, BC=11) — квадрат 2×2. Внутри группы меняется A (0→1) и B (0→1), но C остаётся = 1. Следовательно, терм: \(C\).
- Группа 2: клетка (A=0, BC=10) — одиночная. Переменные: A=0, B=1, C=0. Терм: \(\overline{A} \cdot B \cdot \overline{C}\).
Итоговая минимальная ДНФ: \(F = C + \overline{A} \cdot B \cdot \overline{C}\).
Применение
Карты Карно используются в основном в учебных целях и для ручной минимизации схем с числом переменных до 4–6. В профессиональной практике (проектирование интегральных схем, ПЛИС) применяются автоматизированные методы (например, алгоритмы минимизации на основе метода Квайна — Мак-Класки, эвристические алгоритмы типа ESPRESSO). Однако понимание карт Карно остаётся важным для освоения основ цифровой логики и синтеза комбинационных схем.
Области применения
- Образование: изучение булевой алгебры, синтез комбинационных схем, курсовые проекты.
- Схемотехника: разработка простых логических устройств (дешифраторов, мультиплексоров, сумматоров) на дискретных элементах или в базисе ПЛИС.
- Программирование: оптимизация логических условий в программном коде (например, в системах управления, встраиваемых системах).
- Диагностика: анализ и упрощение логических выражений в релейно-контактных схемах.
Ограничения
- Размерность: при числе переменных более 4–5 карта становится громоздкой и теряет наглядность. Для 6 переменных требуется 64 клетки, что затрудняет визуальный поиск групп.
- Неэффективность для больших схем: автоматические методы (Квайна — Мак-Класки, ESPRESSO) работают быстрее и точнее при числе переменных более 6.
- Субъективность: выбор групп может быть неоднозначным, особенно при наличии безразличных состояний. Разные инженеры могут получить разные, но эквивалентные минимальные формы.
- Только для комбинационных схем: карты Карно неприменимы для минимизации последовательностных схем (с памятью), где требуется учёт состояний и переходов.
Интересные факты
- Морис Карно (род. 1924) — американский инженер польского происхождения. В 1953 году, работая в Bell Labs, он опубликовал статью «The Map Method for Synthesis of Combinational Logic Circuits», где впервые описал свой метод. Карно также внёс вклад в теорию кодирования и цифровую связь.
- В некоторых источниках метод называют «картой Вейча» или «картой Вейча — Карно». Однако исторически именно Карно ввёл код Грея, что и сделало метод практичным.
- Карты Карно могут быть использованы не только для минимизации, но и для анализа функций, например, для проверки эквивалентности двух логических выражений.
- В 1960-х годах карты Карно были включены в стандартные учебные программы по цифровой электронике во многих университетах мира, включая СССР (где их часто называли «диаграммами Вейча» или «картами Карно»).
Источники
- Karnaugh, M. «The Map Method for Synthesis of Combinational Logic Circuits». Transactions of the American Institute of Electrical Engineers, Part I: Communication and Electronics, vol. 72, no. 5, 1953, pp. 593–599.
- Veitch, E. W. «A Chart Method for Simplifying Truth Functions». Proceedings of the Association for Computing Machinery, 1952, pp. 127–133.
- Харрис, Д., Харрис, С. «Цифровая схемотехника и архитектура компьютера». 2-е изд., Elsevier, 2012 (рус. пер. ДМК Пресс, 2015).
- Угрюмов, Е. П. «Цифровая схемотехника». 3-е изд., БХВ-Петербург, 2010.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →