逻辑电路主要分为两类
- 组合逻辑电路:输出仅与当前输入有关
- 顺序逻辑电路:输出与当前输入及历史状态有关
# 顺序逻辑电路
顺序逻辑电路中,离散的时间点也会影响输出结果
通常记时间点
- s=s(0) 为当前时间点
- s(k) 为当前时间起的第 k 个时间点,可以为负数
时钟 (Clock) 是一种特殊的输入信号,其在各个时间点交替变化
通过时钟信号,可以使顺序逻辑电路在各个时间点同步工作
要研究顺序逻辑电路,首先需要学习状态迁移
由于状态实际上由历史输入决定,所以可以将某个时间点 s(k) 的状态 Q(k) 定义为在时间点 s(k) 之前的所有输入信号 s(0),s(1),…,s(k−1) 的函数
即,令在时间点 s(k) 处输入为 X(k),则状态 Q(s) 可以表示为
Q(s)=Φ(X(s−1),determined Q(s−1)X(s−2),…,X(0))
利用上一状态可以简化表达
Q(s)=δ(X(s−1),Q(s−1))
也就是说,通过状态迁移函数 δ,可以根据上一状态 Q(s−1) 与输入 X(s−1) 计算当前状态 Q^
在状态改变的同时,顺序逻辑电路也存在自身的输出
与状态类似,某个时间点的输出 Y(s) 也可以表示为历史输入的结果,并使用上一状态简化,注意是用状态而不是上一输出
Y(s)=Ω(X(s−1),determined Q(s−1)X(s−2),…,X(0))
Y(s)=ω(X(s−1),Q(s−1))
综上,顺序逻辑电路的结构可以从形式上写为 M=(X,Q,Y,δ,ω)
# N 进制计数器
N 进制计数器是一种典型的顺序逻辑电路
其累积计算历史输入总和,在总和达到 N 的时间点输出 1,否则输出 0
N 进制计数器的状态集合 Q={Q0,Q1,…,QN−1} 可以定义为
- Q0 表示当前总和为 0modN
- Q1 表示当前总和为 1modN
- …
- QN−1 表示当前总和为 N−1modN
那么系统在 s 时刻的输出 Y(s) 可以定义为
Y(s)(X(s−1),Q(s−1))={1,0,Q(s−1)=QN−1∧X(s−1)=1otherwise
# 状态迁移表
将不同的输入与状态组合对应的状态与输出列出,可以构造四维表格,称为状态迁移表 (State Transition Table)
| 当前状态 Q^ | 输入 X^ | 下一个状态 Q^ | 输出 Y^ |
|---|
| Q0 | 0 | Q0 | 0 |
| Q0 | 1 | Q1 | 0 |
| Q1 | 0 | Q1 | 0 |
| Q1 | 1 | Q2 | 0 |
| ⋮ | ⋮ | ⋮ | ⋮ |
| Q_ | 0 | Q_ | 0 |
| Q_ | 1 | Q_ | 0 |
| Q_ | 0 | Q_ | 0 |
| Q_ | 1 | Q0 | 1 |
同时,也可以用有向图表示状态迁移,称为状态迁移图 (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 |