![](https://csdnimg.cn/release/download_crawler_static/1443730/bg4.jpg)
第 8 章 有限状态机 FSM
201
WHEN st2 => comb_outputs <= "8"; --以下依次类推
IF state_inputs = "11" THEN
next_state <= st2;
ELSE
next_state <= st3;
END IF;
WHEN st3 => comb_outputs <= "11";
IF state_inputs = "11" THEN
next_state <= st3;
ELSE
next_state <= st0;
-- 否则,在下一时钟后,进程REG的状态返回st0
END IF;
END case;
END PROCESS;
-- 由信号next_state将下一状态值带出此进程,进入进程REG
END behv;
从一般意义上
说,进程间是并行
运行的,但由于敏
感信号的设置不同
以及电路的延迟,
在时序上进程间的
动作是有先后的。
本例中,就状态转
换这一行为来说,
进程“REG”在时钟上升沿到来时,将首
先运行,完成状态转换的赋值操作。进程
REG 只负责将当前状态转换为下一状态,
而不管所转换的状态究竟处于哪一个状态
(st0、st1、st2、st3)。如果外部控
制信号 state_inputs 不变,只有当来
自进程 REG 的信号 current_state 改
变时,进程 COM 才开始动作。在此进程中,将根据 current_state 的值和外部的控制
码 state_inputs 来决定下一时钟边沿到来后,进程 REG 的状态转换方向。这个状态机
的两位组合逻辑输出
comb_outputs 是对当前状态的
译码,读者可以通过这个输出值了
解状态机内部的运行情况;同时可
以利用外部控制信号
state_inputs 任意改变状态机
的状态变化模式。请注意,在此状
态机中,有两个信号起到了互反馈
的作用,完成了两个进程间的信息
comb_outputs
state_inputs
reset
clk
FSM: s_machine
COM
next_state
current_state
PROCESS
REG
PROCESS
图 8-1 s_machine 工作示意图
图 8-2 AD574 工作时序
表 8-1 AD574 逻辑控制真值表(X 表示任意)
CE CS RC K12/8 A0
工 作 状 态
0 X X X X
禁止
X 1 X X X
禁止
1 0 0 X 0
启动 12 位转换
1 0 0 X 1
启动 8 位转换
1 0 1 1 X
12 位并行输出有效
1 0 1 0 0
高 8 位并行输出有效
1 0 1 0 1
低 4 位加上尾随 4个 0
有效