Lecture5有限状态机.ppt
《Lecture5有限状态机.ppt》由会员分享,可在线阅读,更多相关《Lecture5有限状态机.ppt(50页珍藏版)》请在装配图网上搜索。
2020 4 16 Longman 1 有限状态机FiniteStateMachine 2020 4 16 Longman 2 例 计数器设计 设计一电路 包含基4计数器 和译码输出模块 计数器的输出 Present value 从0到3循环 当计数值为2时 译码输出 DataOut 为 1 否则输出 0 2020 4 16 Longman 3 00 0 01 0 10 1 11 0 2020 4 16 Longman 4 00 0 01 0 10 1 11 0 扩展一个输入端din 当din 1时计数器递增计数 当din 0时计数器递减计数 2020 4 16 Longman 5 再将计数器修改成一个状态转换器 状态为S0 S1 S2 S3 每个状态的取值根据具体情况而定 比如S0 00 S1 11 S3 01 S4 10 2020 4 16 Longman 6 再将计数器修改成一个状态转换器 状态为S0 S1 S2 S3 每个状态的取值根据具体情况而定 比如S0 00 S1 11 S3 01 S4 10 2020 4 16 Longman 7 现在我们得到了一个比较通用的时序电路 这种电路统称为状态机 StateMachine 2020 4 16 Longman 8 有限状态机概述 数字系统控制部分的每一个控制态可以看作一种状态 与每一个控制态相关的转换条件指定了当前状态的下一个状态和输出 根据有限状态机的输出与当前状态与当前输入的关系 可以分成Moore型和Mealy型两种类型的有限状态机 2020 4 16 Longman 9 Moore状态机和Mealy状态机 Moore状态机的输出只与当前状态有关 2020 4 16 Longman 10 Moore状态机和Mealy状态机 Mealy状态机的输出与当前状态机及当前输入信号有关 2020 4 16 Longman 11 状态机的表示方法 状态转换表算法流程图状态转换图 这是最流行的表示方法 2020 4 16 Longman 12 状态转换图 状态1 状态4 状态2 状态3 入 出 入 入 入 出 出 出 Moore 条件控制定序 直接控制定序 2020 4 16 Longman 13 状态转换图 状态1 状态4 状态2 状态3 入 出 入 出 入 出 入 出 出 Mealy 条件控制定序 直接控制定序 2020 4 16 Longman 14 用VHDL描述状态机的组成 一个用来描述有限状态机功能的VHDL语言程序中应该包含以下几个内容 1 至少包括一个状态信号 它们用来指定有限状态机的状态 2 状态转移指定和输出指定 它们对应于控制单元中与每个控制步有关的转移条件 3 时钟信号 它一般是用来进行同步的 4 同步或异步复位信号 2020 4 16 Longman 15 状态机的VHDL描述方式 1 单进程描述方式 单进程描述方式就是指在VHDL语言程序的结构体中 使用一个进程语句来描述有限状态机中的次态逻辑 状态寄存器和输出逻辑 2 双进程描述方式 一个进程语句用来描述有限状态机中次态逻辑 状态寄存器和输出逻辑中的任何两个 另外一个进程则用来描述有限状态机剩余的功能 3 三进程描述方式 一个进程用来描述有限状态机中的次态逻辑 一个进程用来描述有限状态机中的状态寄存器 另外一个进程用来描述有限状态机中的输出逻辑 2020 4 16 Longman 16 状态机的VHDL描述方式 2020 4 16 Longman 17 存储控制器 设计一个存储控制器 它的具体要求为 1 存储控制器能够根据微处理器的读周期或者写周期 分别对存储器输出写使能信号we和读使能信号oe 2 存储控制器的输入信号有3个 微处理器的准备就绪信号ready 微处理器的读写信号read write和时钟信号clk 2020 4 16 Longman 18 存储控制器 列出当前状态和输出值的关系 2020 4 16 Longman 19 建立状态转换表 列出次态和转换条件 2020 4 16 Longman 20 利用VHDL语言进行状态机描述所有状态均可以表达为CASE WHEN结构中的一条语句 状态的转移通过if then else语句实现 CASEpresent stateISWHENidle 输出量 IFELSEENDIF 2020 4 16 Longman 21 有些状态的转换中 在条件满足时 转换到下一个状态 否则保持原来的状态不变 这种情况对应着IF THEN ELSE的两个分支 在这种情况下 ELSE分支并不是必需的 但是缺少ELSE分支 会导致额外的存储器 状态转换 2020 4 16 Longman 22 状态描述的步骤 对每一个状态建立一项CASE语句的分支WHEN状态名 确定输出变量通过IF THEN ELSE语句指定相应的次态 2020 4 16 Longman 23 例casepresent stateis CASE分支whenidle oe 0 we 0 确定输出变量if ready 1 then 确定次态next state decision elsenext state idle endif 2020 4 16 Longman 24 例 三进程描述方式1 ARCHITECTUREfsmOFmemory enableISTYPEstate typeIS idle decision read write SIGNALpresent state next state state type BEGINnextstate logic PROCESS present state ready read write BEGINCASEpresent stateISWHENidle IF ready 1 THENnext state decision ELSEnext state idle ENDIF ENDCASE ENDPROCESSnextstate logic 2020 4 16 Longman 25 例 三进程描述方式2 state register PROCESS clk BEGINIF RISING EDGE clk THENpresent state next state ENDIF ENDPROCESSstate registe 2020 4 16 Longman 26 例 三进程描述方式3 output logic PROCESS present state BEGINCASEWHENidle wewewewe 1 oe 0 ENDCASE ENDPROCESSoutput logic 2020 4 16 Longman 27 任务1 空调控制器 2020 4 16 Longman 28 任务1 空调控制器 2020 4 16 Longman 29 任务1 空调控制器 状态转换表 2020 4 16 Longman 30 状态机的应用设计 例子 设计一个二进制序列检测器 当检测到10110序列时 就输出1 一个时钟周期的脉冲 其他情况下输出0 规定检测到一次之后 检测器复位到最初始的状态 重新从头检测 如下所示 输入 01101101101100 输出 00000001000001 2020 4 16 Longman 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 如何保证状态机在初始时状态为s0 问题2 在状态机跑飞 即脱离有效状态 s0 s5 时 如何使状态机能恢复工作 Sx 0 2020 4 16 Longman 32 波形 波形如下图所示 问题 如果需要将输出脉冲往前推一个时钟周期 该如何修改设计 1 0 1 1 0 1 0 1 1 0 s1 s2 s3 s4 s5 s0 输入 时钟 输出 当前状态 发现当当前壮态为s4 并且输入为0时 输出为1 2020 4 16 Longman 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 0 0 1 0 1 1 0 1 0 1 1 0 s1 s2 s3 s4 s5 s0 0 0 1 s0 2020 4 16 Longman 34 状态机的代码实现 状态定义ArchitecturertlofSynis 其他信号定义 TypeSynFsmStateis s0 s1 s2 s3 s4 s5 SignalSynCst SynNst SynFsmState Begin 结构体 Endrtl 2020 4 16 Longman 35 状态机的代码实现 状态寄存器进程描述 状态寄存器 输出译码 下一状态译码 当前状态 输出 下一状态 输入 时钟clk 2020 4 16 Longman 36 状态寄存器进程描述 Process clk Reset Beginif Reset 1 thenSynCst S0 初始状态 elsif clk eventandclk 1 thenSynCst SynNst 状态转换 endif Endprocess 2020 4 16 Longman 37 状态机的代码实现 状态转换进程描述 状态寄存器 输出译码 下一状态译码 当前状态 输出 下一状态 输入 时钟clk 2020 4 16 Longman 38 状态转换进程描述 Process SynCst din BegincaseSynCstiswhens0 whens1 whens5 Endcase Endprocess if din 1 thenSynNst s1 elseSynNst s0 endif whenothers SynNst s0 2020 4 16 Longman 39 状态机的代码实现 输出进程描述 状态寄存器 输出译码 下一状态译码 当前状态 输出 下一状态 输入 时钟clk 2020 4 16 Longman 40 输出进程描述 Process SynCst BegincaseSynCstiswhens0 whens1 whens5 whenothers Endcase Endprocess Moore Mealy Dout 0 Dout 0 Dout 0 if din 1 thenelseendif din 2020 4 16 Longman 41 任务3 交通灯控制器 模拟显示十字路口两个方向的交通通行情况 两个方向均用红 黄 绿灯指示实际状态 用LED同时显示两个方向状态的时间 时间计数方式为倒计数方式 技术参数为绿 红 50秒 黄 红 5秒 红 绿 30秒和红 黄 5秒 2020 4 16 Longman 42 方法 有限状态机 2020 4 16 Longman 43 状态机 采用双进程描述方式次态逻辑和输出逻辑放在一个进程中实现 状态寄存器在另一个进程中实现 从一个状态转换到另外一个状态 需要经过一段时间 这段时间的结束将导致次态变成现态 2020 4 16 Longman 44 关于计数器 设置东西 南北两个计数器计数器的初值在状态转换时设置计数器采用倒计数方式计数结束 EOC 信号将触发状态寄存器进程的执行计数的结果将被显示出来 2020 4 16 Longman 45 状态转换的条件 计数器值为0 使得EOC 1 由于有两个计数器 因此有四 三 种情况 分别对应状态转换的情况 2020 4 16 Longman 46 程序组成 结构体有三个进程状态转换和输出状态寄存器计数器及译码 计数器 状态寄存器 次态逻辑和输出 计数初值 CLK 计数值 EOC 次态 现态 红绿灯显示 2020 4 16 Longman 47 任务3 密码锁 采用三位十进制密码 密码用DIP开关确定 必要时可以更换 系统通电后必须关上门并按动SETUP键后方投入运行 运行时标志开门的灯或警报灯 警铃 皆不工作 系统处于安锁状态 2020 4 16 Longman 48 任务3 密码锁 开锁过程如下 按启动键 START 启动开锁程序 此时系统内部处于初始状态 依次键入3个十进制码 按开门键 OPEN 准备开门 若按上述程序执行且拨号正确 则开门继电器工作 绿灯LO亮 若按错密码或未按上述程序执行 则按动开门键OPEN后报警装置鸣叫 单频 红灯LA亮 开锁处理事务完毕后 应将门关上 按SETUP键 使系统重新入安锁状态 如在报警 按SETUP或START应不起作用 应另用一内部I SETUP键才能是系统进入安锁状态 2020 4 16 Longman 49 任务3 密码锁 使用者如按错号码 可在按OPEN键之前按START键重新启动开锁程序号码0 9 START OPEN均用按键产生 2020 4 16 Longman 50 任务 十进制计数 00000 99999三位显示 一位档位显示- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Lecture5 有限状态机
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文