📜  门| GATE CS 1996 |问题26(1)

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

门 | GATE CS 1996 | 问题26

这是一道关于组合逻辑和时序逻辑的综合题目。其中电路由组合逻辑和时序逻辑两部分构成。

题目描述

以下为题目描述(原文):

设 $P_0$、$P_1$、$P_2$ 为三个 $D$ 触发器,它们的时钟脉冲均为 $\phi$。$P_0$ 的数据输入端从按钮 $B_1$ 得到输入,$P_1$ 的数据输入端与 $P_0$ 的 $Q$ 输出端相连,$P_2$ 的数据输入端与 $P_1$ 的 $Q$ 输出端相连。 $P_0$ 的 $Q$ 输出端、$P_1$ 的 $Q$ 输出端、$P_2$ 的 $Q$ 输出端分别与门电路的 $A$、$B$、$C$ 输入端相连。根据下面所给的逻辑函数表,画出 $P_0$、$P_1$、$P_2$ 的状态转换图,确定电路的稳定状态。图中状态($S$)用 $(Q_2, Q_1, Q_0)$ 表示。

以下为逻辑函数表:

| $B_1$ | $Q_2$ | $Q_1$ | $Q_0$ | $A$ | $B$ | $C$ | | :-: | :-: | :-: | :-: | :-: | :-: | :-: | | 1 | 0 | 0 | 0 | 1 | 0 | 0 | | 0 | 0 | 0 | 0 | 1 | 1 | 0 | | 0 | 0 | 0 | 1 | 0 | 0 | 0 | | 0 | 0 | 1 | 0 | 0 | 1 | 0 | | 0 | 0 | 1 | 1 | 1 | 0 | 0 | | 0 | 1 | 0 | 0 | 1 | 1 | 0 | | 0 | 1 | 0 | 1 | 0 | 0 | 1 | | 0 | 1 | 1 | 0 | 1 | 0 | 0 | | 0 | 1 | 1 | 1 | 0 | 0 | 1 |

程序实现

题目涉及到状态转移图的绘制,可以用 Python 实现。以下是Python函数的实现:

def draw_state_diagram():
    edges = []
    nodes = [
        {"id": "000", "label": "(0, 0, 0)"},
        {"id": "001", "label": "(0, 0, 1)"},
        {"id": "010", "label": "(0, 1, 0)"},
        {"id": "011", "label": "(0, 1, 1)"},
        {"id": "100", "label": "(1, 0, 0)"},
        {"id": "101", "label": "(1, 0, 1)"},
        {"id": "110", "label": "(1, 1, 0)"},
        {"id": "111", "label": "(1, 1, 1)"}
    ]

    for i in range(9):
        from_node = nodes[i]["id"]
        q2, q1, q0 = from_node
        j = get_index_from_table(q2, q1, q0)
        a, b, c = table[j][4:]
        to_node_id = "{0}{1}{2}".format(int(a), int(b), int(c))
        label = "{0}_{1}_{2}".format(int(a), int(b), int(c))
        to_node_label = label
        edge = {"from": from_node, "to": to_node_id, "label": label}
        if edge not in edges:
            edges.append(edge)
            if not {"id": to_node_id, "label": to_node_label} in nodes:
                nodes.append({"id": to_node_id, "label": to_node_label})

    return {
        "nodes": nodes,
        "edges": edges
    }

解释一下该函数的实现:

  • get_index_from_table(q2, q1, q0):根据三个触发器的状态 $(Q_2, Q_1, Q_0)$,返回逻辑函数表的对应行索引。
  • table[j][4:]:截取逻辑函数表一行的最后三列,得到 $A$、$B$、$C$ 的取值。

该函数将返回一个对象,包含状态转移图的节点和连边信息。可以把该信息传递给前端绘制。如果使用 networkx 库和 matplotlib 库,还可以在 Python 内部绘制出状态转移图。