📜  K-Map 中的各种含义(1)

📅  最后修改于: 2023-12-03 15:17:07.398000             🧑  作者: Mango

K-Map 中的各种含义

K-Map,全称Karnaugh Map,是一种常用的逻辑设计方法。它可以将布尔函数转换为逻辑门,以简化逻辑电路的设计过程。以下是K-Map中一些重要的概念和术语。

1. 灰码编号

K-Map每个拐点的位置都需要编号,用以构建布尔表达式。灰码编号是K-Map所用最常见的一种编号方式。与二进制编码不同,它只有一个数位在两个相邻数位之间改变。

灰码编号的规则

以4变量K-Map为例,具体的灰码编号规则如下:

  1. 对行进行灰码编号,第一行为00,第二行为01,第三行为11,第四行为10。
  2. 对列进行灰码编号,第一列为00,第二列为01,第三列为11,第四列为10。
灰码编号的优势

灰码编号虽然看起来比二进制编码更为繁琐,但灰码编号的优势在于,它与逻辑门的输入和输出之间的连接关系更为直接。这就能尽量减少逻辑门之间的连接,从而节省电路的延时时间和电路面积。

代码实现

以下是一个用Python实现灰码编号的函数:

def gray_code(n):
    return n^(n>>1)
2. 矩阵分组

矩阵分组是K-Map中一个重要的步骤。它将K-Map中的所有拐点划分为多个数目较少的矩阵,从而简化了布尔表达式的构建。对于4变量K-Map,矩阵分组的规则如下:

  1. 分别考虑每一列和每一行上有哪些拐点。
  2. 将这些拐点分组,使得每一个分组都恰好覆盖2的n次方个单元格。
  3. 将这些分组用字母A、B、C等表示。
代码实现

以下是一个用Python实现矩阵分组的函数:

def group_points(minterms):
    groups = {}
    for minterm in minterms:
        bin_str = bin(minterm)[2:].rjust(4, "0")
        n_ones = bin_str.count("1")
        if n_ones in groups:
            groups[n_ones].append(minterm)
        else:
            groups[n_ones] = [minterm]
    return groups
3. 卡诺图的基本原理

通过将输入变量的所有可能的组合在K-Map上标记出来,可以用矩形区域(称为implicants)来覆盖出输入的所有可能组合所对应的点。这些矩形区域可以尽量大地包含一种特定组合的所有点。这样,任何一个输入的可能组合都能被第一个完全包含它的区域所代表。而表达式就是这些矩阵区域的组合。

例如,对于4变量的K-Map,假设已经确定以下的拐点:

0 1 5 7 8 9 11 13

它们可以按照以下方式在K-Map上标记出来:

0 1 - -
- 5 7 -
8 9 11 -
- 13 - -

然后,我们可以将这些拐点分为不同的矩阵,如下所示:

AB
CD

每个矩阵都可以覆盖它包含的所有拐点。矩阵AB覆盖了拐点0、1、8和9;矩阵CD覆盖了拐点5、7、11和13。然后,我们可以将矩形AB和CD组合起来,得到以下布尔表达式:

f(a, b, c, d) = c' d' + a' b' d + b c' d + a' b c
代码实现

以下是一个用Python实现K-Map基本原理的函数:

def implicant_chart(groups):
    chart = []
    for i in range(5):
        row = []
        for j in range(5):
            row.append(set())
        chart.append(row)

    for group in groups.values():
        for minterm in group:
            bin_str = bin(minterm)[2:].rjust(4, "0")
            row = int(bin_str[0:2], 2)
            col = int(bin_str[2:], 2)
            chart[row][col].add(minterm)

    return chart
结论

通过上述讲解,我们已经了解了K-Map中一些常见的概念和术语。灰码编号是K-Map中最常见的编号方式,它与逻辑门的输入和输出之间的连接关系更为直接。矩阵分组将所有拐点划分为多个矩阵从而简化布尔表达式的构建。卡诺图的基本原理是在K-Map上标记所有可能输入组合,然后将它们组合成覆盖整个输入空间的矩阵区域。