首先是您的问题的答案:
每个卡诺图中的单元格数与所有可能的输入组合数相匹配。地图单元格的索引方式必须与真值表相对应。下图是不同大小的卡诺图示例,其中相邻单元格的可视化仍然非常容易。
如您所见,关键是,两个相邻单元格仅在一个变量的值上不同,四个相邻单元格在两个变量的值上不同,依此类推。这就是为什么您应该寻找具有 2^n 大小的组的原因。Map 的索引可能看起来有点混乱,但这是为了显示真值表中每一行之间的所有关系。
如果您对 K-map 进行索引,但不知道哪些行对应哪些变量以及它们应该按什么顺序进入,那么您可以像这样检查它:
- 索引 0 =没有一个变量为真
- 索引 1 = 只有最低有效位为真(对于排序为abcd的真值表,即d)
- index 2 = 只有第二个最低有效位为真(对于与c相同的真值表)
- 索引 4 = 只有第三个最低有效位为真(对于与b相同的真值表)
- 索引 8 = 只有第四个最低有效位为真(对于与a相同的真值表)
举个例子:这里你可以看到一个 01364 序列发生器的状态图,它被实现为一个摩尔机。机器的所有边缘都标有复位按钮的输入值。
机器的期望行为和与状态匹配的输出值可以通过这个转换表来描述:
state || output (decimal) | reset || next state
-------------------------------------------------
S_0 || 0 | 0 || S_1
|| | 1 || S_0
-------------------------------------------------
S_1 || 1 | 0 || S_2
|| | 1 || S_0
-------------------------------------------------
S_2 || 3 | 0 || S_3
|| | 1 || S_0
-------------------------------------------------
S_3 || 6 | 0 || S_4
|| | 1 || S_0
-------------------------------------------------
S_4 || 4 | 0 || S_0
|| | 1 || S_0
在对状态的表示进行编码以匹配二进制的十进制输出(q_2、q_1和q_0;d_2、d_1和d_0)后,转换表如下所示:
state || q_2 | q_1 | q_0 | reset || d_2 | d_1 | d_0 || next state
-------------------------------------------------------------------
S_0 || 0 | 0 | 0 | 0 || 0 | 0 | 1 || S_1
|| | | | 1 || 0 | 0 | 0 || S_0
-------------------------------------------------------------------
S_1 || 0 | 0 | 1 | 0 || 0 | 1 | 1 || S_2
|| | | | 1 || 0 | 0 | 0 || S_0
-------------------------------------------------------------------
S_2 || 0 | 1 | 1 | 0 || 1 | 1 | 0 || S_3
|| | | | 1 || 0 | 0 | 0 || S_0
-------------------------------------------------------------------
S_3 || 1 | 1 | 0 | 0 || 1 | 0 | 0 || S_4
|| | | | 1 || 0 | 0 | 0 || S_0
-------------------------------------------------------------------
S_4 || 1 | 0 | 0 | 0 || 0 | 0 | 0 || S_0
|| | | | 1 || 0 | 0 | 0 || S_0
研究每个可能的输入组合的转换表很有用,因为有一些“不关心”(x)输出值(对于状态,序列中不存在),可用于最小化卡诺图。
index | state || q_2 | q_1 | q_0 | reset || d_2 | d_1 | d_0 || next state
---------------------------------------------------------------------------
0 | S_0 || 0 | 0 | 0 | 0 || 0 | 0 | 1 || S_1
1 | S_0 || 0 | 0 | 0 | 1 || 0 | 0 | 0 || S_0
---------------------------------------------------------------------------
2 | S_1 || 0 | 0 | 1 | 0 || 0 | 1 | 1 || S_2
3 | S_1 || 0 | 0 | 1 | 1 || 0 | 0 | 0 || S_0
---------------------------------------------------------------------------
4 | - || 0 | 1 | 0 | 0 || x | x | x || -
5 | - || 0 | 1 | 0 | 1 || 0 | 0 | 0 || S_0
---------------------------------------------------------------------------
6 | S_2 || 0 | 1 | 1 | 0 || 1 | 1 | 0 || S_3
7 | S_2 || 0 | 1 | 1 | 1 || 0 | 0 | 0 || S_0
---------------------------------------------------------------------------
8 | S_4 || 1 | 0 | 0 | 0 || 0 | 0 | 0 || S_0
9 | S_4 || 1 | 0 | 0 | 1 || 0 | 0 | 0 || S_0
---------------------------------------------------------------------------
10 | - || 1 | 0 | 1 | 0 || x | x | x || -
11 | - || 1 | 0 | 1 | 1 || 0 | 0 | 0 || S_0
---------------------------------------------------------------------------
12 | S_3 || 1 | 1 | 0 | 0 || 1 | 0 | 0 || S_4
13 | S_3 || 1 | 1 | 0 | 1 || 0 | 0 | 0 || S_0
---------------------------------------------------------------------------
14 | - || 1 | 1 | 1 | 0 || x | x | x || -
15 | - || 1 | 1 | 1 | 1 || 0 | 0 | 0 || S_0
最后您可以看到,定义d_2、d_1和d_0的函数(即与 01364 序列中的数字匹配的二进制编码状态/输出)可以在以下 K-map 中简单地标记出来。
f(d_2) = q_1 ⋅ ¬(reset)
f(d_1) = q_0 ⋅ ¬(reset)
f(d_0) = ¬(q_2) ⋅ ¬(q_1) ⋅ ¬(reset)
(所有图像均使用乳胶生成。)