版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VHDL有限状态机FSM初步1状态机概念:是一类十分重要的时序电路许多数字电路的核心部件结构:组合逻辑部分(状态译码器和输出译码器)时序逻辑部分(寄存器)2状态机是纯硬件数字系统中的顺序控制电路,其运行方式上类似于控制灵活和方便的CPU,而在运行速度和工作可靠性方面都优于CPU。状态机结构模式相对简单,设计方案相对固定。状态机的VHDL表述丰富多样,程序层次分明,结构清晰,易读易懂;在排错、修改和模块移植方面也有其独到之点。在高速运算和控制方面,状态机具有巨大的优势。在VHDL中,一个状态机可以有多个进程构成,一个结构体中可以包含多个状态机,而一个单独的状态机(或多个并行运行的状态机)以顺序方式所能完成的运算和控制方面的工作与一个CPU的功能类似。因此,一个设计实体的功能便类似于一个含有并行运行的多CPU的高性能微处理器的功能。就运行速度而言:
状态机的状态变换周期只有一个时钟周期,而在每一个状态中,状态机可以完成许多并行的运算和控制操作,所以,一个完整的控制程序,即使用多个并行状态机构成,其状态数也是十分有限的。一般由状态机构成的硬件系统比CPU所能完成同样功能的软件系统的工作速度要高出三到五个数量级。
就可靠性而言:
由于CPU本身的结构特点与执行软件指令的工作方式决定了CPU不能获得圆满的容错保障,这已是不争的事实。而状态机系统不同,首先由于它是纯硬件电路构成,不存在CPU运行软件过程中许多固有的缺陷;其次是由于状态机设计中能使用各种完整的容错技术;第三是状态机从非法状态跳出进入正常状态的耗时十分短暂,通常只有2、3个时钟周期,约几十个ns,不足于对系统运行构成损坏,而CPU则是通过复位方式从非法运行方式中恢复过来,耗时达几十ms,这对于高速高可靠系统显然是无法容忍的。为什么要使用状态机?3状态机的结构状态译码器状态寄存器(当前状态)输出译码器输入信号输出状态输出4状态机-各部分的功能状态译码器确定状态机的下一个状态输出译码器确定状态机输出状态寄存器存储状态机的内部状态5状态机的基本操作状态的转换:下一个状态由译码器根据当前状态和输入条件决定。输出信号的产生:输出信号由译码器根据当前状态和输入条件决定。6状态机的时序种类同步时序状态机:由时钟信号触发状态的转换和信号的输出异步时序状态机:状态的转移和输出不与时钟信号同步注意:可综合的状态机设计要求使用同步状态机!7状态机的基本组成主控时序进程主控组合进程状态说明部分8●主控时序进程:
所谓主控时序进程是指负责状态机运转
和在时钟驱动下负责状态转换的进程。
主控时序进程
实际上是一个对工作时钟信号敏感的进程,可看作状态机的“驱动泵”,而时钟
clk
相当于这个
“驱动泵”中的驱动功率电源。resetPROCESSREGPROCESSCOMcurrent_statenext_stateclkS_inputS_outputFSM:一般状态机结构框图工作示意图主控时序进程主控组合进程9主控组合进程通过信号current_state
中的状态值,进入相应的状态,并在此状态中根据外部输入的信号如
S_input
(指令),向外发出控制信号如S_output
,同时确定下一状态的取向,即向next_state中赋入相应的状态值。此状态值通过next_state传给主控时序进程,直至下一个时钟脉冲到来再进入再一次的状态转换周期。因此,主控组合进程也称状态译码进程
。●主控组合进程:
主控组合进程的任务
是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其它非主控的组合和时序进程的信号),及当前状态的状态值确定下一个状态的取向,即next_state
的取值内容,并确定对外输出或对内其它组合和时序进程输出控制信号的内容。具体过程是:resetPROCESSREGPROCESSCOMcurrent_statenext_stateclkS_inputS_outputFSM:一般状态机结构框图工作示意图10状态机的类型状态一状态二状态二摩尔型moore状态机米勒型mealy状态机状态一输入11状态表流程图状态图状态机的表达方式12状态表13状态图14状态图状态机的本质是对具有逻辑顺序或时序规律事件的一种描述方法。1516状态类型定义语句TYPE用户自定义数据类型:数据类型名:由设计者自定;数据类型定义:数组型数据类型或枚举型数据类型TYPE数据类型名IS数据类型定义;TYPE数据类型名IS数据类型定义OF基本数据类型;17状态类型定义语句TYPETYPEst1ISARRAY(0TO15)OFSTD_LOGIC;
TYPEweekIS(sun,mon,tue,wed,
thu,fri,sat);例如:ARCHITECTUREbhvOFcnt4ISTYPEm_stateIS(st0,st1,st2,st3,st4,st5);SIGNALpresent_state,next_state
:m_state;BEGIN18状态机的说明部分使用TYPE
语句定义一个新的数据类型,一般为枚举型,其元素都用状态机的状态名来定义。说明部分一般放在ARCHITECTURE
和BEGIN之间。例如:ARCHITECTURE···IS
TYPEstatesIS(S0,S1,S2,S3);
SIGNALcurrent_state,next_state
:states;
BEGIN···19交通灯控制器,设计要求:红灯45秒,黄灯5秒,绿灯40秒A和B路,每路都有红、黄、绿灯A路和B路灯的状态是:(1)A红,B绿(持续时间40秒)(2)A红,B黄(持续时间5秒)(3)A绿,B红(持续时间40秒)(4)A黄,B红(持续时间5秒)设计1:交通灯控制器20libraryieee;useieee.std_logic_1164.all;entitytrafficisport(clk:instd_logic;z:outstd_logic_vector(5downto0));--ra,ya,ga,gb,yb,rbendtraffic;architectureoneoftrafficistypestate_typeis(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20,s21,s22,s23,s24,s25,s26,s27,s28,s29,s30,s31,s32,s33,s34,s35,s36,s37,s38,s39,s40,s41,s42,s43,s44,s45,s46,s47,s48,s49,s50,s51,s52,s53,s54,s55,s56,s57,s58,s59,s60,s61,s62,s63,s64,s65,s66,s67,s68,s69,s70,s71,s72,s73,s74,s75,s76,s77,s78,s79,s80,s81,s82,s83,s84,s85,s86,s87,s88,s89);signalstate:state_type;begin
process(clk)begin21ifclk'eventandclk='1'thencasestateiswhens0=>state<=s1;whens1=>state<=s2;whens2=>state<=s3;whens3=>state<=s4;whens4=>state<=s5;whens5=>state<=s6;whens6=>state<=s7;whens7=>state<=s8;whens8=>state<=s9;whens9=>state<=s10;whens10=>state<=s11;whens11=>state<=s12;whens12=>state<=s13;whens13=>state<=s14;whens14=>state<=s15;whens15=>state<=s16;whens16=>state<=s17;whens17=>state<=s18;whens18=>state<=s19;whens19=>state<=s20;whens20=>state<=s21;whens21=>state<=s22;whens22=>state<=s23;whens23=>state<=s24;whens24=>state<=s25;whens25=>state<=s26;whens26=>state<=s27;whens27=>state<=s28;whens28=>state<=s29;whens29=>state<=s30;whens30=>state<=s31;whens31=>state<=s32;whens32=>state<=s33;whens33=>state<=s34;whens34=>state<=s35;whens35=>state<=s36;whens36=>state<=s37;whens37=>state<=s38;whens38=>state<=s39;whens39=>state<=s40;whens40=>state<=s41;whens41=>state<=s42;whens42=>state<=s43;whens43=>state<=s44;whens44=>state<=s45;whens45=>state<=s46;whens46=>state<=s47;whens47=>state<=s48;whens48=>state<=s49;whens49=>state<=s50;whens50=>state<=s51;whens51=>state<=s52;whens52=>state<=s53;whens53=>state<=s54;whens54=>state<=s55;whens55=>state<=s56;whens56=>state<=s57;whens57=>state<=s58;whens58=>state<=s59;whens59=>state<=s60;whens60=>state<=s61;whens61=>state<=s62;whens62=>state<=s63;whens63=>state<=s64;whens64=>state<=s65;whens65=>state<=s66;whens66=>state<=s67;whens67=>state<=s68;whens68=>state<=s69;whens69=>state<=s70;whens70=>state<=s71;whens71=>state<=s72;whens72=>state<=s73;whens73=>state<=s74;whens74=>state<=s75;whens75=>state<=s76;whens76=>state<=s77;whens77=>state<=s78;whens78=>state<=s79;whens79=>state<=s80;whens80=>state<=s81;whens81=>state<=s82;whens82=>state<=s83;whens83=>state<=s84;whens84=>state<=s85;whens85=>state<=s86;whens86=>state<=s87;whens87=>state<=s88;whens88=>state<=s89;whens89=>state<=s0;whenothers=>state<=s0;endcase; endif;endprocess;22process(state)begincasestateiswhens0=>z<="100100";
……中间省略
whens39=>z<="100100"; whens40=>z<="100010"; whens41=>z<="100010"; whens42=>z<="100010"; whens43=>z<="100010"; whens44=>z<="100010"; whens45=>z<="001001";……中间省略
whens84=>z<="001001"; whens85=>z<="010001"; whens86=>z<="010001"; whens87=>z<="010001"; whens88=>z<="010001"; whens89=>z<="010001";whenothers=>z<="000000"; endcase;endprocess;endone;这40行输出对应A红B绿这5行输出对应A红B黄这40行输出对应A绿B红这5行输出对应A红B黄23PROCESS(Clockin)BEGINIFRISING_EDGE(Clockin)THEN IFCounter=48000000-1THEN counter<=0; Temp1<=NotTemp1; ELSE Counter<=Counter+1; ENDIF;ENDIF;IFfalling_edge(clockin)THEN IFCounter=48000000/2THEN Temp2<=NOTTemp2; ENDIF;ENDIF;
Clk<=Temp1XORTemp2;ENDPROCESS;分
频
器
1Hz24Architecture
oneoftrafficis
……
SIGNALCounter:IntegerRANGE0TO48000000-1;SIGNALTemp1,Temp2,clk:STD_LOGIC;BeginPROCESS(clockin)……
PROCESS(clk)…… PROCESS(state)
…… 25设计2:8路彩灯控制器设计要求:先从左到右逐个点亮;然后全部灯灭一下;最后重新执行(Ⅰ)、(Ⅱ)。268路彩灯控制器状态图S0/10000000S1/11000000S2/11100000S3/11110000S8/00000000S7/11111111S6/111111110S5/111111100S4/1111100027process(clk)ifclk'eventandclk='1'thencasestate
iswhens0=>state<=s1;whens1=>state<=s2;whens2=>state<=s3;whens3=>state<=s4;whens4=>state<=s5;whens5=>state<=s6;whens6=>state<=s7;whens7=>state<=s8;whens8=>state<=s0;whenothers=>state<=s0;endcase;endif;endprocess;process(state)begincasestateiswhens0=>z<="00000001";whens1=>z<="00000011";whens2=>z<="00000111";whens3=>z<="00001111";whens4=>z<="00011111";whens5=>z<="00111111";whens6=>z<="01111111";whens7=>z<="11111111";whens8=>z<="00000000";endcase;endprocess;28思考题试给8路彩灯控制器增加如下显示花样:(1)从左到右逐个亮,从右到左逐个灭;(2)从两边往中间逐个亮,从中间往两头逐个灭;(3)亮与灭重复3次;(4)重复(1)(2)(3)。29process(clk)variablea:std_logic_vector(3downto0);begindig<="11111110";ifclk'eventandclk='1'then ifa<=9thena:=a+1; else a:="0000"; endif;endif; caseais when"0000"=>led7s<="11000000"; when"0001"=>led7s<="11111001"; when"0010"=>led7s<="10100100"; when"0011"=>led7s<="10110000"; when"0100"=>led7s<="10011001"; when"0101"=>led7s<="10010010"; when"0110"=>led7s<="10000010"; when"0111"=>led7s<="11111000"; when"1000"=>led7s<="10000000"; whenothers=>led7s<="10010000";endcase;endprocess;30三进制计数器的状态图S2S0S1∏∏∏
/1∏/0∏∏/0输入/输出31四进制计数器的状态图?S3S1S2S4S0∏/0∏∏/0∏∏∏/0∏∏∏∏/1∏/032序列检测器序列检测器就是将一个指定序列从数字码流中识别出来。种类:有记忆功能的无记忆功能的33序列检测器(111)的状态图S2S0S1输入/输出S3无记忆功能x/01/011/0111/134序列检测器(111)的状态图S2S0S1输入/输出S3有记忆功能x/01/011/0111/135序列检测器(10010)的状态图S2S0S1输入/输出S3有记忆功能S4S536序列检测器(1110010)S0S1S7S2S3S6S5S41110010/10输入/输出37Moore型状态机-模4计数器LIBRARAYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcnt4IS PORT(clk:INBIT;
Q:OUTSTD_LOGIC_VECTOR(1DOWNTO0));ENDcnt4;ARCHITECTUREbhvOFcnt4IS TYPEstateIS(s0,s1,s2,s3);--定义状态种类 SIGNALcurrent_state,next_state:state;38Moore型状态机-模4计数器BEGIN
reg:PROCESS(clk)--主控时序进程 BEGIN IFclk’eventANDclk=‘1’THEN current_state<=next_state; ENDIF; ENDPROCESS;39Moore型状态机-模4计数器com:PROCESS(current_state)--主控组合进程 BEGIN CASEcurrent_stateIS WHENs0=>q<=“00”;next_state<=s1; WHENs1=>q<=“01”;next_state<=s2; WHENs2=>q<=“10”;next_state<=s3; WHENs3=>q<=“11”;next_state<=s0; ENDCASE; ENDPROCESS;ENDARCHITECTUREbhv;40Mealy型有限状态机Mealy型机的组合进程中的输出信号是当前状态和当前输入的函数。与Moore型状态机相比,Mealy机的输出变化要领先一个周期,即一旦输入信号或状态发生变化,输出信号即刻发生变化。41Mealy型状态机ENTITYdemo2IS PORT(clk,input,reset:INSTD_LOGIC; Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDdemo2;ARCHITECTUREbhvOFdemo2IS TYPEstateIS(s0,s1,s2,s3); SIGNALcurrent_state,next_state:state;BEGIN42Mealy型状态机reg:PROCESS(clk) BEGIN IFreset=‘1’THENcurrent_state<=s0; ELSIFclk’eventANDclk=‘1’THEN current_state<=next_state; ENDIF; ENDPROCESS;43com:PROCESS(input,current_state) BEGIN CASEcurrent_stateIS WHENs0=>Q<=“0000”; IFinput=‘1’THENnext_state<=s1; ELSEnext_state<=s0; ENDIF; WHENs1=>Q<=“1001”; IFinput=‘0’THENnext_state<=s2; ELSEnext_state<=s1; ENDIF;44WHENs2=>Q<=“1100”; IFinput=‘1’THENnext_state<=s3; ELSEnext_state<=s2; ENDIF;WHENs3=>Q<=“1111”; IFinput=‘0’THENnext_state<=s0;ELSEnext_state<=s3; ENDIF;ENDCASE; ENDPROCESS;ENDbhv;45Mealy型状态机46序列检测器的设计ENTITYtestIS PORT(clk,x:INSTD_LOGIC;
y:OUTSTD_LOGIC);ENDtest;ARCHITECTUREbhvOFtestIS TYPEstateIS(s0,s1,s2,s3); SIGNALcurrent_state,next_state:state;47BEGIN
reg:PROCESS(clk) BEGIN IFclk’eventANDclk=‘1’THEN current_state<=next_state; ENDIF; ENDPROCESS;
com:PROCESS(x,current_state) BEGIN CASEcurrent_stateIS WHENs0=> IFx=‘0’THENnext_state<=s0;y<=‘0’; ELSEnext_state<=s1;y<=‘0’; ENDIF;48WHENs1=> IFx=‘0’THENnext_state<=s0;y<=‘0’ ELSEnext_state<=s2;y<=‘0’; ENDIF;WHENs2=> IFx=‘0’THENnext_state<=s3;y<=‘1’; ELSEnext_state<=s2;y<=‘0’; ENDIF;WHENs3=> IFx=‘0’THENnext_state<=s0;y<=‘0’; ELSEnext_state<=s1;y<=‘0’; ENDIF;ENDCASE; ENDPROCESS;ENDbhv;49序列检测器的设计50com:PROCESS(x,current_state) CASEcurrent_stateIS WHEN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位工勤技能-山东-山东仓库管理员四级(中级工)历年参考题库含答案详解
- 2026事业单位工勤技能-宁夏-宁夏农机驾驶维修工二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-四川-四川公路养护工四级(中级工)历年参考题库含答案详解
- 2026事业单位工勤技能-吉林-吉林地图绘制员二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-内蒙古-内蒙古经济岗位工四级(中级工)历年参考题库含答案详解
- 2026事业单位工勤技能-上海-上海造林管护工三级(高级工)历年参考题库含答案详解
- -七年级上期中语文测试卷1-3单元
- -七年级上学期期中考试数学试卷-II
- 2026年嘉禾县网格员招聘考试备考题库及答案解析
- 2026年渭源县事业单位人员招聘考试备考题库及答案解析
- 2025年高院遴选面试题及答案
- 公共视频全域协同系统建设方案
- 山东省济宁市邹城市第十中学2025-2026学年七年级上学期分班考试英语试题(含答案)
- DB37∕T 4825.3-2025 药品、医疗器械、化妆品企业日常监督检查管理规范 第3部分:日常监督检查
- 浙江省丽水市2024-2025学年高二下学期期末考试生物试卷
- GB/T 45232-2025建筑排水排污用聚丙烯(PP)管道系统
- 幼儿园学拼音基础篇单韵母教学课件
- 基础护理服务工作规范
- 科研办公楼经济效益与社会效益分析
- 《新编大学生军事理论与技能(第2版)》全套教学课件
- 设备日常维护及保养培训
评论
0/150
提交评论