9 / 63 · 概念
卡诺图与 don’t-care 的条件
利用格雷码的相邻性简化逻辑表达式,明确未使用输入的假设。
课时内容可免费阅读,选课后可保存学习进度。
将真值表与实现成本联系起来
真值表真值表 完整列出所有可能输入组合及每种组合输出的表格。随时间的变化需要另行通过波形检查。了解更多定义功能,逻辑最小化则决定用何种表达式实现该功能。对于三个输入,以 A 为最高位,用二进制 ABC 定义最小项编号。
例如最小项 4 对应 ABC=100。未列出的 0、2、6 行输出为 0。无需总用五个乘积项逐项实现,可以将仅有一个比特不同的项合并。
卡诺图是重新排列的真值表
将各列按 BC=00、01、11、10 排列。这是相邻列仅有一位变化的格雷码顺序。最左列与最右列也相邻。
| A / BC | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 |
分组必须是矩形,单元格数必须为 。包含值为 0 的格子会改变功能。同一个 1 可以包含在多个组中。
- 将 C=1 的两列共四格合并,则无论 A、B 如何变化,输出均为 1,剩余项为 C。
- 将 A=1 行中 BC=00 和 01 的两格合并,只有 C 变化,剩余项为 。
- 将两组用 OR 合并,可覆盖全部 1,并避开全部 0。
在八种输入下对照原定义与最小化后的表达式,分别检查“表达式更短”和“功能相同”这两件事。
这一步把上方卡诺图中的两组转成表达式。C 组中 A、B 都在变化;两格组中 C 在变化,因此从对应项中消去这些变量。
- m1,3,5,7: A、B 变化时 C 始终为 1
- m4,5: A=1、B=0 时只有 C 变化
- 两组之和: F = C + A · NOT B
don’t-care 既是优化权限,也是输入假设
假设系统约定 ABC=000 绝不会出现。将这一格设为 X 后,可按需要将其当作 0 或 1。此时可将 B=0 的四格合并,得到更简单的表达式。
新表达式在 ABC=000 时为 1,与原来的完整真值表不同。因此要声称是“相同电路”,必须包含输入不为 000 的条件。若初始化或错误恢复期间可能出现 000,这项优化就可能破坏系统要求。
表达式最小化不等于芯片最小化
文字数少的表达式,在特定标准单元库中并不保证面积、延迟和功耗也最优。负载、扇出、可用复合门、布线和毛刺都会影响结果。现阶段应明确功能等价性与输入假设;物理成本则依据综合和时序结果判断。
延伸阅读:MIT OpenCourseWare — Combinational Logic
实验 · 检查分组重叠与 don’t-care 条件
F = C + A · ¬B
| ABC | F |
|---|---|
| 000 | 0 |
| 001 | 1 |
| 010 | 0 |
| 011 | 1 |
| 100 | 1 |
| 101 | 1 |
| 110 | 0 |
| 111 | 1 |
- 点击 C 组。四格中 A、B 均变化,因此只剩 C。
- 点击 A·¬B 组。它覆盖 m4 和 m5,其中 m5 与 C 组重叠。允许重叠,但不允许包含为 0 的格子。
- 点击 m0 两次,使其从 0 → 1 → X。成为 X 后,这是包含 d(0) 的不完全规格。B=0 组扩大,表达式变为 。
- 再点击 m0 一次,将其恢复为 0。原要求恢复后,较大的分组应当消失。
选择分组不会改变数值。覆盖所有 1 的完整表达式保持不变,边框只突出显示当前查看的一个项。这里“最小”的标准是先比较乘积项数,再比较文字数;若有多个解,只显示其中一个。
自己试试
将 m0 设为 X 后,用 F=C+NOT B 实现。若新增要求:复位期间可能出现 ABC=000,且此时必须 F=0,还能保留这项优化吗?
阅读解释
不能保留。新要求重新指定 m0=0,而优化后的表达式在 000 时为 1,违反要求。必须恢复到像原来的 C+A·NOT B 那样满足所有指定行的表达式。