(五)第8章状态机设计_第1页
(五)第8章状态机设计_第2页
(五)第8章状态机设计_第3页
(五)第8章状态机设计_第4页
(五)第8章状态机设计_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第8章状态机设计8.1一般有限状态机设计8.2Moore型有限状态机设计8.3Mealy型有限状态机设计8.1一般有限状态机设计

KX康芯科技为什么要使用状态机

状态机技术是实用数字系统设计中重要的组成部分,是实现高效率高可靠逻辑控制的重要途径。状态机的工作方式是根据控制信号按照预先设定的状态进行顺序运行的,运行方式类似于CPU,在高速运算与控制方面,性能却优于CPU:1.尽管状态机和CPU都按时钟节拍以顺序时序方式工作,但CPU是按指令周期,以逐条执行指令的方式运行,每执行一条指令,只完成一项操作,一个指令周期由多个机器周期构成,一个机器周期又由多个时钟节拍构成,一个含有运算与控制的完整设计程序需要成百上千条指令;状态机的状态变换只有一个时钟周期,每一状态中,可完成许多并行运算和操作,速度高于CPU3—5个数量级。因此,在CPU无法人广告胜任的领域中有广泛的应用,如超高速的A/D、D/A等器件的控制,硬件串行通信接口RS232、USB的实现,自控领域中高速顺序控制系统、通信领域的许多功能模块的构成等。2.高可靠性任何CPU都不可能获得圆满的容错保障,运行软件过程中有许多固有缺陷;状态机进入非法状态并从中跳出,进入正常状态所耗时间十分短暂,通常只有2、3个时钟周期,约数十纳秒,不足以对系统运行构成危害。CPU通过复位方式从非法状态恢复过来耗时数十毫秒。对于高速高可靠系统是无法容忍的。注:在VHDL中,一个结构体可以包含多个状态机,一个状态机可以由多个进程构成,一个状态机所完成的运算与控制方面的工作与一个CPU类似。因此,一个设计实体的功能类似于一个含有并行运行的CPU的功能。KX康芯科技状态机结构简单,设计方案相对固定,可以定义符号化枚举类型的状态,有利于VHDL综合器发挥其优化功能。状态机的VHDL表述丰富多样、程序层次分明,结构清晰。易读易懂。状态机容易构成性能良好的同步时序逻辑模块,对于大规模时序电路的竞争冒险的解决极有帮助。8.1一般有限状态机设计

KX康芯科技一、数据类型定义语句

TYPE语句的用法如下:

TYPE数据类型名

IS数据类型定义

OF基本数据类型

;或

TYPE数据类型名

IS数据类型定义

;TYPEst1ISARRAY(0TO15)OFSTD_LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);8.1一般有限状态机设计

KX康芯科技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';8.1一般有限状态机设计

8.1一般有限状态机设计

KX康芯科技二、有限状态机设计的组成1.说明部分ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;...8.1一般有限状态机设计

KX康芯科技2.主控时序进程图8-1一般状态机结构框图

3.主控组合进程4.辅助进程8.1一般有限状态机设计

KX康芯科技【例1】----P200例8-1LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYs_machineISPORT(clk,reset:INSTD_LOGIC;state_inputs:INSTD_LOGIC_VECTOR(0TO1);outputs:OUTINTEGERRANGE0TO15);ENDs_machine;ARCHITECTUREbehvOFs_machineISTYPEFSM_STIS(s0,s1,s2,s3);--数据类型定义,状态符号化

SIGNALcurrent_state,next_state:FSM_ST;--将现态和次态定义为新的数据类型BEGINREG:PROCESS(reset,clk)

--主控时序进程

(接下页)KX康芯科技BEGINIFreset='1'THENcurrent_state<=s0;--检测异步复位信号

ELSIFclk='1'ANDclk'EVENTTHENcurrent_state<=next_state;ENDIF;ENDPROCESS;COM:PROCESS(current_state,state_Inputs)

--主控组合进程

BEGINCASEcurrent_stateISWHENs0=>outputs<=5;IFstate_inputs="00"THENnext_state<=s0;ELSEnext_state<=s1;ENDIF;

WHENs1=>outputs<=8;IFstate_inputs="00"THENnext_state<=s1;ELSEnext_state<=s2;ENDIF;WHENs2=>outputs<=12;IFstate_inputs="11"THENnext_state<=s0;ELSEnext_state<=s3;ENDIF;WHENs3=>outputs<=14;IFstate_inputs="11"THENnext_state<=s3;ELSEnext_state<=s0;ENDIF;ENDcase;ENDPROCESS;ENDbehv;8.1一般有限状态机设计

KX康芯科技图8-2a例1状态机的工作时序

8.1一般有限状态机设计

KX康芯科技图8-2b打开QuartusII状态图观察器

8.1一般有限状态机设计

