Lecture5有限状态机.ppt

上传人:小飞机 文档编号:6510885 上传时间:2023-11-07 格式:PPT 页数:50 大小:335.50KB
返回 下载 相关 举报
Lecture5有限状态机.ppt_第1页
第1页 / 共50页
Lecture5有限状态机.ppt_第2页
第2页 / 共50页
Lecture5有限状态机.ppt_第3页
第3页 / 共50页
Lecture5有限状态机.ppt_第4页
第4页 / 共50页
Lecture5有限状态机.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《Lecture5有限状态机.ppt》由会员分享,可在线阅读,更多相关《Lecture5有限状态机.ppt(50页珍藏版)》请在三一办公上搜索。

1、2023/11/7,1,有限状态机Finite State Machine,2023/11/7,2,例:计数器设计,设计一电路,包含基4计数器,和译码输出模块。计数器的输出(Present_value)从0到3循环;当计数值为2时,译码输出(DataOut)为“1”,否则输出“0”。,2023/11/7,3,00/0,01/0,10/1,11/0,2023/11/7,4,00/0,01/0,10/1,11/0,扩展一个输入端din,当din=1时计数器递增计数;当din=0时计数器递减计数。,2023/11/7,5,再将计数器修改成一个状态转换器,状态为S0,S1,S2,S3。每个状态的取值根

2、据具体情况而定。比如S0=00,S1=11,S3=01,S4=10。,2023/11/7,6,再将计数器修改成一个状态转换器,状态为S0,S1,S2,S3。每个状态的取值根据具体情况而定。比如S0=00,S1=11,S3=01,S4=10。,2023/11/7,7,现在我们得到了一个比较通用的时序电路,这种电路统称为状态机(State Machine)。,2023/11/7,8,有限状态机概述,数字系统控制部分的每一个控制态可以看作一种状态,与每一个控制态相关的转换条件指定了当前状态的下一个状态和输出。根据有限状态机的输出与当前状态与当前输入的关系,可以分成Moore型和Mealy型两种类型的

3、有限状态机。,2023/11/7,9,Moore状态机和Mealy状态机,Moore状态机的输出只与当前状态有关,2023/11/7,10,Moore状态机和Mealy状态机,Mealy状态机的输出与当前状态机及当前输入信号有关,2023/11/7,11,状态机的表示方法,状态转换表算法流程图状态转换图,这是最流行的表示方法,2023/11/7,12,状态转换图,状态1,状态4,状态2,状态3,入,/出,入,入,入,/出,/出,/出,Moore,条件控制定序,直接控制定序,2023/11/7,13,状态转换图,状态1,状态4,状态2,状态3,入/出,入/出,入/出,入/出,/出,Mealy,条

4、件控制定序,直接控制定序,2023/11/7,14,用VHDL描述状态机的组成,一个用来描述有限状态机功能的VHDL语言程序中应该包含以下几个内容:(1)至少包括一个状态信号,它们用来指定有限状态机的状态;(2)状态转移指定和输出指定,它们对应于控制单元中与每个控制步有关的转移条件;(3)时钟信号,它一般是用来进行同步的;(4)同步或异步复位信号。,2023/11/7,15,状态机的VHDL描述方式,(1)单进程描述方式:单进程描述方式就是指在VHDL语言程序的结构体中,使用一个进程语句来描述有限状态机中的次态逻辑、状态寄存器和输出逻辑。(2)双进程描述方式:一个进程语句用来描述有限状态机中次

5、态逻辑、状态寄存器和输出逻辑中的任何两个;另外一个进程则用来描述有限状态机剩余的功能。(3)三进程描述方式:一个进程用来描述有限状态机中的次态逻辑;一个进程用来描述有限状态机中的状态寄存器;另外一个进程用来描述有限状态机中的输出逻辑。,2023/11/7,16,状态机的VHDL描述方式,2023/11/7,17,存储控制器,设计一个存储控制器,它的具体要求为:(1)存储控制器能够根据微处理器的读周期或者写周期,分别对存储器输出写使能信号we和读使能信号oe;(2)存储控制器的输入信号有3个:微处理器的准备就绪信号ready、微处理器的读写信号read_write和时钟信号clk。,2023/1

