第6章有限状态机设计_第1页
第6章有限状态机设计_第2页
第6章有限状态机设计_第3页
第6章有限状态机设计_第4页
第6章有限状态机设计_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

第6章有限状态机设计

VHDL综合器易于优化

易构成性能良好的时序逻辑模块结构模式简单、层次分明、易读易懂、易排错运行模式类似于CPU,易于进行顺序控制

利用同步时序和全局时钟线可实现高速FSM高可靠性,非法状态易控制

为什么要使用状态机?一、概述(4)辅助进程

用于配合状态机工作的组合进程或时序进程,例如为了完成某种算法的进程;或用于配合状态机工作的其他时序进程,例如为了稳定输出设置的数据锁存器等。二、一般有限状态机的设计1、一般有限状态机的组成

(1)说明部分说明部分中使用TYPE语句定义新的数据类型,此数据类型一般为枚举类型例如:TYPEstate_typeIS(start_state,run_state,error_state);SIGNALstate:state_type;说明部分一般放在结构体的ARCHITECTURE和BEGIN之间。(2)时序进程时序进程是指负责状态机运转和在时钟驱动下负责状态转换的进程。作为状态机的“驱动泵”。(3)组合进程组合进程的任务是根据外部输入的控制信号,和当前状态的状态值确定下一状态的去向,以及确定对外输出或对内部其他组合或时序进程输出控制信号的内容。【例6-1】 --一般状态机描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYs_machineISPORT(clk,reset:INSTD_LOGIC;state_inputs:INSTD_LOGIC_VECTOR(0TO1);comb_outputs:OUTSTD_LOGIC_VECTOR(0TO1));ENDs_machine;ARCHITECTUREbehaveOFs_machineISTYPEstatesIS(st0,st1,st2,st3);--定义states为枚举型数据类型SIGNALcurrent_state,next_state:states;BEGINREG:PROCESS(reset,clk)--时序逻辑进程BEGINIFreset='1'THEN--异步复位current_state<=st0;ELSIF(clk='1'ANDclk'EVENT)THENcurrent_state<=next_state;--当检测到时钟上升沿时转换至下一状态

ENDIF;ENDPROCESS;--由current_state将当前状态值带出此进程,进入进程COMCOM:PROCESS(current_state,state_inputs)--组合逻辑进程BEGINCASEcurrent_stateIS--确定当前状态的状态值WHENst0=>comb_outputs<="00";--初始态译码输出IFstate_inputs="00"THEN--根据外部的状态控制输入“00”next_state<=st0;--在下一时钟后,进程REG的状态维持为st0ELSEnext_state<=st1;--否则,在下一时钟后,进程REG的状态将为st1ENDIF;WHENst1=>comb_outputs<="01";--对应st1的译码输出“01”IFstate_inputs="00"THEN--根据外部的状态控制输入“00”next_state<=st1;--在下一时钟后,进程REG的状态将维持为st1ELSEnext_state<=st2;--否则,在下一时钟后,进程reg的状态将为st2ENDIF;WHENst2=>comb_outputs<="10";--以下依次类推IFstate_inputs="11"THENnext_state<=st2;ELSEnext_state<=st3;ENDIF;WHENst3=>comb_outputs<="11";IFstate_inputs="11"THENnext_state<=st3;ELSEnext_state<=st0;ENDIF;ENDCASE;ENDPROCESS;--由信号next_state将下一状态值带出此进程,进入进程regENDbehave;进程间一般是并行运行的,但由于敏感信号的设置不同以及电路的延迟,在时序上进程间的动作是有先后的。三、Moore型状态机的设计

Moore型状态机框图

以下介绍Moore型状态机的另一个应用实例,即用状态机设计一个A/D采样控制器。对A/D器件进行采样控制

RCSTATUSD[11..0]AD574启动时序20usZ/CS对AD574初始化st0st1st2st3st4打开片选,启动12位转换采样周期中等待STATUS=‘1’:正在转换!STATUS=‘0’:转换结束!12位转换数据输出有效由LOCK发数据锁存信号PROCESSREG时序进程PROCESSCOM组合进程PROCESSLATCH锁存器current_statenext_stateLOCK状态机FSMFPGA/CPLDCLKCSA0RCK12/8STATUSD[11..0]AD574Q[11..0]模拟信号输入采样数据输出LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYAD574IS

PORT(D:INSTD_LOGIC_VECTOR(11DOWNTO0);CLK,STATUS:INSTD_LOGIC;CS,A0,RC,K12X8:OUTSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(11DOWNTO0));ENDAD574;ARCHITECTUREbehavOFAD574ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALcurrent_state,next_state:states;

SIGNALREGL:STD_LOGIC_VECTOR(11DOWNTO0);

SIGNALLOCK:STD_LOGIC;

BEGIN

COM:

PROCESS(current_state,STATUS)

BEGIN

CASEcurrent_stateIS

WHENst0=>CS<='1';A0<='0';RC<='0';LOCK<='0';next_state<=st1;

WHENst1=>CS<='0';A0<='0';RC<='0';LOCK<='0';next_state<=st2;

WHENst2=>CS<='0';A0<='0';RC<='0';LOCK<='0';

IF(STATUS='1')THENnext_state<=st2;ELSEnext_state<=st3;ENDIF;

WHENst3=>CS<='0';A0<='0';RC<='1';LOCK<='0';next_state<=st4;

WHENst4=>CS<='0';A0<=’1';RC<='1';LOCK<='1';next_state<=st0;

WHENOTHERS=>next_state<=st0;

ENDCASE;

ENDPROCESSCOM;

REG:PROCESS(CLK)

BEGINIF(CLK'EVENTANDCLK='1')THEN

current_state<=next_state;

ENDIF;

ENDPROCESSREG;

LATCH:

PROCESS(LOCK)

BEGINIFLOCK='1'

ANDLOCK'EVENT

THENREGL<=D;

ENDIF;

ENDPROCESS;Q<=REGL;

ENDbehav;

状态机VHDL源程序状态机工作时序图状态2:等待四、Mealy型有限状态机的设计

Mealy状态机的框图

【例6-4】 LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.all;ENTITYmealy1ISPORT(clk,datain,reset:INstd_logic;q:OUTstd_logic_vector(4DOWNTO0));ENDmealy1;ARCHITECTUREbehaveOFmealy1ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALstx:states;BEGINcomreg:PROCESS(clk,reset)--决定转换状态的进程BEGINIFreset='1'THENstx<=st0;ELSIFclk'eventANDclk='1'THEN

CASEstxISWHENst0=>IFdatain='1'THENstx<=st1;ENDIF;WHENst1=>IFdatain='0'THENstx<=st2;ENDIF;WHENst2=>IFdatain='1'THENstx<=st3;ENDIF;WHENst3=>IFdatain='0'THENstx<=st4;ENDIF;WHENst4=>IFdatain='1'THENstx<=st0;ENDIF;WHENOTHERS=>stx<=st0;ENDCASE;;

ENDIF;ENDPROCESScomreg;COM1:PROCESS(stx,datain)--输出控制信号进程BEGINCASEstxISWHENst0=>IFdatain='1'THENq<="10000";ELSEq<="01010";ENDIF;WHENst1=>IFdatain='0'THENq<="10111";ELSEq<="10100";ENDIF;WHENst2=>IFdatain='1'THENq<="10101";ELSEq<="10011";ENDIF;WHENst3=>IFdatain='0'THENq<="11011";ELSEq<="01001";ENDIF;WHENst4=>IFdatain='1'THENq<="11101";ELSEq<="01101";ENDIF;WHENOTHERS=>q<="00000";ENDCASE;ENDPROCESScom1;ENDbehave;例6-4状态机工作时序图

可以从该状态机的工作时序图6-11上清楚看到,输出信号有许多毛刺。为了解决这个问题,可以考虑将输出信号q值由时钟信号锁存后再输出,也可用时钟同步输出信号…一位热码编码方式就是用n个触发器来实现具有n个状态的状态机,状态机中的每一个状态都由其中一个触发器的状态表示,即当处于某状态时,对应的触发器为‘1’,其余的触发器都置‘0’。一位热码编码方式尽管用了较多的触发器,但其简单的编码方式大为简化了状态译码逻辑,提高了状态转换速度,这对于含有较多的时序逻辑资源,较少的组合逻辑资源的FPGA器件是好的解决方案。

五、状态编码

1、状态位直接输出型编码

将状态编码直接输出作为控制信号,即output=state;要求对状态机各状态的编码作特殊的选择,以适应控制时序的要求。这种状态机称为状态码直接输出型状态机。

2、顺序编码顺序编码方式就是利用若干个触发器的编码组合来实现n个状态的状态机,这种编码方式最为简单,且使用的触发器数量最少,剩余的非法状态最少,容错技术最为简单。3一位热码编码(2)利用OTHERS语句中对未提到的状态作统一处理。...TYPEstatesIS(st0,st1,st2,st3,st4,st_ilg1,st_ilg2,st_ilg3);SIGNALcurrent_state,next_state:states;...COM:PROCESS(current_state,state_inputs)BEGINCASEcurrent_stateIS...WHENOTHERS=>next_state<=st0;ENDCASE;

六、状态机剩余状态处理

(l)在语句中对每一个非法状态都作出明确的状态转换指示,如在原来的CASE语句中增加诸如以下语句:WHENst_ilg1=>next<=st0;WHENst_ilg2=>next<=st0;WHENst_ilg3=>next<=st0;

VHDL基本语法小结6

状态编码符号化,用户数据类型和子类型定义:

TYPE,SUBTYPE定义FSM的现态和次态:current_state,next_state

可设置多个进程:至少含一个主控时序进程和一个主控组合进程主控时序进程作为FSM的驱动泵;主控组合进程控制FSM的工作顺序组合进程中使用CASE语句其它辅助进程可以有时序和组合进程配合FSM主机工作可以有多个FSM并行工作对于多个FSM,采用单一时钟同步时序容易协调控制所有FSM的工作EDA技术及应用第6章作业1、6第7章数字电子系统设计实践

EDA应用示例介绍一、移位相加8位硬件乘法器电路设计

硬件乘法器的功能--实现两个8位二进制数的乘法运算硬件乘法器的设计思路硬件乘法器的乘法运算可以通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。

硬件乘法器的设计

右移寄存器模块设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYsreg8bIS--8位右移寄存器PORT(clk:INSTD_LOGIC;LOAD:INSTD_LOGIC;din:INSTD_LOGIC_VECTOR(7DOWNTO0);qb:OUTSTD_LOGIC);ENDsreg8b;ARCHITECTUREbehaveOFsreg8bISSIGNALreg8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(clk,load)BEGINIFload='1'THENreg8<=din;--装载新数据ELSIFCLK'EVENTANDCLK='1'THENreg8(6DOWNTO0)<=reg8(7DOWNTO1);--数据右移ENDIF;ENDPROCESS;qb<=reg8(0);--输出最低位ENDbehave;8位加法器模块设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYadder8ISPORT(b,a:INSTD_LOGIC_VECTOR(7DOWNTO0);s:OUTSTD_LOGIC_VECTOR(8DOWNTO0));ENDadder8;ARCHITECTUREbehavOFadder8ISBEGIN s<='0'&a+b;ENDbehave;选通与门模块设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYandarithISPORT(abin:INSTD_LOGIC;din:INSTD_LOGIC_VECTOR(7DOWNTO0);dout:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDandarith;ARCHITECTUREbehaveOFandarithISBEGINPROCESS(abin,din)BEGINFORIIN0TO7LOOP--循环,完成8位与1位运算DOUT(I)<=DIN(I)ANDABIN;ENDLOOP;ENDPROCESS;ENDbehave;16位锁存器模块设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYreg16bISPORT(clk,clr:INSTD_LOGIC;d:INSTD_LOGIC_VECTOR(8DOWNTO0);q:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDreg16b;ARCHITECTUREbehaveOFreg16bISSIGNALR16S:STD_LOGIC_VECTOR(15DOWNTO0);BEGINPROCESS(clk,clr)BEGINIFclr='1'THENR16S<=(OTHERS=>'0');--清零信号ELSIFCLK'EVENTANDCLK='1'THEN--时钟到来时,锁存输入值,--并右移低8位R16S(6DOWNTO0)<=R16S(7DOWNTO1);--右移低8位R16S(15DOWNTO7)<=D;--将输入锁到高8位ENDIF;ENDPROCESS;q<=R16S;ENDbehave;波形仿真

交通管理器的功能二、十字路口交通管理器设计交通管理器的设计思路交通管理器的设计控制器模块设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtraffic_controlISPORT(clk:INSTD_LOGIC;c1,c2,c3:OUTSTD_LOGIC;--各定时计数器的使能信号w1,w2,w3:INSTD_LOGIC;--各定时计数器的工作信号r1,r2:OUTSTD_LOGIC;--两个方向的红灯信号y1,y2:OUTSTD_LOGIC;--两个方向的黄灯信号g1,g2:OUTSTD_LOGIC;--两个方向的绿灯信号reset:INSTD_LOGIC);--复位信号ENDtraffic_control;ARCHITECTUREbehaveOFtraffic_controlISTYPEstate_spaceIS(s0,s1,s2,s3);SIGNALstate:state_space;BEGINPROCESS(clk)BEGINIFreset='1'THENstate<=s0;ELSIF(clk'EVENTANDclk='1')THENCASEstateISWHENs0=>IFw1='1'THEN--条件信号赋值语句state<=s1;

ENDIF;WHENs1=>IFw2='1'THENstate<=s2;ENDIF;WHENs2=>IFw3='1'THENstate<=s3;ENDIF;WHENs3=>IFw2='1'THENstate<=s0;ENDIF;ENDCASE;ENDIF;ENDPROCESS;c1<='1'WHENstate=s0ELSE'0';c2<='1'WHENstate=s1ORstate=s3ELSE'0';c3<='1'WHENstate=s2ELSE'0';r1<='1'WHENstate=s1ORstate=s0ELSE'0';y1<='1'WHENstate=s3ELSE'0';g1<='1'WHENstate=s2ELSE'0';r2<='1'WHENstate=s2ORstate=s3ELSE'0';y2<='1'WHENstate=s1ELSE'0';g2<='1'WHENstate=s0ELSE'0';ENDbehave;

定时器设计LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL;ENTITYcount30ISPORT(clk:INSTD_LOGIC;enable:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDcount30;ARCHITECTUREbehaveOFcount30ISBEGINPROCESS(clk)VARIABLEcnt:INTEGERRANGE30DOWNTO0;BEGINIF(clk'EVENTANDclk='1')THENIFenable='1'ANDcnt<30THENcnt:=cnt+1;

ELSEcnt:=0;ENDIF;ENDIF;IFcnt=30THENc<='1';ELSEc<='0';ENDIF;ENDPROCESS;ENDbehave;

波形仿真三、可编程定时/计数器设计

可编程定时/计数器的功能硬件定时就是利用可编程定时/计数器,在简单软件控制下产生准确的延时时间。其基本原理是通过软件确定定时/计数器的工作方式、设置计数初值并启动计数器工作,当计数到给定值时,便自动产生定时信号。可编程定时/计数器设计思路

可编程定时/计数器工作过程

同定时/计数器1。模型结构包含1个时钟输入,1个清零信号输入,1个写入信号输入,1个3位的控制字输入,1个2位的选通信号输出,1个计数器1载入控制输出,1个计数器2载入控制输出。(1)

控制字寄存器(2)

定时/计数器1包含1个时钟输入,1个载入控制输入,1个门控制输入,1个2位选通方式输入,1个8位数据输入,1个8位数据输出,1个波形输出。(3)

定时/计数器2SC2M1M0定义控制字格式为:对应功能:SC2=0,计数器1; M1M0=01,频率发生器方式SC2=1,计数器2; M1M0=10,计数结束中断方式计数器的模式输入为2位,可自定义最多四种模式;数据输入8位,计数范围为0~256;每个计数器各有一个门控信号和对应门控信号的波形输出,在门控信号作用下,计数/定时延时。控制字定义内部结构所设计定时/计数器的内部结构图如图所示可编程定时/计数器顶层电路

可编程定时/计数器仿真波形

四、智能函数发生器设计

函数发生器总体框图

递增斜波

递减斜波

三角波

方波

正弦波

阶梯波

五、数据采集系统设计

数据采集系统示意图

数据输入单元

数据采集系统总体框图

数据输出单元

fun值为3的仿真波形

fun值为0的仿真波形

fun值为1,k3值为0的仿真波形

循环检测报警模式

(3)比赛用11分为一局来进行,甲乙双方都应设置各自的记分牌,任何一方先记满11分,该方就算胜了此局。当记分牌清零后,又可开始新的一局比赛。

六、乒乓游戏机设计

乒乓游戏机的功能(1)

使用乒乓球游戏机的甲乙双方各在不同的位置发球或击球。(2)

乒乓球的位置和移动方向由灯亮及依次点燃的方向决定,球移动的速度为0.1~0.5s移动一位。游戏者根据球的位置发出相应的动作,提前击球或出界均判失分。

乒乓游戏机顶层电路图

乒乓球仿真波形一

乒乓球仿真波形二

乒乓球仿真波形三

乒乓球仿真波形四

乒乓球仿真波形五(6)

增加测周期功能,就是当时钟频率低于0.99kHz的时候,显示的数值变成周期,以毫秒为单位。七、数字频率计设计3位数字频率计是用3个十进制数字显示的数字式频率计,其频率测量范围为1MHz。为了提高测量精度,量程分别为10KHz、100KHz和1MHz三挡,即最大读数分别为9.99kHz,99.9kHz和999kHz。要求量程自动换挡。具体功能如下:(1)

当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增大一挡。(2)

当读数小于099时,频率计处于欠量程状态,下一次测量时,量程自动减少一挡。(3)

当超出频率测量范围时,显示器显示溢出。(4)

采用记忆显示方法,即测量过程中不显示数据,待测量过程结束以后,显示测频结果,并将此结果保持到下次测量结束。显示时间不小于1秒。(5)

小数点位置随量程变化自动移位。测试信号是频率为5kHz脉冲时的仿真波形图

第一次仿真中的换档情况

测试信号是频率为250kHz脉冲时的仿真波形图

测试信号是频率为25kHz脉冲时的仿真波形图

测试信号是周期为6ms脉冲时的仿真波形图

(7)电梯初始状态为一层开门状态。八、三层电梯控制器设计

三层电梯控制器的功能(1)每层电梯入口处设有上下请求开关,电梯内设有顾客到达层次的停站请求开关。(2)设有电梯入口处位置指示装置及电梯运行模式(上升或下降)指示装置。(3)电梯每秒升(降)一层楼。(4)电梯到达有停站请求的楼层,经过1秒电梯门打开,开门指示灯亮,开门4秒后,电梯门关闭(开门指示灯灭),电梯继续进行,直至执行完最后一个请求信号后停留在当前层。(5)能记忆电梯内外所有请求,并按照电梯运行规则按顺序响应,每个请求信号保留至执行后消除。(6)电梯运行规则:当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号,由下而上逐个执行,直到最后一个上楼请求执行完毕;如果高层有下楼请求,则直接升到由下楼请求的最高楼层,然后进入下降模式。当电梯处于下降模式时则与上升模式相反。有上升请求的仿真波形

有下降请求的仿真波形

同时有上升和下降请求的仿真波形

复杂请求的仿真波形

(2)

计算器的输入包括:0~9十个数字按键,加减乘除四则运算的运算符按键,一个等号按键,一个清零按键。计算器的输出采用七段译码器来显示计算结果。

九、计算器设计计算器的功能计算器所要实现的功类似于我们日常生活中所用的计算器,即可以实现加、减、乘、除以及连加和连减功能,并且要正确显示计算结果。具体如下:(1)

要求实现8位二进制数的加减法,实现两个4位二进制数的乘法运

温馨提示

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

评论

0/150

提交评论