版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
有限状态机(finite-statemachine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间转移和动作等行为的数学模型。状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,协调相关信号动作,完成特定操作的控制。在VHDL程序设计的实用时序逻辑系统中,状态机是应用广泛的电路模块,其在运行速度的高效、执行时间的确定性和高可靠性方面都显现出强大的优势。项目6状态机的VHDL程序描述1.状态机状态机是以描述控制特性为主的建模方法,它可以应用于从系统分析到设计的所有阶段。状态机的基本操作有两种:(1)状态机内部状态转换状态机内部状态转换操作使状态机经历一系列状态,下一状态由状态译码器根据当前状态和输入条件决定。(2)产生输出信号序列产生输出信号序列操作是根据当前状态和输入条件确定输出信号,由输出译码器输出信号。典型的状态机有两种:Mealy状态机和Moore状态机。项目6状态机的VHDL程序描述2.一般状态机的VHDL程序描述一般状态机的结构如图6.9所示,状态机的VHDL程序描述通常用枚举类数据类型来定义状态机的状态,使用多进程方式来描述状态机的内部逻辑。通常包括说明部分、主控时序进程、主控组合进程和辅助进程等。项目6状态机的VHDL程序描述图6.9一般状态机的结构结构框图(1)说明部分说明部分一般放在结构体的architecture和begin之间,用枚举型数据类型定义状态机的状态名。(2)主控时序进程主控时序进程是实现状态转换的进程。(3)主控组合进程主控组合进程的功能是状态译码,向外部发出控制信号,确定下一状态的走向。(4)辅助进程辅助进程用于配合状态机工作的组合、时序进程或配合状态机工作的其他时序进程。项目6状态机的VHDL程序描述libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitys_machineisport(clk,reset:instd_logic;
state_inputs:in
std_logic_vector(0to1);
control_outputs:outstd_logic_vector(0to1));endentitys_machine;architecturebehaveofs_machineistypestatesis(S0,S1,S2,S3);--定义states为枚举数据类型signalcurrent_state,next_state:states;beginP1:process(reset,clk)beginifreset='1'thencurrent_state<=S0;elsif
clk='1'andclk'eventthen--上升沿触发current_state<=next_state;--当前态转换为次态endif;endprocessP1;【例6.1】双进程描述的状态机项目6状态机的VHDL程序描述进程P1为主控时序进程,在“clk”上升沿时,状态机的状态由当前态“current_state”向次态“next_state”转变。P2:process(current_state,state_inputs)--主控组合进程begincasecurrent_stateiswhenS0=>control_outputs<="00";--输出当前状态的控制值ifstate_inputs="00"then--根据外部输入的值确定次态的走向
next_state<=S0;else
next_state<=S1;endif;whenS1=>control_outputs<="01";ifstate_inputs="00"then
next_state<=S1;else
next_state<=S2;endif;whenS2=>control_outputs<="10";ifstate_inputs="11"then
next_state<=S2;else
next_state<=S3;endif;whenS3=>control_outputs<="11";ifstate_inputs="11"then
next_state<=S3;else
next_state<=S0;endif;endcase;endprocess;endarchitecturebehave;说明部分:使用type语句定义状态机状态进程P2为主控组合进程;根据当前状态“current_state”与输入信号“state_inputs”确定次态的状态。进程间通过“current_state”、“next_state”信号传递信息。例6.1程序编译后,在QuartusPrime20.1集成环境,选择【Tool】菜单【NetlistViewers】选项【RTLViewer】命令,将产生例6.1描述的状态机的寄存器传输级综合效果图,如图6.10所示。项目6状态机的VHDL程序描述图6.10寄存器传输级综合效果图RTL例6.1程序编译后,在QuartusPrime20.1集成环境,选择【Tool】菜单【NetlistViewers】选项【StateMachineViewer】命令,将产生例6.1描述的状态机的状态转换图,如图6.11所示。项目6状态机的VHDL程序描述图6.11状态机状态转换图例6.1程序的功能仿真结果,如图6.12所示。项目6状态机的VHDL程序描述图6.12状态机功能仿真图从图中可知,状态的转变与输出值的改变,与输入时钟的上升沿同步,与输入信号“state_inputs”不同步。在55ms处,输入信号“state_inputs”由“01”变为“11”,但输出与状态并没有发生改变(control_outputs=10),在70ms“clk”上升沿处,输出状态还是“10”态没有发生改变。这是由于当前态是S2状态,根据程序可知当前态是S2态,输入信号“state_inputs”值为“11”时,状态转换是由S2态转向S2态,因而,状态没有发生改变。3.Moore状态机的VHDL程序描述Moore有限状态机输出只与当前状态有关,与输入信号的当前值无关,是严格的现态函数。Moore有限状态机的典型结构,如图6.13所示。项目6状态机的VHDL程序描述图6.13Moore状态机的典型结构libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitymooreisport(clk,reset:instd_logic;
data_in:in
std_logic;
data_out:outstd_logic_vector(3downto0));endentitymoore;architecturebehaveofmooreistypestates_typeis(S0,S1,S2,S3);--定义states_type为枚举数据类型signalstate:states_type;--声明信号state为states_type数据类型Begin【例6.2】Moore状态机的描述项目6状态机的VHDL程序描述进程P1为主控时序进程,在“clk”上升沿时,状态机的状态转变。P1:process(reset,clk)--主控时序进程beginifreset='0'thenstate<=S0;elsif
clk='1'andclk'eventthen--上升沿触发casestateiswhenS0=>ifdata_in='1'thenstate<=S1;endif;whenS1=>ifdata_in='0'thenstate<=S2;endif;whenS2=>ifdata_in='1'thenstate<=S3;endif;whenS3=>ifdata_in='0'thenstate<=S0;endif;endcase; endif;endprocessP1说明部分:使用type语句定义状态机状态P2:process(state)--主控组合进程begincasestateiswhenS0=>data_out<="0001";--输出当前状态的值whenS1=>data_out<="0010";whenS2=>data_out<="0100";whenS3=>data_out<="1000";endcase;endprocess;endarchitecturebehave;【例6.2】Moore状态机的描述项目6状态机的VHDL程序描述进程P2为主控组合逻辑进程例6.2程序编译后,在QuartusPrime20.1集成环境,选择【Tool】菜单【NetlistViewers】选项【StateMachineViewer】命令,将产生例6.2描述的状态机的状态转换图,如图6.14所示。图6.14状态机状态转换图项目6状态机的VHDL程序描述由图可知,状态机在异步复位后进入S0态(state=S0),在第30ns时clk上升沿处,state=S0,data_in=0(≠1),状态不变,保持处于S0态,输出data_out=0001;在30ns~50ns的一个时钟周期内,一直保持输出信号不变,虽然在40ns处,data_in变为1,但状态并不改变,而是要到50ns时,clk上升沿处才发生状态转变(S0态转变为S1态)。说明了Moore状态机在时钟周期内输入信号发生变化,但输出保持稳定不变,属于同步输出状态机。例6.2程序的功能仿真结果,如图6.15所示。图6.15Moore状态机的仿真结果4.Mealy状态机的VHDL程序描述Mealy状态机的输出是现态和所有输入的函数,随输入变化而随时发生变化,Mealy状态机典型的结构如图6.16所示。从时序上看,Mealy状态机属于异步输出状态机,它不依赖于时钟,状态机的输出在输入发生变化后立即发生。项目6状态机的VHDL程序描述图6.16Mealy状态机的典型结构libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitymealyisport(clk,reset:instd_logic;
data_in:in
std_logic;
data_out:outstd_logic_vector(3downto0));endentitymealy;architecturebehaveofmealyistypestates_typeis(S0,S1,S2,S3);--定义states_type为枚举数据类型signalstate:states_type;begin【例6.3】Mealy状态机的描述项目6状态机的VHDL程序描述P1:process(reset,clk)--主控时序进程beginifreset='0'thenstate<=S0;elsif
clk='1'andclk'eventthen--上升沿触发casestateiswhenS0=>ifdata_in='1'then--根据外部输入的值确定次态的走向state<=S1;endif;whenS1=>ifdata_in='0'thenstate<=S2;endif;whenS2=>ifdata_in='1'thenstate<=S3;endif;whenS3=>ifdata_in='0'thenstate<=S0;endif;endcase; endif;endprocessP1;说明部分:使用type语句定义状态机状态P2:process(state,data_in)--主控组合进程begi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 感染科护理英语查房
- 急性脑卒中病人的护理
- 2024至2030年中国智能压力传感器行业投资前景及策略咨询研究报告
- 中建隧道穿越煤系地层巷道专项施工方案
- 2024至2030年花粉胶囊项目投资价值分析报告
- 2024至2030年管路部件杂质冲洗台项目投资价值分析报告
- 护理人员巴林特小组
- (九年级《语文》课件)专题一
- (九年级《语文》课件)期末专题复习二词语运用习题课件
- 《宝石学与宝石鉴定》教学大纲
- 2024年协议延期约定详细范本版
- 2023年北京市燕山初三二模英语试卷及答案
- 机场视频监控安全防范方案
- GB/T 44843-2024在用自动扶梯和自动人行道安全评估规范
- 2024年秋新人教PEP版3年级上册英语教学课件 Unit 5 Part B Start to read
- 律师事务所整体转让协议书范文
- 中国高血压防治指南(2024年修订版)要点解读
- 2024年新苏教版六年级上册科学全册知识点(超全)
- 国家开放大学电大《计算机应用基础(本)》学士学位论文家用电器销售管理系统的设计与实现
- 初中数学因式分解练习题100题附详解
- 焦化行业火灾事故分析
评论
0/150
提交评论