Altifigence Academy

9 / 63 · 概念

卡诺图与 don’t-care 的条件

利用格雷码的相邻性简化逻辑表达式,明确未使用输入的假设。

将真值表与实现成本联系起来

真值表真值表 完整列出所有可能输入组合及每种组合输出的表格。随时间的变化需要另行通过波形检查。了解更多定义功能,逻辑最小化则决定用何种表达式实现该功能。对于三个输入,以 A 为最高位,用二进制 ABC 定义最小项编号。

F(A,B,C)=Σm(1,3,4,5,7)F(A,B,C)=\Sigma m(1,3,4,5,7)

例如最小项 4 对应 ABC=100。未列出的 0、2、6 行输出为 0。无需总用五个乘积项逐项实现,可以将仅有一个比特不同的项合并。

卡诺图是重新排列的真值表

将各列按 BC=00、01、11、10 排列。这是相邻列仅有一位变化的格雷码顺序。最左列与最右列也相邻。

A / BC00011110
00110
11110

分组必须是矩形,单元格数必须为 1,2,4,8,…1,2,4,8,\ldots。包含值为 0 的格子会改变功能。同一个 1 可以包含在多个组中。

  1. 将 C=1 的两列共四格合并,则无论 A、B 如何变化,输出均为 1,剩余项为 C。
  2. 将 A=1 行中 BC=00 和 01 的两格合并,只有 C 变化,剩余项为 AB‾A\overline B。
  3. 将两组用 OR 合并,可覆盖全部 1,并避开全部 0。
F=C+AB‾F=C+A\overline B

在八种输入下对照原定义与最小化后的表达式,分别检查“表达式更短”和“功能相同”这两件事。

这一步把上方卡诺图中的两组转成表达式。C 组中 A、B 都在变化;两格组中 C 在变化,因此从对应项中消去这些变量。

从分组中消去的变量
  1. m1,3,5,7: A、B 变化时 C 始终为 1
  2. m4,5: A=1、B=0 时只有 C 变化
  3. 两组之和: F = C + A · NOT B

don’t-care 既是优化权限,也是输入假设

假设系统约定 ABC=000 绝不会出现。将这一格设为 X 后,可按需要将其当作 0 或 1。此时可将 B=0 的四格合并,得到更简单的表达式。

Fdc=C+B‾F_{\mathrm{dc}}=C+\overline B

新表达式在 ABC=000 时为 1,与原来的完整真值表不同。因此要声称是“相同电路”,必须包含输入不为 000 的条件。若初始化或错误恢复期间可能出现 000,这项优化就可能破坏系统要求。

表达式最小化不等于芯片最小化

文字数少的表达式,在特定标准单元库中并不保证面积、延迟和功耗也最优。负载、扇出、可用复合门、布线和毛刺都会影响结果。现阶段应明确功能等价性与输入假设;物理成本则依据综合和时序结果判断。

延伸阅读:MIT OpenCourseWare — Combinational Logic

实验 · 检查分组重叠与 don’t-care 条件

从 C 与 A·NOT B 扩展到更大的组

F = C + A · ¬B

三输入真值表 · X 表示规格未指定的输出
ABCF
0000
0011
0100
0111
1001
1011
1100
1111
  1. 点击 C 组。四格中 A、B 均变化,因此只剩 C。
  2. 点击 A·¬B 组。它覆盖 m4 和 m5,其中 m5 与 C 组重叠。允许重叠,但不允许包含为 0 的格子。
  3. 点击 m0 两次,使其从 0 → 1 → X。成为 X 后,这是包含 d(0) 的不完全规格。B=0 组扩大,表达式变为 C+B‾C+\overline B。
  4. 再点击 m0 一次,将其恢复为 0。原要求恢复后,较大的分组应当消失。

选择分组不会改变数值。覆盖所有 1 的完整表达式保持不变,边框只突出显示当前查看的一个项。这里“最小”的标准是先比较乘积项数,再比较文字数;若有多个解,只显示其中一个。

自己试试

将 m0 设为 X 后,用 F=C+NOT B 实现。若新增要求:复位期间可能出现 ABC=000,且此时必须 F=0,还能保留这项优化吗?

阅读解释

不能保留。新要求重新指定 m0=0,而优化后的表达式在 000 时为 1,违反要求。必须恢复到像原来的 C+A·NOT B 那样满足所有指定行的表达式。

你的选择适用于此浏览器,可随时在页脚更改。