bitGateLab Digital · 学习
中文(简体)
打开模拟器

学习 › 第 4 讲

2、3、4 变量卡诺图与无关项 X

阅读约 7 分钟 · bitGateLab 团队

用布尔代数化简是可行的,但前提是你能“看出”该用哪条定律。卡诺图把这种寻找变成了一种直观的图形练习:它把真值表排成一个方格图,相邻的格子只有一个变量不同,于是化简就变成了把若干个 1 圈起来。本文将带你学习如何画出 2、3、4 变量的卡诺图,如何正确地画圈(包括“首尾相接”的边界),以及如何利用“无关项”。

基本思想:相邻的格子只差一个变量

并项律告诉我们 AB + AB = A:只有一个变量不同的两项可以合并,那个变量随之消失。卡诺图把最小项排列成这样:任何两个有公共边的格子都满足这个条件。为此,行和列的表头不按二进制顺序 00、01、10、11 排列,而是按格雷码排列:00、01、11、10。相邻两个值之间只有一位发生变化,最后一个和第一个之间(10 和 00)也是如此。所以卡诺图表现得就像它相对的两条边粘在了一起。

2 变量和 3 变量卡诺图

两变量卡诺图有 4 个格子:A 作行,B 作列。三变量卡诺图有 8 个格子:A 作行,BC 作列,按格雷码顺序排列。每个格子里的编号表示它对应的最小项:

A \ BC00011110
0m0m1m3m2
1m4m5m7m6

注意 m3 和 m2 是按这个顺序排的:这是格雷码造成的结果,也是手工填图时许多错误的根源。

画圈规则

读一个圈时,逐个检查每个变量:如果它在圈内所有格子里取值都相同,它就出现在该项中(取 1 时不加横线,取 0 时加横线);如果它的取值有变化,就被消去。

例 1:三变量。化简 F(A, B, C) = Σm(1, 3, 4, 5, 7)。

A \ BC00011110
00110
11110
  1. 01 和 11 两列是填满的:构成一个含 4 个格子的圈(m1、m3、m5、m7)。在这个圈里 A 有变化,B 有变化,C 始终为 1。得到的项:C。
  2. 还剩 m4。把它与 m5(右边的邻格)圈在一起:两格中都有 A = 1,B = 0,而 C 有变化。得到的项:AB。
  3. F = C + AB。

验证 m6(110):C = 0,AB = 0,所以 F = 0,与卡诺图一致。

4 变量卡诺图与边界相邻

四个变量时卡诺图有 16 个格子:AB 作行,CD 作列,两者都按格雷码顺序排列。

AB \ CD00011110
00m0m1m3m2
01m4m5m7m6
11m12m13m15m14
10m8m9m11m10

最左一列与最右一列相邻,最上一行与最下一行相邻。因此,四个角(m0、m2、m8、m10)构成一个合法的 4 格圈:这四格中都有 B = 0 且 D = 0,所以读作 BD。

例 2:跨越边界的圈。化简 F(A, B, C, D) = Σm(0, 1, 2, 5, 8, 9, 10)。

AB \ CD00011110
001101
010100
110000
101101
  1. m0、m1、m8、m9:最上一行和最下一行(通过边界相邻)的 00、01 两列。B = 0,C = 0。得到的项:BC。
  2. m0、m2、m8、m10:四个角。得到的项:BD。
  3. 还剩 m5(0101)。它最合适的取值为 1 的邻格是 m1(0001):A = 0,C = 0,D = 1,而 B 有变化。得到的项:ACD。
  4. F = BC + BD + ACD。

这样就从 7 个各含 4 个文字的最小项(共 28 个文字)减少到 3 项、总共 7 个文字。

无关项(X)

有时某些输入组合永远不会出现,或者它们的输出没有任何影响。例如,在一位 BCD 码中,1010 到 1111 这些代码并不存在。在这些行上写一个 X(英文称 don't care,即无关项),并另外记作 d(...)。画圈时,每个 X 如果有助于形成更大的圈,就可以当作 1;否则可以不管它。X 从来不是必须覆盖的。

例 3:带无关项 X。化简 F(A, B, C, D) = Σm(1, 3, 7, 11, 15) + d(0, 2, 5)。

AB \ CD00011110
00X11X
010X10
110010
100010
  1. CD = 11 这一列是填满的(m3、m7、m15、m11):得到项 CD。
  2. 还缺 m1。把 m0 和 m2 的 X 当作 1,整个最上一行就是一个 4 格圈:得到项 AB。
  3. F = CD + AB。

还有一个同样好的解:取 m5 的 X,把 m1、m3、m5、m7 圈在一起,得到 AD。于是 F = CD + AD。两个解都是 2 项、4 个文字,并且在所有真正有关的行上结果一致。一个函数有不止一种最简形式是很正常的。

如果没有这些 X,m1 只能与 m3 圈在一起,得到 ABD,多出一个文字。无关项是白送的节省,别浪费。

常见错误

在模拟器中试一试

卡诺图模块会按格雷码顺序排好函数、标出各个圈并写出最简表达式,这样你就可以把自己的圈法与工具给出的方案对比。

  1. 新建一个四变量函数,输入例 2 中的各个 1。
  2. 先自己在纸上画圈,写下你的结果。
  3. 观察卡诺图标出的圈和得到的表达式;如果与你的不同,检查一下是哪个圈没有画到最大。
  4. 输入例 3,把第 0、2、5 格标为 X,再观察去掉这些 X 后化简结果有何变化。
  5. 把结果转换成电路,改变输入,确认它与真值表一致。

练习

  1. 化简 F(A, B, C) = Σm(0, 2, 4, 6)。
    答案

    BC = 00 和 BC = 10 两列通过边界相邻,并且都是填满的。四个格子中都有 C = 0:F = C。

  2. 化简 F(A, B, C, D) = Σm(0, 2, 5, 7, 8, 10, 13, 15)。
    答案

    四个角:BD。中间的方块 m5、m7、m13、m15:BD。F = BD + BD,也就是 B 和 D 的 XNOR。

  3. 化简 F(A, B, C, D) = Σm(4, 5, 6, 7, 12, 13, 14, 15)。
    答案

    AB = 01 和 AB = 11 两行构成一个 8 格圈;只有 B 始终保持为 1。F = B。

  4. 当一位 BCD 码(A 为最高位)的值为 5 或更大时,应点亮某个输出。化简 F = Σm(5, 6, 7, 8, 9) + d(10, 11, 12, 13, 14, 15)。
    答案

    借助这些 X,AB = 11 和 AB = 10 两行构成一个 8 格圈:A。方块 m5、m7、m13、m15 给出 BD,方块 m6、m7、m14、m15 给出 BC。F = A + BD + BC = A + B(C + D)。

变量多于四五个时,卡诺图就很难读了;针对这种情况有一种列表化简的方法,即奎因-麦克拉斯基法。