- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
EDA课程 实验八 状态机逻辑电路设计 在数字系统中,有限状态机(FSM,Finite State Machine)是一类十分重要的时序电路。微控制器的核心就是FSM。因此学习FSM的原理及设计方法对于学习数字系统设计和理解计算机原理都有重要意义。 本章首先概要介绍FSM的相关理论知识,通过典型实例说明FSM的设计方法。 思考一下电梯运动控制过程? 电梯从一楼到顶楼是一系列楼层,电梯到达每一层要显示该层楼层信息,还要由乘坐人控制去那一层,在经过的楼层还要判断是否有相同方向的人乘坐,这一系列控制判断过程如何设计呢? 由输入信号检测010序列Verilong程序 mealy型状态机仿真结果 给定din检测结果 乘法器状态机Verilog程序 乘法器状态机Verilog程序 仿真结果 * EDA课组 一、实验目的: 1、了解状态机逻辑电路设计原理及特点; 2、学习使用状态机逻辑电路设计方法。 二、实验内容 2、通过仿真软件进行验证仿真 。 1、 设计两种典型状态机逻辑电路系统; 1、FSM概念 三、实验原理 有限状态机由输入和输出和具有记忆功能的寄存器组成,寄存器用于寄存状态机内部状态,也称状态寄存器。 状态机的下一个状态不仅与输入信号有关,还与该寄存器的当前状态有关,因此有限状态机可看作是组合逻辑与时序逻辑的一种组合。其中的时序逻辑功能是存储有限状态机的内部状态;而组合逻辑又可分为次态产生逻辑和输出逻辑两部分,次态产生逻辑的功能是确定有限状态机的下一个状态,输出逻辑功能是确定有限状态机的输出。 由于FSM的描述较为复杂,因此不能使用原理图方法进行描述,而必须采用Verilog HDL语言进行行为级设计。 2、FSM组成 一层 二层 三层 四层 N层 将整个电梯控制过程运行状态分解为N个状态,在每个状态下决定下一步如何控制,这就是将复杂状态的运动过程分解为一系列状态过程,这就是状态机设计思想。 有限状态机是一个广义的时序电路,它能将复杂逻辑分解为众多状态来完成,使复杂逻辑层次分明,是设计复杂电路的方法。 根据输入与输出机状态之间的关系,状态机分为两类:摩尔型(moore)状态机和米里型(Mealy)。 摩尔型(Moore)状态机 米里型(Mealy)状态机 3、FSM原理框图 三、实验步骤 1、序列检测器的设计 序列检测器是一种用来监测一组或多组序列信号的电路,在数据通信、雷达、遥感、遥测等领域中广泛应用,主要用于检测同步识别标志。下面通过Mealy型状态机设计由输入信号中检测010序列,状态编码采用格雷编码。 din clk reset dout s0 s2 s1 1/0 0/1 1/0 1/0 0/0 0/0 框图 状态图 状态表 s 下一状态 din=0 din=1 s0=00 s1 ,0 s0 ,0 s1=01 s1 ,0 s2 ,0 s2=11 s1 ,1 s0 ,0 din 001010101 module mealyfsm(clk,reset,din,dout, cs_state,ns_state); output dout; output [1:0] cs_state,ns_state; input clk,reset,din; reg dout; //用格雷码编码声明状态值 parameter [1:0] s0=2b00,s1=2b01,s2=2b11; reg [1:0]cs,ns; assign cs_state=cs,ns_state=ns; always@(posedge clk,posedge reset)begin if(reset==1b1) //异步复位,高电平有效 cs=s0; else cs=ns; end //次态计算及输出信号产生, always@(cs,din) case(cs) s0:begin dout=1b0; if(din===1bx)ns=s0; else ns=(din)?s0:s1; end s1:begin dout=1b0; ns=(!din)?s1:s2; end s2:begin dout=(din)?1b0:1b1; ns=(din)?s0:s1; end default:begin dout=1b0; ns=s0; end endcase end
文档评论(0)