Running 1 days
Running 1 days
Mar 29, 2026
Note: This page does not support English, using the default language version
本文全程从零起步,无跳步、无前置知识门槛。不仅讲解「卡诺图怎么画」,更深入剖析「为什么要这样画」,引入蕴涵项、主要项、必要项等核心理论概念,配套可直接套用的规则和手把手例题。学完不仅能上手解题,还能理解背后的逻辑本质。
卡诺图(Karnaugh Map,简称 K 图),是逻辑函数最小项的一种图形化表示。
逻辑函数化简有两种主流方法:
卡诺图的所有设计,都围绕一个核心目标:让几何上相邻的单元格,在逻辑上也相邻(仅 1 个变量不同)。
A + A' = 1,消去变化的变量,实现函数化简。卡诺图的每一个格子,都对应逻辑函数的一个最小项,这是所有内容的基础。
对于 n 个变量的逻辑函数,最小项是包含全部 n 个变量的乘积项,每个变量以**原变量(如 A)或反变量(如 A’)**的形式出现,且仅出现一次。
A'B'、A'B、AB'、ABA'B'C'、A'B'C … ABC2ⁿ 个最小项。我们给每个最小项一个唯一的编号 mᵢ,i 是十进制数。
编号规则:
举个例子(变量顺序 A-B-C):
| 最小项表达式 | 二进制编码(A B C) | 十进制数 | 编号 |
|---|---|---|---|
| A’B’C’ | 0 0 0 | 0 | m₀ |
| A’B’C | 0 0 1 | 1 | m₁ |
| A’BC’ | 0 1 0 | 2 | m₂ |
| A’BC | 0 1 1 | 3 | m₃ |
| AB’C’ | 1 0 0 | 4 | m₄ |
| AB’C | 1 0 1 | 5 | m₅ |
| ABC’ | 1 1 0 | 6 | m₆ |
| ABC | 1 1 1 | 7 | m₇ |
m₀(A'B'C') + m₁(A'B'C) = A'B'(C'+C) = A'B',消去了变化的变量 C。卡诺图的本质,是把 2ⁿ 个最小项,按照**循环码(格雷码)**的规则排列成的方格矩阵。
要求:相邻两组编码,仅有 1 位二进制位发生变化;序列首尾的两组编码,也满足该相邻特性(循环相邻)。
00 → 01 → 11 → 1000 → 01 → 10 → 11(自然二进制),因为 01 和 10 有 2 位同时变化,破坏相邻性。| A\B | 0(B’) | 1(B) |
|---|---|---|
| 0(A’) | m₀ | m₁ |
| 1(A) | m₂ | m₃ |
⚠️ 注意:列变量 BC 的顺序是
00→01→11→10,m₂ 在最后一列,不是第三列。
| A\BC | 00(B’C’) | 01(B’C) | 11(BC) | 10(BC’) |
|---|---|---|---|---|
| 0(A’) | m₀ | m₁ | m₃ | m₂ |
| 1(A) | m₄ | m₅ | m₇ | m₆ |
⚠️ 注意:行变量 AB 和列变量 CD 均采用循环码。第一行和第四行相邻、第一列和第四列相邻、四个角相邻。
| AB\CD | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 00 | m₀ | m₁ | m₃ | m₂ |
| 01 | m₄ | m₅ | m₇ | m₆ |
| 11 | m₁₂ | m₁₃ | m₁₅ | m₁₄ |
| 10 | m₈ | m₉ | m₁₁ | m₁₀ |
在动手画圈之前,必须理解三个核心术语。它们直接定义了什么是「最简与或式」。为了便于理解,我们全程使用一个经典例子贯穿本节:
示例函数:
F(A,B,C) = AB + A'C + BC对应最小项:AB(m₆,m₇) +A'C(m₁,m₃) +BC(m₃,m₇) = Σm(1, 3, 6, 7)
定义:对于逻辑函数 F,若一个乘积项 P 为 1 时,F 一定为 1,则称 P 是 F 的一个蕴涵项。 卡诺图对应:乘积项 P 对应的所有最小项,都是 F 中取值为 1 的最小项。
AB:当 AB=1 时,F 必为 1(因为 F 包含 AB 项)。A'C:当 A'C=1 时,F 必为 1。ABC:当 ABC=1 时,AB 必为 1,所以 F 必为 1。BC':当 BC'=1 时即 B=1, C=0,若 A=0,则 A'C=0, AB=0, BC=0,此时 F=0。所以 BC' 不能保证 F 为 1。定义:主要项,是不能再扩大、不能再消去变量的蕴涵项。 卡诺图对应:按照合并规则圈出的、无法再进一步扩大的卡诺圈,对应的乘积项就是主要项。
AB:覆盖了 m₆, m₇。如果想扩大(消去变量),变成 A 或 B,就会包含 m₄,m₅ 或 m₂,m₃ 等 F 为 0 的项,所以无法扩大。A'C:覆盖了 m₁, m₃。无法再扩大。BC:覆盖了 m₃, m₇。无法再扩大。ABC:它是蕴涵项,但它可以扩大成 AB(消去 C),扩大后依然是蕴涵项。所以 ABC 不是主要项。定义:如果一个主要项里,至少包含一个「只被这个主要项覆盖,没有被其他任何主要项覆盖的最小项」,这个主要项就是必要项。 卡诺图对应:某个取值为 1 的单元格,只被一个最大卡诺圈包围,这个圈就是必要项。
F = AB + A'C + BC):
AB:覆盖 m₆, m₇。检查 m₆,其他主要项(A'C, BC)都不包含 m₆。m₆ 是 AB 独有的,所以 AB 是必要项。A'C:覆盖 m₁, m₃。检查 m₁,其他主要项都不包含 m₁。m₁ 是 A'C 独有的,所以 A'C 是必要项。BC:覆盖 m₃, m₇。m₃ 已经被 A'C 覆盖,m₇ 已经被 AB 覆盖。它没有独有的最小项,所以不是必要项。定义:本身是主要项,但它覆盖的所有最小项,都已经被其他选中的主要项完全覆盖。
BC:因为必要项 AB 和 A'C 已经覆盖了所有最小项(m₁, m₃, m₆, m₇),BC 覆盖的 m₃, m₇ 已被完全覆盖,所以 BC 是多余项。所有蕴涵项 → 筛选出主要项(最大圈候选) → 拆分出必要项(必须留) + 非必要主要项 → 非必要主要项中,未被选中的就是多余项(必须删)
最简式生成严格步骤:
基于上述理论,以下是实操中的具体合并规则。
2ⁿ 个相邻项,消去 n 个变量;固定为 1 写原变量,固定为 0 写反变量,变化的变量删除。题目:用卡诺图化简逻辑函数 F = A'B + AB' + AB
A'B = m₁,AB'=m₂,AB=m₃| A\B | 0 | 1 |
|---|---|---|
| 0 | 0 | 1 (m₁) |
| 1 | 1 (m₂) | 1 (m₃) |
BAF = A + B
题目:用卡诺图化简逻辑函数 F(A,B,C) = Σm(0,1,2,5,6,7)
3 变量,2×4 卡诺图,行 A,列 BC(循环码 00,01,11,10)。
| A\BC | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 0 | 1 (m₀) | 1 (m₁) | 0 | 1 (m₂) |
| 1 | 0 | 1 (m₅) | 1 (m₇) | 1 (m₆) |
A'B'BC'ACF = A'B' + BC' + AC
题目:用卡诺图化简逻辑函数 F(A,B,C,D) = Σm(0,1,2,3,4,6,7,8,9,10,11,14,15)
4 变量,4×4 卡诺图。
| AB\CD | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 00 | 1 | 1 | 1 | 1 |
| 01 | 1 | 0 | 1 | 1 |
| 11 | 0 | 0 | 1 | 1 |
| 10 | 1 | 1 | 1 | 1 |
A'B'B'D'BCF = A'B' + B'D' + BC
考试时可以不用把函数转成标准最小项,直接按乘积项填 1,节省时间:
F = AB + A'C + BC'
AB:A=1、B=1,不管 C,D 取什么,对应行 11 的所有格子,填 1;A'C:A=0、C=1,不管 B,D 取什么,对应行 00/01 中列 11/10 的格子,填 1;BC':B=1、C=0,不管 A,D 取什么,对应列 10 的所有格子,填 1;00→01→10→11,导致相邻格子逻辑不相邻,合并完全错误;在实际工程或复杂逻辑设计中,某些输入组合永远不会出现,或者出现后输出值无所谓(可以是 0 也可以是 1)。这些最小项称为无关项(Don’t Care Conditions),在卡诺图中用 × 或 φ 表示。
无关项是化简的「超级工具」,用得好可以极大简化电路。核心策略只有一句话:「有利则用,无利则弃」。
× 当作 1,能帮助形成更大的圈(消去更多变量)或减少圈的总数,那么就把它当作 1 圈进去。× 当作 1 不能帮助扩大圈,或者该 × 周围的 1 已经被其他圈完全覆盖,那么就把它当作 0,不圈它。× 而不包含任何真实 1 的圈。无关项是为了服务真实最小项的,不能为了圈圈而圈圈。题目:化简 F(A,B,C,D) = Σm(1,3,5,7,9) + Σd(10,11,12,13,14,15)
有效最小项填 1,无关项填×:
| AB\CD | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 00 | 0 | 1 | 1 | 0 |
| 01 | 0 | 1 | 1 | 0 |
| 11 | × | × | × | × |
| 10 | 0 | 1 | × | × |
1 都集中在第 2 列(01)和第 3 列(11)。×,将第 2 列和第 3 列合并成一个 8 单元格的大圈(包含 m₁,m₃,m₅,m₇,m₉ 以及无关项 m₁₁,m₁₃,m₁₅)。1。F = D
对比:如果不使用无关项,结果可能是
A'D + B'C'D等复杂形式。使用无关项后,电路成本极大降低。
题目:化简 F(A,B,C,D) = Σm(0,2,8,10) + Σd(1,5)
注意:这里无关项较少,需要判断哪些有用,哪些没用。
| AB\CD | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 00 | 1 (m₀) | × (m₁) | 0 | 1 (m₂) |
| 01 | 0 | × (m₅) | 0 | 0 |
| 11 | 0 | 0 | 0 | 0 |
| 10 | 1 (m₈) | 0 | 0 | 1 (m₁₀) |
1(m₀, m₂, m₈, m₁₀)。它们天然构成一个 4 单元格的大圈(循环相邻)。B'D'。1。F = B'D'
×,没有真实的 1。这是错误的,会增加冗余项。1 没有被覆盖。必须确保所有 1 都被覆盖。掌握以上内容,你就能从容应对数字电路中绝大多数逻辑函数化简题目。