KX康芯科技图8-2c例1的状态图

8.2Moore型有限状态机设计

KX康芯科技一、多进程有限状态机

图8-3ADC0809工作时序

8.2Moore型有限状态机设

KX康芯科技一、多进程有限状态机

图8-4控制ADC0809采样状态图

KX康芯科技一、多进程有限状态机

图8-5采样状态机结构框图

KX康芯科技【例2】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYADCINTISPORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);--来自0809转换好的8位数据CLK:INSTD_LOGIC;--状态机工作时钟EOC:INSTD_LOGIC;--转换状态指示,低电平表示正在转换ALE:OUTSTD_LOGIC;--8个模拟信号通道地址锁存信号START:OUTSTD_LOGIC;--转换开始信号OE:OUTSTD_LOGIC;--数据输出3态控制信号ADDA:OUTSTD_LOGIC;--信号通道最低位控制信号LOCK0:OUTSTD_LOGIC;--观察数据锁存时钟Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--8位数据输出ENDADCINT;(接下页)ARCHITECTUREbehavOFADCINTISTYPEstatesIS(st0,st1,st2,st3,st4);--定义各状态子类型

SIGNALcurrent_state,next_state:states:=st0;SIGNALREGL :STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLOCK :STD_LOGIC;--转换后数据输出锁存时钟信号

BEGINADDA<=‘1’;--当ADDA<=‘0’,则模拟信号进入通道IN0;当ADDA<=‘1’,则进入通道IN1。(前提:ADC0809的ADDC与ADDB已外接GND。)Q<=REGL;LOCK0<=LOCK;COM:PROCESS(current_state,EOC)BEGIN--规定各状态转换方式

CASEcurrent_stateISWHENst0=>ALE<='0';START<='0';LOCK<='0';OE<='0';

next_state<=st1;--0809初始化KX康芯科技WHENst1=>ALE<='1';START<='1';LOCK<='0';OE<='0';next_state<=st2;--启动采样

WHENst2=>ALE<='0';START<='0';LOCK<='0';OE<='0';IF(EOC='1')THENnext_state<=st3;--EOC=1表明转换结束

ELSEnext_state<=st2;ENDIF;--转换未结束,继续等待

WHENst3=>ALE<='0';START<='0';LOCK<='0';OE<='1';

next_state<=st4;--开启OE,输出转换好的数据

WHENst4=>ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0;WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM;

REG:PROCESS(CLK)BEGINIF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;ENDIF;ENDPROCESSREG;--由信号current_state将当前状态值带出此进程:REGLATCH1:PROCESS(LOCK)--此进程中,在LOCK的上升沿,将转换好的数据锁入

BEGINIFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF;ENDPROCESSLATCH1;ENDbehav;KX康芯科技【例3】

COM1:PROCESS(current_state,EOC)BEGINCASEcurrent_stateISWHENst0=>next_state<=st1;WHENst1=>next_state<=st2;WHENst2=>IF(EOC='1')THENnext_state<=st3; ELSEnext_state<=st2;ENDIF;WHENst3=>next_state<=st4;--开启OEWHENst4=>next_state<=st0;WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM1;COM2:PROCESS(current_state)BEGINCASEcurrent_stateISWHENst0=>ALE<='0';START<='0';LOCK<='0';OE<='0';WHENst1=>ALE<='1';START<='1';LOCK<='0';OE<='0';WHENst2=>ALE<='0';START<='0';LOCK<='0';OE<='0';WHENst3=>ALE<='0';START<='0';LOCK<='0';OE<='1';WHENst4=>ALE<='0';START<='0';LOCK<='1';OE<='1';WHENOTHERS=>ALE<='0';START<='0';LOCK<='0';ENDCASE;

ENDPROCESSCOM2;

8.2Moore型有限状态机设计

KX康芯科技一、多进程有限状态机

图8-6ADC0809采样状态机工作时序

8.2Moore型有限状态机设计

KX康芯科技二、单进程Moore型有限状态机

