第八章-状态机设计_第1页
第八章-状态机设计_第2页
第八章-状态机设计_第3页
第八章-状态机设计_第4页
第八章-状态机设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

第五章有限状态机的VHDL设计主要内容有限状态机的基本概念一般有限状态机的设计摩尔状态机设计米立状态机设计无限状态机用于混沌系统非线性系统本书不要求8.1有限状态机的基本概念8.1.1有限状态机的基本结构和功能

有限状态机(FiniteStateMachine,简称FSM)是数字逻辑电路以及数字系统的重要组成部分,尤其应用于数字系统核心部件的设计,以实现高效率高可靠性的逻辑控制。有限状态机实现了以下两个基本功能:根据当前状态和输入条件决定状态机的内部状态转换。根据当前状态和输入条件确定产生输出信号序列。8.1有限状态机的基本概念(续)8.1.2状态机的状态编码有限状态机设计是基于状态描述的,因此首先必须对系统中的每一个工作状态有一个合理的表达。对于设计者而言,为了表达简捷方便通常使用符号化状态机。二进制编码方案:是用N位二进制数,表示M个工作状态,当然必须满足2N大于等于M。一位热码编码方案(独热码编码):用N位二进制数表示N个状态,每一位编码对应一个触发器,状态机中的每个状态都由其中一个触发器的状态来表示。例:二进制101(5)转换为独热码为11111(5个)1101111118.1.3有限状态机的技术优势设计方案相对固定,结构模式简单,可定义符号化枚举类型的状态。状态机的VHDL描述层次分明,结构清晰,易读易懂。基于有限状态机技术设计的控制器其工作速度大大优于CPU。基于有限状态机技术设计的控制器其可靠性也优于CPU。二进制:速度慢,位数少,节省资源独热码:快多浪费CASE语句:并行处理,程序最稳定,能用则用=:赋值=》:8.2一般有限状态机的设计8.2.1一般有限状态机的VHDL组成

说明部分:主要是设计者使用TYPE语句定义新的数据类型,如:

TYPEstatesIS(st0,st1,st2,st3,st4,st5);

SIGNALpresent_state,next_state:states;主控时序逻辑部分:任务是负责状态机运转和在外部时钟驱动下实现内部状态转换的进程。时序进程的实质是一组触发器,因此,该进程中往往也包括一些清零或置位的输入控制信号,如Reset信号。主控组合逻辑部分:任务是根据状态机外部输入的状态控制信号(包括来自外部的和状态机内部的非进程的信号)和当前的状态值current_state来确定下一状态next_state的取值内容,以及对外部或对内部其他进程输出控制信号的内容。辅助逻辑部分:辅助逻辑部分主要是用于配合状态机的主控组合逻辑和主控时序逻辑进行工作,以完善和提高系统的性能。8.2.2一般有限状态机的设计示例LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYtwo_process_state_machineIS(tpsmIS)

PORT(clk,reset:INSTD_LOGIC; state_inputs:INSTD_LOGIC; comb_outputs:OUTSTD_LOGIC_VECTOR(0TO1));ENDENTITYtwo_process_state_machine;

ARCHITECTURE

behv

OFtwo_process_state_machineIS

TYPEstatesIS(st0,st1,st2,st3);--定义states为枚举型数据类型,构造符号化状态机 SIGNALcurrent_state,next_state:states;BEGINREG:PROCESS(reset,clk)--时序逻辑进程

BEGIN

IFreset='1'THEN--异步复位

current_state<=st0;

ELSIF

clk='1'AND

clk'EVENT

THEN--出现时钟上升沿时进行状态转换

current_state<=next_state;

ENDIF;

ENDPROCESS;例8.1二进程一般状态机的描述。8.2.2一般有限状态机的设计示例(续1)COM:PROCESS(current_state,state_inputs)--组合逻辑进程 BEGIN

CASEcurrent_stateIS

WHENst0=>comb_outputs<="00";--系统输出及其初始化

IFstate_inputs='0'THEN--根据外部输入条件决定状态转换方向

next_state<=st0;

ELSEnext_state<=st1;

ENDIF;

WHENst1=>comb_outputs<="01";

IFstate_inputs=‘0’THEN

next_state<=st1;

ELSEnext_state<=st2;

ENDIF;

WHENst2=>comb_outputs<="10";

IFstate_inputs=‘0’THEN

next_state<=st2;

ELSEnext_state<=st3;

ENDIF;

WHENst3=>comb_outputs<="11";

