逻辑电路主要分为两类

  • 组合逻辑电路:输出仅与当前输入有关
  • 顺序逻辑电路:输出与当前输入及历史状态有关

# 顺序逻辑电路

顺序逻辑电路中,离散的时间点也会影响输出结果

通常记时间点

  • s=s(0)s=s^{(0)} 为当前时间点
  • s(k)s^{(k)} 为当前时间起的第 kk 个时间点,可以为负数

时钟 (Clock) 是一种特殊的输入信号,其在各个时间点交替变化
通过时钟信号,可以使顺序逻辑电路在各个时间点同步工作

要研究顺序逻辑电路,首先需要学习状态迁移
由于状态实际上由历史输入决定,所以可以将某个时间点 s(k)s^{(k)} 的状态 Q(k)Q^{(k)} 定义为在时间点 s(k)s^{(k)} 之前的所有输入信号 s(0),s(1),,s(k1)s^{(0)}, s^{(1)}, \ldots, s^{(k-1)} 的函数

即,令在时间点 s(k)s^{(k)} 处输入为 X(k)X^{(k)},则状态 Q(s)Q^{(s)} 可以表示为

Q(s)=Φ(X(s1),X(s2),,X(0)determinedQ(s1))Q^{(s)} = \Phi(X^{(s-1)}, \underbrace{X^{(s-2)}, \ldots, X^{(0)}}_{\text{determined } Q^{(s-1)}})

利用上一状态可以简化表达

Q(s)=δ(X(s1),Q(s1))Q^{(s)} = \delta(X^{(s-1)}, Q^{(s-1)})

也就是说,通过状态迁移函数 δ\delta,可以根据上一状态 Q(s1)Q^{(s-1)} 与输入 X(s1)X^{(s-1)} 计算当前状态 Q^

在状态改变的同时,顺序逻辑电路也存在自身的输出
与状态类似,某个时间点的输出 Y(s)Y^{(s)} 也可以表示为历史输入的结果,并使用上一状态简化,注意是用状态而不是上一输出

Y(s)=Ω(X(s1),X(s2),,X(0)determinedQ(s1))Y^{(s)} = \Omega(X^{(s-1)}, \underbrace{X^{(s-2)}, \ldots, X^{(0)}}_{\text{determined } Q^{(s-1)}})

Y(s)=ω(X(s1),Q(s1))Y^{(s)} = \omega(X^{(s-1)}, Q^{(s-1)})

综上,顺序逻辑电路的结构可以从形式上写为 M=(X,Q,Y,δ,ω)M = (X, Q, Y, \delta, \omega)

# N 进制计数器

N 进制计数器是一种典型的顺序逻辑电路
其累积计算历史输入总和,在总和达到 N 的时间点输出 1,否则输出 0

N 进制计数器的状态集合 Q={Q0,Q1,,QN1}Q = \{Q_0, Q_1, \ldots, Q_{N-1}\} 可以定义为

  • Q0Q_0 表示当前总和为 0modN0 \mod N
  • Q1Q_1 表示当前总和为 1modN1 \mod N
  • \ldots
  • QN1Q_{N-1} 表示当前总和为 N1modNN-1 \mod N

那么系统在 s 时刻的输出 Y(s)Y^{(s)} 可以定义为

Y(s)(X(s1),Q(s1))={1,Q(s1)=QN1X(s1)=10,otherwiseY^{(s)}(X^{(s-1)}, Q^{(s-1)}) = \begin{cases}1, & Q^{(s-1)} = Q_{N-1} \wedge X^{(s-1)} = 1 \\ 0, & \text{otherwise}\end{cases}

# 状态迁移表

将不同的输入与状态组合对应的状态与输出列出,可以构造四维表格,称为状态迁移表 (State Transition Table)

当前状态 Q^输入 X^下一个状态 Q^输出 Y^
Q0Q_00Q0Q_00
Q0Q_01Q1Q_10
Q1Q_10Q1Q_10
Q1Q_11Q2Q_20
\vdots\vdots\vdots\vdots
Q_0Q_0
Q_1Q_0
Q_0Q_0
Q_1Q0Q_01

同时,也可以用有向图表示状态迁移,称为状态迁移图 (State Transition Diagram)

顶点表示状态
有向边表示状态迁移

stateDiagram-v2
    [*] --> Q0
    Q0 --> Q0: X=0 / Y=0
    Q0 --> Q1: X=1 / Y=0
    Q1 --> Q1: X=0 / Y=0
    Q1 --> Q2: X=1 / Y=0
    Q2 --> Q2: X=0 / Y=0
    Q2 --> Q3: X=1 / Y=0
    Q3 --> Q3: X=0 / Y=0
    Q3 --> Q0: X=1 / Y=1