【例4】--P207例8-4LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMOORE1ISPORT(DATAIN:INSTD_LOGIC_VECTOR(1DOWNTO0);CLK,RST:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDMOORE1;ARCHITECTUREbehavOFMOORE1ISTYPEST_TYPEIS(ST0,ST1,ST2,ST3,ST4);

SIGNALC_ST:ST_TYPE;(只定义一个当前状态)BEGINPROCESS(CLK,RST)BEGINIFRST='1'THENC_ST<=ST0;Q<="0000";

ELSIFCLK'EVENTANDCLK='1'THEN

(接下页)KX康芯科技CASEC_STISWHENST0=>IFDATAIN="10"THENC_ST<=ST1;ELSEC_ST<=ST0;ENDIF;Q<="1001";WHENST1=>IFDATAIN="11"THENC_ST<=ST2;ELSEC_ST<=ST1;ENDIF;Q<="0101";WHENST2=>IFDATAIN="01"THENC_ST<=ST3;ELSEC_ST<=ST0;ENDIF;Q<="1100";WHENST3=>IFDATAIN="00"THENC_ST<=ST4;ELSEC_ST<=ST2;ENDIF;Q<="0010";WHENST4=>IFDATAIN="11"THENC_ST<=ST0;ELSEC_ST<=ST3;ENDIF;Q<="1001";WHENOTHERS=>C_ST<=ST0;ENDCASE;ENDIF;ENDPROCESS;ENDbehav;8.2Moore型有限状态机设计

KX康芯科技二、单进程Moore型有限状态机

图8-7例4状态机综合后的部分主要RTL电路模块(Synplify综合)

8.2Moore型有限状态机设计KX康芯科技二、单进程Moore型有限状态机

图8-8例4单进程状态机工作时序

8.2Moore型有限状态机设计KX康芯科技二、单进程Moore型有限状态机

图8-9对应于例4的二进程状态机工作时序图

8.3Mealy型有限状态机设计

KX康芯科技【例5】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMEALY1ISPORT(CLK,DATAIN,RESET:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDMEALY1;ARCHITECTUREbehavOFMEALY1ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALSTX:states;BEGINCOMREG:PROCESS(CLK,RESET)BEGIN

--决定转换状态的进程

IFRESET='1'THENSTX<=ST0;ELSIFCLK'EVENTANDCLK='1'THENCASESTXISWHENst0=>IFDATAIN='1'THENSTX<=st1;ENDIF;

KX康芯科技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)BEGIN--输出控制信号的进程

CASESTXISWHENst0=>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;ENDbehav;8.3Mealy型有限状态机设计

KX康芯科技图8-10例5状态机工作时序图8.3Mealy型有限状态机设计

KX康芯科技图8-11例6状态机工作时序图

8.3Mealy型有限状态机设计

KX康芯科技【例6】LIBRARYIEEE;--MEALYFSMUSEIEEE.STD_LOGIC_1164.ALL;ENTITYMEALY2ISPORT(CLK,DATAIN,RESET:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDMEALY2;ARCHITECTUREbehavOFMEALY2ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALSTX:states;SIGNALQ1:STD_LOGIC_VECTOR(4DOWNTO0);BEGINCOMREG:PROCESS(CLK,RESET)--决定转换状态的进程

BEGINIFRESET='1'THENSTX<=ST0;ELSIFCLK'EVENTANDCLK='1'THENCASESTXIS

(接下页)KX康芯科技WHENst0=>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,CLK)--输出控制信号的进程

VARIABLEQ2:STD_LOGIC_VECTOR(4DOWNTO0);BEGINCASESTXIS

WHENst0=>IFDATAIN='1'THENQ2:="10000";ELSEQ2:="01010";ENDIF;WHENst1=>IFDATAIN='0'THENQ2:="10111";ELSEQ2:="10100";ENDIF;WHENst2=>IFDATAIN='1'THENQ2:="10101";ELSEQ2:="10011";ENDIF;WHENst3=>IFDATAIN='0'THENQ2:="11011";ELSEQ2:="01001";ENDIF;WHENst4=>IFDATAIN='1'THENQ2:="11101";ELSEQ2:="01101";ENDIF;WHENOTHERS=>Q2:="00000";ENDCASE;

IFCLK'EVENTANDCLK='1'THENQ1<=Q2;ENDIF;ENDPROCESSCOM1;Q<=Q1;ENDbehav;习题KX康芯科技1.

仿照例1,将例4用两个进程,即一个时序进程,一个组合进程表达出来。2.

为确保例5的状态机输出信号没有毛刺,试用例8-4的方式构成一个单进程状态,使输出信号得到可靠锁存,在相同输入信号条件下,给出两程序的仿真波形。

3.

序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。例8-11描述的电路完成对序列数“11100101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。

习题KX康芯科技【例11】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSCHKISPORT(DIN,CLK,CLR:INSTD_LOGIC;--串行输入数据位/工作时钟/复位信号

AB:OUTSTD_LOGIC_VECTOR(3DOWNTO0));--检测结果输出ENDSCHK;ARCHITECTUREbehavOFSCHKISSIGNALQ:INTEGERRANGE0TO8;SIGNALD:STD_LOGIC_VECTOR(7DOWNTO0);--8位待检测预置数(密码=E5H)BEGIND<="11100101";--8位待检测预置数

PROCESS(CLK,CLR)BEGINIFCLR='1'THENQ<=0;ELSIFCLK'EVENTANDCLK='1'THEN--时钟到来时,判断并处理当前输入的位

CASEQISWHEN0=>IFDIN=D(7)THENQ<=1;ELSEQ<=0;ENDIF;

温馨提示

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

评论

0/150

提交评论