6、1/7,18,存储控制器,列出当前状态和输出值的关系,2023/11/7,19,建立状态转换表,列出次态和转换条件,2023/11/7,20,利用VHDL语言进行状态机描述所有状态均可以表达为CASE-WHEN结构中的一条语句。状态的转移通过if-then-else语句实现。CASE present_state IS WHEN idle=输出量;IF ELSE END IF;,2023/11/7,21,有些状态的转换中,在条件满足时,转换到下一个状态,否则保持原来的状态不变。这种情况对应着IF-THEN-ELSE的两个分支。在这种情况下,ELSE分支并不是必需的。但是缺少ELSE分支,会导致额

7、外的存储器。,状态转换,2023/11/7,22,状态描述的步骤:对每一个状态建立一项CASE语句的分支 WHEN 状态名=确定输出变量通过IF-THEN-ELSE语句指定相应的次态。,2023/11/7,23,例case present_state is-CASE分支when idle=oe=0;we=0;-确定输出变量if(ready=1)then-确定次态next_state=decision;elsenext_state=idle;end if;,2023/11/7,24,例:三进程描述方式1,ARCHITECTURE fsm OF memory_enable ISTYPE state

8、_type IS(idle,decision,read,write);SIGNAL present_state,next_state:state_type;BEGINnextstate_logic:PROCESS(present_state,ready,read_write)BEGINCASE present_state ISWHEN idle=IF(ready=1)THENnext_state=decision;ELSEnext_state=idle;END IF;END CASE;END PROCESS nextstate_logic;,2023/11/7,25,例:三进程描述方式2,st

