资源描述:
《实验八 状态机逻辑电路设计.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、EDA课程实验八状态机逻辑电路设计EDA课组一、实验目的:1、了解状态机逻辑电路设计原理及特点;2、学习使用状态机逻辑电路设计方法。二、实验内容2、通过仿真软件进行验证仿真。1、设计两种典型状态机逻辑电路系统;在数字系统中,有限状态机(FSM,FiniteStateMachine)是一类十分重要的时序电路。微控制器的核心就是FSM。因此学习FSM的原理及设计方法对于学习数字系统设计和理解计算机原理都有重要意义。本章首先概要介绍FSM的相关理论知识,通过典型实例说明FSM的设计方法。1、FSM概念三
2、、实验原理有限状态机由输入和输出和具有记忆功能的寄存器组成,寄存器用于寄存状态机内部状态,也称状态寄存器。状态机的下一个状态不仅与输入信号有关,还与该寄存器的当前状态有关,因此有限状态机可看作是组合逻辑与时序逻辑的一种组合。其中的时序逻辑功能是存储有限状态机的内部状态;而组合逻辑又可分为次态产生逻辑和输出逻辑两部分,次态产生逻辑的功能是确定有限状态机的下一个状态,输出逻辑功能是确定有限状态机的输出。由于FSM的描述较为复杂,因此不能使用原理图方法进行描述,而必须采用VerilogHDL语言进行行为
3、级设计。2、FSM组成思考一下电梯运动控制过程?电梯从一楼到顶楼是一系列楼层,电梯到达每一层要显示该层楼层信息,还要由乘坐人控制去那一层,在经过的楼层还要判断是否有相同方向的人乘坐,这一系列控制判断过程如何设计呢?一层二层三层四层N层将整个电梯控制过程运行状态分解为N个状态,在每个状态下决定下一步如何控制,这就是将复杂状态的运动过程分解为一系列状态过程,这就是状态机设计思想。有限状态机是一个广义的时序电路,它能将复杂逻辑分解为众多状态来完成,使复杂逻辑层次分明,是设计复杂电路的方法。根据输入与输出
4、机状态之间的关系,状态机分为两类:摩尔型(moore)状态机和米里型(Mealy)。摩尔型(Moore)状态机米里型(Mealy)状态机3、FSM原理框图三、实验步骤1、序列检测器的设计序列检测器是一种用来监测一组或多组序列信号的电路,在数据通信、雷达、遥感、遥测等领域中广泛应用,主要用于检测同步识别标志。下面通过Mealy型状态机设计由输入信号中检测010序列,状态编码采用格雷编码。dinclkresetdouts0s2s11/00/11/01/00/00/0框图状态图状态表s下一状态din=0
5、din=1s0=00s1,0s0,0s1=01s1,0s2,0s2=11s1,1s0,0din001010101由输入信号检测010序列Verilong程序modulemealyfsm(clk,reset,din,dout,cs_state,ns_state);outputdout;output[1:0]cs_state,ns_state;inputclk,reset,din;regdout;//用格雷码编码声明状态值parameter[1:0]s0=2'b00,s1=2'b01,s2=2'b11
6、;reg[1:0]cs,ns;assigncs_state=cs,ns_state=ns;always@(posedgeclk,posedgereset)beginif(reset==1'b1)//异步复位,高电平有效cs<=s0;elsecs<=ns;end//次态计算及输出信号产生,always@(cs,din)case(cs)s0:begindout=1'b0;if(din===1'bx)ns=s0;elsens=(din)?s0:s1;ends1:begindout=1'b0;ns=(!d
7、in)?s1:s2;ends2:begindout=(din)?1'b0:1'b1;ns=(din)?s0:s1;enddefault:begindout=1'b0;ns=s0;endendcaseendmodulemealy型状态机仿真结果可见输出dout和次态ns均由当前状态cs和输入din共同决定。这是mealy状态机特点。din001010101din输入数据频率要小于时钟频率才能准确检测相应数据位!s0s2s11/00/11/01/00/00/0给定din(01000101)检测结果01
8、001001dout显示的脉冲都是在检测最后一个数对应时钟上升沿时结束,当输入的数据在一个时钟内反复变化将导致时钟周期内的次态跟着变化,而现态没有变化,这就检测不出所要的数据。时钟周期相当于数据检测的时间分辨率。2、二进制乘法器设计:实现两个8位二进制数的乘法运算,被乘数(mcnd)和乘数(mplr)存放在寄存器mcnd_temp和acc[7:0]中,乘积为16进制数,运算完后存放在16位寄存器acc[15:0]中。shiftaddcomp1initcount<8递增countac