IFstate_inputs=‘0’THEN

next_state<=st3;

ELSEnext_state<=st0;

ENDIF;

ENDCASE; ENDPROCESS;ENDARCHITECTURE

behv;例8.1二进程一般状态机的描述。8.2.2一般有限状态机的设计示例(续2)例8.1二进程一般状态机的描述。例8.1的状态转换图例8.1的时序仿真图例8.1的RTL图8.3摩尔状态机设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYfour_state_moore_state_machineIS PORT(

Clk:INSTD_LOGIC; Input:INSTD_LOGIC; reset :INSTD_LOGIC; output:OUT STD_LOGIC_VECTOR(1DOWNTO0) );ENDENTITY;

ARCHITECTURErtlOFfour_state_moore_state_machineIS --定义枚举类型的状态机

TYPEstate_typeIS(s0,s1,s2,s3); --定义一个信号保存当前工作状态

SIGNALstate:state_type;

从状态机的信号输出方式上看,可以将状态机分为摩尔型(Moore)和米立型(Mealy)状态机。摩尔型有限状态机输出只与当前状态有关,而与输入信号的当前值无关,是严格的现态函数。例8.2四状态摩尔型有限状态机的描述。8.3摩尔状态机设计(续1)BEGIN

PROCESS(clk,reset)

--状态转换的时序进程

BEGIN

IFreset='1'THEN state<=s0;

ELSIF(clk'EVENTandclk='1')THEN

CASEstateIS

WHENs0=> IFinput='1'THEN state<=s1;

ELSE state<=s0;

ENDIF;

WHENs1=> IFinput='1'THEN state<=s2;

ELSE state<=s1;

ENDIF;

WHENs2=> IFinput='1'THEN state<=s3;

ELSE state<=s2;

ENDIF;

WHENs3=> IFinput='1'THEN state<=s0;

ELSE state<=s3;

ENDIF;

ENDCASE;

ENDIF;

ENDPROCESS;

PROCESS(state)

--输出由当前状态唯一决定的组合逻辑进程

BEGIN

CASEstateIS

WHENs0=> output<="00";

WHENs1=> output<="01";

WHENs2=> output<="10";

WHENs3=> output<="11";

ENDCASE;

ENDPROCESS;END

rtl;例8.2四状态摩尔型有限状态机的描述。8.3摩尔状态机设计(续2)例8.2四状态摩尔型有限状态机的描述。例8.2的时序仿真图8.4米立状态机设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYfour_state_mealy_state_machineIS

PORT (

clk :INSTD_LOGIC; input :INSTD_LOGIC; reset :INSTD_LOGIC; output :OUTSTD_LOGIC_VECTOR(1DOWNTO0) );ENDENTITY;

ARCHITECTURE

rtl

OFfour_state_mealy_state_machineIS --定义枚举类型的状态机

TYPEstate_typeIS(s0,s1,s2,s3); --定义一个信号保存当前工作状态

SIGNALstate:state_type;

米立状态机的输出是现态和所有输入的函数,输出随输入变化而随时发生变化。因此,从时序的角度上看,米立状态机属于异步输出的状态机,输出不依赖于系统时钟,也不存在摩尔状态机中输出滞后一个时钟周期来反映输入变化的问题。例8.3四状态米立状态机的描述。8.4米立状态机设计(续1)BEGINREG:PROCESS(clk,reset)

BEGIN

IFreset=‘1’THEN

state<=s0;--高电平有效的系统异步复位

ELSIF(rising_edge(clk))THEN

CASEstateIS

--依据当前状态和输入信号同步决定下一个状态

WHENs0=> IFinput='0'THEN state<=s0;

ELSE state<=s1;

ENDIF;

WHENs1=> IFinput='0'THEN state<=s1;

ELSE state<=s2;

ENDIF;

WHENs2=> IFinput='0'THEN state<=s2;

ELSE state<=s3;

ENDIF;

WHENs3=> IFinput='0'THEN state<=s3;

ELSE state<=s0;

ENDIF;

ENDCASE;

ENDIF;

ENDPROCESS;例8.3四状态米立状态机的描述。8.4米立状态机设计(续2)COM:PROCESS(state,input)

--依据当前状态和输入信号决定输出信号,与时钟无关

BEGIN

CASEstateIS

WHENs0=> IFinput='0'THEN output<="00";

ELSE output<="01";

ENDIF;

WHENs1=> IFinput='0'THEN

温馨提示

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

评论

0/150

提交评论