状态机简述 仪02班 唐毅 000677 范春石000701 常黎000682 田贺祥000698 陈豪000320 王晓路 000678
数字系统的划分
数字系统的划分 数据处理器:接受输入数据,输出输出信号,按照控制信号完成相关计算,并把当前的状态信息送给控制器。 控制器:根据外输入和数据处理器送来的状态信息,给数据处理器发出控制信号。 控制器相当于指挥官,数据处理器相当于士兵。士兵执行指挥官的命令(控制信号),并把当前的情况反应给指挥官。指挥官根据士兵反应的情况发出命令(控制信号)。大家分工明确。
数字系统的划分 数字系统实现一个计算任务,采取操作序列的形式。操作序列有两个重要特性: 1。操作按特定的时间顺序进行,即通过多步计算,一步一步的完成一个计算任务。 2。实现操作取决于某一判断,即根据数据处理器发出的状态变量决定下一个计算任务。
数字系统的划分 各种请求 上/下面有请求、已到达新楼层、本层该不该停等等 控制器 数据处理器 电梯停留、上升、下降、开门、楼层计数 等等 复位信号 上/下面有请求、已到达新楼层、本层该不该停等等 控制器 数据处理器 电梯停留、上升、下降、开门、楼层计数 等等 楼层数的8421码 各种灯的亮灭 如何来让控制器实现一系列的操作序列,我们采用了状态机的思路和编程方法。
功能要求 输入信号:dooro,delay,preclose 输出控制信号:move(门动不动),direction(开,关),counter(开门时间),clear(是否计数状态) 门开始处于初始状态,关着门,默认开门后等待时间时间为4s 收到dooro信号,开始开门 在开始开门到门打开的过程中间,如果有delay输入,则开门后等待时间时间设为5s;如果有preclose,则提前关门;如没有上述输入,则当门打开后开始计时
功能要求 门开期间,如有delay,则计时清0,重计一个5秒。Delay次数不限。若有preclose ,则立即开始关门。若无上述输入,则待4秒(5秒)结束后,开始关门 从开始关门到门关好,如有如有delay,则开门,并按5秒计时。否则,等门关好后,进入初始状态 从开始开门直到门关好,状态都可以改变
难! 原因:直接操控底层,造成分支复杂 如果把一组输出看成一个整体,则少得多 Dooro=0 Y 门动且去开 preclose Opened 门动作且去关 delay 门动作停 delay delay timeup4 开门时间<=5s 开门时间<=5s closed preclose 计时开始 开门计时5 opened 门动作停 Ready<=1 门动作关 计时开始<=0 门动作开 timeup5 preclose preclose delay 门动作去关 closed 门动且去关 门动作停 Ready<=1 门动作去关 计时清0 delay 难! preclose delay 门动作开 timeup5 门动且去关 计时清0 门动去关 原因:直接操控底层,造成分支复杂 如果把一组输出看成一个整体,则少得多
preclose 把一组输出作为一个整体叫做一个状态 开门中 preclose opened delay timeup4 去延时 去开门 动作:动 方向:开 计时:停 preclose opened delay timeup4 去延时 动作:动 方向:开 计时:停 计时时间:5s 去开门 动作:动 方向:开 计时:停 preclose 关着门 动作:停 方向:关 计时:停 计时时间:4s delay 去关门 动作:动 方向:关 计时:停 closed delay opened delay 延时中 动作:停 方向:开 计时:计 timeup5 程序 状态机 dooropen
状态列表 close(关着门)move=0,direction=0,clear=1,count=4 toopen(去开门) move=1,direction=1,clear=0,count=% Open(开着门) move=0,direction=1,clear=0,count=% todelay(去延时) move=1,direction=1,clear=0,count=5 delaying(延时中) move=1,direction=1,clear=0,count=5 Toclose(去关门) move=1,direction=0,clear=1,count=%
状态机 状态机的优点 1每个时钟上沿都转换 状态,步调一致 状态准备器 输入 2避免了直接操控底 层输出,结构清晰 现态 Present State 现态 Next State 次态 框图 输出
状态准备 state_clocked:process(clk,reset) begin if(reset='1')then present_state<=s0; elsif(clk'event and clk='1')then present_state<=next_state; end if; end process state_clocked;
一段例程 Architecture state_machine of door is type statetype is (close,toopen,open,todelay,delaying,toclose); signal present_state,next_state:statetype;(这里 应该枚举所有的状态) Begin case present_state is when close=>move<=‘0’;(停)direction<=‘0’;(关) counter<=‘4s’; (计时设定) clear<=‘1’;(不计数) if(dooro=‘1’)then next_state<=toopen;(下个状态:去开门) else next_state<=close; when toopen=〉 move<=‘1’;(动)direction<=‘1’; (开) clear<=‘0’; (计数) if(opened=‘1’)then next_state<=open; (根据输入信号决定 else(if delay=‘1’)then next_state<=todelay;下个状态) else(if preclose=‘1’)then next_state<=toclose; else next_state<=toopen; …… …… 框图 End case;