第 10 章 有限状态机 FSM
201
WHEN st2 => comb_outputs <= "10"; --以下依次类推
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
图 10-1 s_machine 工作示意图
图 10-2 AD574 工作时序
表 10-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 有效