四、状态机图及应用
状态图的问题
大型电路中的状态图应该如何表示?
-
数学基础:有限状态机
-
3个集合
-
I : 输入组合集合
-
O: 输出组合集合
-
S : 状态集合
-
-
2个函数
-
f(I, S):下一个状态函数
-
h(S) [Moore 型]:输出函数
-
g(I, S) [Mealy 型]:输出函数
-
-
状态图和状态机是表达有限状态机两种方式
-
状态图和状态表==需要==:
-
问题1:表达下一状态函数,需==枚举所有输入组==合
-
1输入: 2
-
2输入: 4
-
n输入:\(2^n\)
-
-
表达输出函数时:
-
问题2:Mealy 型:每个状态==枚举所有输入组合==
-
问题3:Mealy 型:每个(状态-输入)对==写出所有输出==
-
输出为UVWXYZ,U=1,100000
-
问题3:Moore型:==写出所有输出==
-
==Moore比Mealy表达高效==:不用枚举所有输入组合
-
-
Mealy输出
-
问题4:只能表示在转移弧上
-
不能表达在状态上
-
状态机图模型
-
怎么办?
-
一个现象
-
输入为X, Y, Z
-
输入为100,101,110,111,状态A从转移到B
-
即输入为X时(由卡诺图可是此时输入为X),状态从A转移到B (用表达式X来代表一些条件从而使得更简洁)
-
可解决问题1,问题2
-
问题3:默认值,不是默认值才显示表达
-
问题4:划分转移条件和输出条件
状态图 | 状态机图 |
---|---|
条件
- 输入条件
-
输入变量的==布尔表达式或方程==,值为0或1
-
转移条件(Transition condition,TC)
-
转移弧上==表达状态转移==的输入条件,为1则转移
-
输出条件(Output condition,OC)
-
==表达输出==的输入条件(该条件后面紧跟着
/输出
),为1则发生输出行为 -
1个输入条件==可同时==为TC和OC (在弧上且后面有
/输出
)
状态转移
- 无条件转移
-
弧上==无转移条件==或转移条件含==常量1==
-
条件转移
- 转移弧上有==一或多个转移条==件,任何一个转移条件为1,则转移发生
输出行为
- Moore输出
-
==只依赖于状态==,用一条线和相应状态连接
-
非转移条件依赖(Transition condition-independent, ==TCI==)
-
输出行为由==输出条件驱动==,和==相应状态连接==
-
转移条件依赖(Transition condition-dependent, ==TCD==)
-
输出行为由==转移条件驱动==
-
转移和输出条件依赖(Transition and output condition-dependent,==TOCD==)
- 输出行为由==输出条件驱动==,和==转移条件连接==
Moore | TCI | TCD | TCOD |
---|---|---|---|
把原来在状态里面的output全部拿了出来 | 输入A为1时输出Y为1,输入B为1时输出Z为1 | 满足转移条件时输出,跟传统的Mealy型输出是一样的 | 输入C=1且转移条件满足时输出Y=1 |
输出行为无条件(只和状态有关) | 输出行为和输出条件有关 | 输出行为和转移条件有关 | 输出行为和(输出条件+转移条件)有关 |
-
输出行为
-
单变量Z的==出现==,表示==Z=1==
-
向量变量==Z=向量值==,指定了Z的值
-
否则Z为==默认值==
-
==默认值语句==可指定Z默认值为0或1(默认值语句一般在状态机图左右上角这样子)
选C
状态机图和状态机表
状态机图 | 状态机表 |
---|---|
右表中Output Actions列中的*表示输出还依赖转移条件 |
请忘记上面的图自己来重新做一遍:
填空1:\(\overline{B}C\)
填空2:\(Z^*\)
填空3:\(A\)
填空4:\(\overline{B} C /Z^*\)
全对,还不错
约束检查
TC 约束
-
约束 1: 对状态 \(S_i\) , 从\(S_i\) 出发所有TC 对 \((T_{ij}, T_{ik})\) : \(T_{ij}\times T_{ik} = 0\)
-
约束 2: 对状态\(S_i\) , 对所有TC, \(T_{ij}\): \(\sum_j T_{ij} = 1\)
分析状态机图 | 例 A: | 例 B: |
---|---|---|
\(X \times Y \neq 0\) 且 \(X + Y \neq 1\), 两个约束都违反 | \(X \times X’Y = 0\), 但 \(X + X’Y \neq 1\), 违反约束2 |
OC 约束
-
约束 1: 对状态\(S_i\) , 在其上或者其状态转移上==有一致输出变量但不同值==的输出行为,相应的输 出条件对\((O_{ij}, O_{ik})\) 互斥: \(O_{ij}\times O_{ik} = 0\)
-
约束2:对每个输出变量,在状态 \(S_i\)上或者在 \(S_i\)状态转移上的==输出条件必须覆盖==所有可能的输入变量组合: \(\sum_j O_{ij} = 1\)
分析状态机图 | 例 C |
---|---|
对 Z = 1 和 Z = 0, \(X\times Y \neq 0\), 因此==违反约束1== ;X + Y + Y’ = 1, 在Y’上输出 默认值Z’ ,因此==约束2满足== |
对于输出条件的约束2无论在转移弧上的条件还是直接输出的条件都有关
约束检查
状态机图 | 转移约束 | 输出约束 |
---|---|---|
通过状态机表进行约束检测更直观 | |
---|---|
状态机图设计
例子一:控制滑动门
步骤 | 具体 |
---|---|
① 定义==输入输出==变量,并定义每个变量0和1意义 | |
② 画出电路==状态机图==或者写出状态机表 | |
③ 若使用状态机图,将其转换成==状态机表== | |
④-1 从状态机表,推导出电路==下一状态== | |
④-2 ==和输出方程== |
例子二:电梯控制
输入 | 输出 | 状态 |
---|---|---|
主转移路径 | 状态机图 |
---|---|
-
约束检查添加其他转移
-
添加输出
状态机图 | 状态机表 |
---|---|
请先不要看下方答案先独立完成:
完全正确。
下一状态 | 输出方程 |
---|---|