9、ate_register:PROCESS(clk)BEGIN IF(RISING_EDGE(clk)THEN present_state=next_state;END IF;END PROCESS state_registe,2023/11/7,26,例:三进程描述方式3,output_logic:PROCESS(present_state)BEGIN CASE WHEN idle=we wewewe=1;oe=0;END CASE;END PROCESS output_logic,2023/11/7,27,任务1:空调控制器,2023/11/7,28,任务1:空调控制器,2023/11/7,

10、29,任务1:空调控制器,状态转换表,2023/11/7,30,状态机的应用设计,例子:设计一个二进制序列检测器,当检测到10110序列时,就输出1(一个时钟周期的脉冲)。其他情况下输出0。规定检测到一次之后,检测器复位到最初始的状态,重新从头检测。如下所示:,输入:01101101101100,输出:00000001000001,2023/11/7,31,状态转换图设计(Moore),1,0,1,1,0,S0/0,S1/0,S2/0,S3/0,S4/0,S5/1,Reset,1,1,0,0,1,1,0,1,0,0,1,0,1,0,1,1,0,s1,s2,s3,s4,s5,s0,问题1:如何保

11、证状态机在初始时状态为s0?,问题2:在状态机跑飞,即脱离有效状态(s0s5)时,如何使状态机能恢复工作,Sx/0,2023/11/7,32,波形,波形如下图所示,问题:如果需要将输出脉冲往前推一个时钟周期,该如何修改设计?,1,0,1,1,0,1,0,1,1,0,s1,s2,s3,s4,s5,s0,输入,时钟,输出,当前状态,发现当当前壮态为s4,并且输入为0时,输出为1。,2023/11/7,33,状态转换图设计(Mealy),S0,S1,S2,S3,S4,S5,Reset,1,0,0,1,1,0,1,0,0,1,0,1,sX,/0,/0,/0,/0,/0,/0,/0,/0,/0,/1,/

12、0,/0,1,0,1,1,0,1,0,1,1,0,s1,s2,s3,s4,s5,s0,/0,0/1,s0,2023/11/7,34,状态机的代码实现,状态定义Architecture rtl of Syn is-其他信号定义。Type SynFsmState is(s0,s1,s2,s3,s4,s5);Signal SynCst,SynNst:SynFsmState;Begin-结构体。End rtl;,2023/11/7,35,状态机的代码实现,状态寄存器进程描述,状态寄存器,输出译码,下一状态译码,当前状态,输出,下一状态,输入,时钟clk,2023/11/7,36,状态寄存器进程描述,P

13、rocess(clk,Reset)Begin if(Reset=1)then SynCst=S0;-初始状态。elsif(clkevent and clk=1)then SynCst=SynNst;-状态转换。end if;End process;,2023/11/7,37,状态机的代码实现,状态转换进程描述,状态寄存器,输出译码,下一状态译码,当前状态,输出,下一状态,输入,时钟clk,2023/11/7,38,状态转换进程描述,Process(SynCst,din)Begin case SynCst is when s0=when s1=,when s5=End case;End proc

14、ess;,if(din=1)then SynNst=s1;else SynNst=s0;end if;,when others=SynNst=s0;,2023/11/7,39,状态机的代码实现,输出进程描述,状态寄存器,输出译码,下一状态译码,当前状态,输出,下一状态,输入,时钟clk,2023/11/7,40,输出进程描述,Process(SynCst)Begin case SynCst is when s0=when s1=,when s5=when others=End case;End process;,Moore,Mealy,Dout=0;,Dout=0;,Dout=0,if(din

15、=1)then else end if;,din),2023/11/7,41,任务3:交通灯控制器,模拟显示十字路口两个方向的交通通行情况。两个方向均用红、黄、绿灯指示实际状态。用LED同时显示两个方向状态的时间。时间计数方式为倒计数方式。技术参数为绿(红)50秒、黄(红)5秒、红(绿)30秒和红(黄)5秒。,2023/11/7,42,方法:有限状态机,2023/11/7,43,状态机,采用双进程描述方式次态逻辑和输出逻辑放在一个进程中实现,状态寄存器在另一个进程中实现。从一个状态转换到另外一个状态,需要经过一段时间,这段时间的结束将导致次态变成现态;,2023/11/7,44,关于计数器,设

16、置东西、南北两个计数器计数器的初值在状态转换时设置计数器采用倒计数方式计数结束(EOC)信号将触发状态寄存器进程的执行计数的结果将被显示出来。,2023/11/7,45,状态转换的条件,计数器值为0(使得EOC=1)由于有两个计数器,因此有四(三)种情况,分别对应状态转换的情况。,2023/11/7,46,程序组成,结构体有三个进程状态转换和输出状态寄存器计数器及译码,计数器,状态寄存器,次态逻辑和输出,计数初值,CLK,计数值,EOC,次态,现态,红绿灯显示,2023/11/7,47,任务3:密码锁,采用三位十进制密码,密码用DIP开关确定,必要时可以更换。系统通电后必须关上门并按动SETU

17、P键后方投入运行,运行时标志开门的灯或警报灯(警铃)皆不工作,系统处于安锁状态。,2023/11/7,48,任务3:密码锁,开锁过程如下:按启动键(START)启动开锁程序,此时系统内部处于初始状态。依次键入3个十进制码。按开门键(OPEN)准备开门。若按上述程序执行且拨号正确,则开门继电器工作,绿灯LO亮。若按错密码或未按上述程序执行,则按动开门键OPEN后报警装置鸣叫(单频),红灯LA亮。开锁处理事务完毕后,应将门关上,按SETUP键,使系统重新入安锁状态。(如在报警,按SETUP或START应不起作用,应另用一内部I_SETUP键才能是系统进入安锁状态)。,2023/11/7,49,任务3:密码锁,使用者如按错号码,可在按OPEN键之前按START键重新启动开锁程序 号码09、START、OPEN均用按键产生,2023/11/7,50,任务,十进制计数:0000099999三位显示+一位档位显示,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号