EDA技术VHDL和FPGA课件6 VHDL有限状态机设计_第1页
EDA技术VHDL和FPGA课件6 VHDL有限状态机设计_第2页
EDA技术VHDL和FPGA课件6 VHDL有限状态机设计_第3页
EDA技术VHDL和FPGA课件6 VHDL有限状态机设计_第4页
EDA技术VHDL和FPGA课件6 VHDL有限状态机设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

为什么要设计有限状态机应用的需要,复杂系统的需要如果我们能设计这样一个电路能记住自己目前所处的状态状态的变化只可能在同一时钟的跳变沿时刻发生,而不可能发生在任意时刻在时钟跳变沿时刻,如输入条件满足则进入下一状态,并记住自己目录所处的状态。否则仍保留原来的状态。在进入不同的状态时刻,对系统的开关阵列做开启或关闭操作。12346.1有限状态机2、有限状态机的基本概念状态机是一种思想方法状态机的本质就是对具有逻辑顺序或时序规律事件的一种描述方法。具有逻辑顺序和时序规律的事件都适合用状态机描述。抛开电路的具体含义,时序电路的通用模型就是有限状态机。什么是有限状态机FSM:FiniteStateMachine应用市场上的电子产品进入非正常状态/(不需要考虑的状态)的可能很多,不可能一一去列举于是采用以“不变应万变”的方式,只考虑需要的状态,不需要的状态不管。需要考虑的状态一一列举出来(有限性Finite),不需要考虑的状态都统一当异常处理(default)1232、有限状态机的基本概念有限状态机三要素FSM:FiniteStateMachine状态(当前状态,下一个状态)输入信号(事件)输出控制信号(相应操作)1232、有限状态机的基本概念用VHDL设计的状态机有多种形式从信号输出方式分:Mealy型状态机和Moore型状态机从结构上分:单进程状态机和多进程状态机从状态表达方式上分:符号化状态机、确定状态编码状态机从编码方式上分:顺序编码状态机、一位热码编码状态机或其他编码方式状态机√√√√3、VHDL一般有限状态机的类型Moore型有限状态机是指那些输出信号仅与当前状态有关的有限状态机,即可以把Moore型有限状态机的输出看成是当前状态的函数。Moore型有限状态机框图:3、VHDL一般有限状态机的类型Mealy型有限状态机是指那些输出信号不仅与当前状态有关,而且还与所有的输入信号有关的有限状态机,即可以把Mealy有限状态机的输出看作当前状态和所有输入信号的函数。可见,Mealy有限状态机要比Moore有限状态机复杂一些。Mealy有限状态机框图:3、VHDL一般有限状态机的类型Moore型和Mealy型有限状态机的区别:Moore型有限状态机仅与当前状态有关,而与输入信号无关;Mealy型有限状态机不但与当前状态有关,而且还与状态机的输入信号有关。3、VHDL一般有限状态机的类型采用何种有限状态机的判别条件:Moore型有限状态机可能要比相应的Mealy型有限状态机需要更多的状态。Moore型有限状态机的输出与当前的输入部分无关,因此当前输入产生的任何效果将会延迟到下一个时钟周期。可见,Moore型状态机的最大优点就是可以将输入部分和输出部分隔离开。对于Mealy型有限状态机来说,由于它的输出是输入信号的函数,因此如果输入信号发生改变,那么输出可以在一个时钟周期内发生改变3、VHDL一般有限状态机的类型单进程状态机整个状态机的描述在一个进程中完成双进程状态机将组合逻辑部分和时序逻辑部分分开描述,放在结构体的说明部分三进程状态机将组合逻辑部分再分为产生次态的组合逻辑部分和产生输出的组合逻辑部分,与时序逻辑部分一起放在结构体的说明部分3、VHDL一般有限状态机的类型1.利用VHDL进行状态机设计利用VHDL语言将时序电路的状态转换关系进行描述。在VHDL中,所有状态均可表达为case_when结构中的一条case语句,而状态的转移可以通过if_then_else语句实现。6.2有限状态机的VHDL程序设计Process(clk)BeginIfclk’eventandclk=‘1’thenCasestateis:When“000”=>If条件1then state<=“001”;Endif;When……Endcase;Endif;Endprocess例1:写出图示状态转换图的VHDL描述LIBRARYieee;USEieee.std_logic_1164.ALL;ENTITYstate_machineISPORT( clk,input,clr:IN

BIT; output: OUTBIT);ENDstate_machine;S0/0S1/1Input=1/output=10/1/output=0ARCHITECTUREbehave_1OFstate_machineISTYPEstate_typeIS(s0,s1);--通常使用枚举类型定义状态机的状态SIGNALstate:state_type;BEGINPROCESS(clk) BEGIN IFclr='1'THENstate<=s0; ELSIF(clk’eventANDclk='1')THEN CASEstateIS WHENs0=>state<=s1; WHENs1=> IFinput=’1'THEN state<=s0; ELSEstate<=s1;ENDIF;S0/0S1/1Input=1/output=10/1/output=0

ENDIF;ENDPROCESS; output<='1'WHEN(state=s1)ELSE'0';ENDbehave_1;S0/0S1/1Input=1/output=10/1/output=0LIBRARYieee;USEieee.std_logic_1164.ALL;ENTITYstate_machineISPORT(clk,reset,A,B: INstd_logic; Y,Z:OUTstd_logic);ENDstate_machine;ARCHITECTUREtest

ofstate_machineIS

TYPE

FSM_ST

IS(s0,s1,s2,s3);

SIGNALcurrent_state,next_state:

FSM_ST

;

Begin……;--通常使用枚举类型定义状态机的状态(1)说明部分2.一般有限状态机的VHDL程序设计用户自定义数据类型定义语句TYPE语句用法如下:TYPE数据类型名IS数据类型定义OF基本数据类型;或TYPE数据类型名IS数据类型定义;以下列出了两种不同的定义方式:TYPEst1ISARRAY(0TO15)OFSTD_LOGIC;数组数据类型TYPEweek

IS(sun,mon,tue,wed,thu,fri,sat);

枚举数据类型TYPEm_stateIS(st0,st1,st2,st3,st4,st5);SIGNALpresent_state,next_state:m_state;布尔数据类型的定义语句是:TYPEBOOLEANIS(FALSE,TRUE);TYPEmy_logicIS('1','Z','U','0');SIGNALs1:my_logic;s1<='Z';符号化状态机:用文字符号表示二进制数。确定化状态机:直接用数值表示。(2)时序进程(PROCESSREG)时序进程是负责状态机运转和在时钟驱动下负责状态转换的进程。2.一般有限状态机的VHDL程序设计BEGINREG:PROCESS(clk,reset)--时序逻辑进程BEGIN IFreset='1'THENcurrent_state<=s0;ELSIFrising_edge(clock)THENcurrent_state<=next_state;--状态转换ENDIF; ENDPROCESSreg;--由信号current_state将当前状态值带出此进程,进入com进程(3)组合进程(PROCESSCOM)

组合进程是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其它非主控的组合或时序进程的信号),或(和)当前状态的状态值确定下一状态(next_state)的取向,即next_state的取值内容,以及确定对外输出或对内部其它组合或时序进程输出控制信号的内容。COM:PROCESS(current_state,A,B)--组合逻辑进程BEGIN

CASEcurrent_stateIS

--确定当前状态的状态值

WHENs0=> IFA=‘0’andB=‘1’THENnext_state<=s1;ELSIFA=‘1’andB=‘0’THENnext_state<=s2;ELSIFA=‘0’andB=‘0’THENnext_state<=s0;ENDIF;

WHENs1=>IFA=‘0’andB=‘0’THENnext_state<=s1;ELSIFA=‘0’andB=‘1’THENnext_state<=s2;ELSIFA=‘1’andB=‘0’THENnext_state<=s0;ENDIF;

WHENs2=>IFA=‘0’andB=‘0’THENnext_state<=s2;ELSEnext_state<=s0;ENDIF;

ENDCASE;ENDPROCESS;--由信号next_state将下一个状态值带出此进程,进入reg进程ENDtest;(4)输出模块输出模块可有可无,需要的话可以用并行赋值语句实现,也可以用进程实现。

信号current_state、next_state在状态机中称为反馈信号,用于进程间的信息传递,实现当前状态的存储和下一个状态的设定等功能。OUTPUT:PROCESS(current_state,A,B)--输出进程BEGIN

CASEcurrent_stateIS

WHENs0=> IFA=‘0’andB=‘1’THEN

Y<=‘0’,Z<=‘0’;ELSIFA=‘1’andB=‘0’THEN

Y<=‘0’,Z<=‘0’;

ELSIFA=‘0’andB=‘0’THEN

Y<=‘0’,Z<=‘0’;ENDIF;

……;

ENDCASE;ENDPROCESS;VHDL状态机中,所有状态均可表达为case_when结构中的一条case语句,而状态的转移可以通过if_then_else语句实现。设计步骤分解分析输入输出端口信号;状态转移图;根据状态转移图进行VHDL语言描述;测试代码编写,仿真;FPGA实现。123456.3状态机应用实例交通灯状态机设计RESET(asynchronous)REDTIMER1YELLOWGREENTIMER1TIMER2TIMER2Y='1'G='1'TIMER3TIMER3R='1'交通灯状态机设计——实体描述LIBRARYieee; USEieee.std_logic_1164.ALL; ENTITYstate_machineISPORT( clock,reset: INstd_logic; timer1,timer2,timer3:INstd_logic; r,y,g: OUTstd_logic); ENDstate_machine;交通灯状态机设计——方案一ARCHITECTURE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论