版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
EDA技术实用教程第10章有限状态机设计10.1VHDL状态机的一般形式10.1.1用户自定义数据类型定义语句TYPE语句用法如下:TYPE数据类型名IS数据类型定义OF基本数据类型;或TYPE数据类型名IS数据类型定义;以下列出了两种不同的定义方式:TYPEst1ISARRAY(0TO15)OFSTD_LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);10.1VHDL状态机的一般形式10.1.1用户自定义数据类型定义语句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';10.1VHDL状态机的一般形式10.1.1用户自定义数据类型定义语句子类型SUBTYPE的语句格式如下:SUBTYPE子类型名IS基本数据类型RANGE约束范围;
SUBTYPEdigitsISINTEGERRANGE0to9;10.1.1状态机的特点与优势10.1VHDL状态机的一般形式有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。状态机的结构模式相对简单。状态机容易构成性能良好的同步时序逻辑模块。状态机的VHDL表述丰富多样。在高速运算和控制方面,状态机更有其巨大的优势。就可靠性而言,状态机的优势也是十分明显的。10.1.2状态机的一般结构10.1VHDL状态机的一般形式1.说明部分2.主控时序进程图10-1
一般状态机结构框图工作示意图ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;...主控时序进程,只负责将当前状态转换为下一状态主控组合进程,决定下一个状态为哪个状态以及输出结果。3.主控组合进程10.1.2状态机的一般结构
主控组合进程的任务是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其它非主控的组合或时序进程的信号),或(和)当前状态的状态值确定下一状态(next_state)的取向,即next_state的取值内容,以及确定对外输出或对内部其它组合或时序进程输出控制信号的内容。4.辅助进程
用于配合状态机工作的组合进程或时序进程。【例10-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYs_machineISPORT(clk,reset:INSTD_LOGIC;state_inputs:INSTD_LOGIC_VECTOR(0TO1);comb_outputs:OUTINTEGERRANGE0TO15);ENDs_machine;ARCHITECTUREbehvOFs_machineISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;BEGINREG:PROCESS(reset,clk)BEGINIFreset='1'THENcurrent_state<=s0;ELSIFclk='1'ANDclk'EVENTTHENcurrent_state<=next_state;ENDIF;ENDPROCESS;
接下页10.1.2状态机的一般结构COM:PROCESS(current_state,state_Inputs)BEGINCASEcurrent_stateISWHENs0=>comb_outputs<=5;IFstate_inputs="00"THENnext_state<=s0;ELSEnext_state<=s1;ENDIF;WHENs1=>comb_outputs<=8;IFstate_inputs="00"THENnext_state<=s1;ELSEnext_state<=s2;ENDIF;WHENs2=>comb_outputs<=12;IFstate_inputs="11"THENnext_state<=s0;ELSEnext_state<=s3;ENDIF;WHENs3=>comb_outputs<=14;IFstate_inputs="11"THENnext_state<=s3;ELSEnext_state<=s0;ENDIF;ENDcase;ENDPROCESS;ENDbehv;接上页10.2Moore型有限状态机的设计从状态机的信号输出方式分,有Mealy和Moore型两类状态机:
Mealy型状态机的输出是当前状态和所有输入信号的函数。它的输出是在输入变化后立即发生的,不依赖时钟的同步,属于同步输出状态机;
Moore型状态机的输出则仅为当前状态的函数,这类状态机在输入发生变化时还必须等待时钟的到来,时钟使状态发生变化时才导致输出的变化,所以比Mealy机要多等待一个时钟周期。属于异步输出状态机。表10-1AD0809逻辑控制真值表(X表示任意)
状态ALE/STARTEOCOELOCK工作状态ST00100初始化,禁止转换ST11000启动转换ST20100转换结束ST30110输出数据ST40011锁存10.2.1多进程有限状态机10.2.1多进程有限状态机图10-5AD0809工作时序10.2.1多进程有限状态机图10-6控制ADC0809采样状态图PROCESSREG时序进程PROCESSCOM组合进程PROCESSLATCH1锁存器current_statenext_stateLOCK状态机FSMFPGA/CPLDCLK
ALESTARTOEADDAEOCD[7..0]ADC0809Q[7..0]模拟信号输入采样数据输出CLKA/D工作时钟CLK=750KHz状态机工作时钟图10-7采样状态机结构框图【例10-2】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYAD574ISPORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);CLK,EOC:INSTD_LOGIC;--状态机时钟CLK、转换结束信号ALE,START,OE,ADDA,LOCK0:OUTSTD_LOGIC;--0809控制信号
Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--锁存数据输出END;ARCHITECTUREbehavOFADC0809ISTYPEstatesIS(st0,st1,st2,st3,st4);--定义各状态子类型SIGNALcurrent_state,next_state:states:=st0;SIGNALREGL:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLOCK:STD_LOGIC;--转换后数据输出锁存时钟信号BEGINADDA<=‘1’;--当ADDA<=‘0’,模拟信号进入0809通道0;当ADDA<=‘1’,则进入通道1
Q<=REGL;LOCK20<=LOCK;
接下页10.2.1多进程有限状态机COM:PROCESS(current_state,EOC)--决定转换状态的进程BEGINCASEcurrent_stateISWHENst0=>ALE<=‘0’;START<=‘0’;LOCK<=‘0’;OE=‘0’;next_state<=st1;--0809初始化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=‘0’;next_state<=st0;
WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM;
接下页接上页REG:PROCESS(CLK)--时序进程
BEGINIF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;ENDIF;ENDPROCESSREG;LATCH1:PROCESS(LOCK)--数据锁存器进程
BEGINIFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF;ENDPROCESS;Q<=REGL;ENDbehav;接上页10.2.1多进程有限状态机图10-8AD0809采样状态机工作时序10.2.1多进程有限状态机一个负责状态译码,一个负责状态转换,构成一个3进程状态机10.2.1多进程有限状态机【例10-3】将组合进程COM分成两个组合进程COM1和COM2,一个负责状态译码,另一个负责状态转换,构成一个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;--接下页10.2.1多进程有限状态机--接上页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;状态机RTL电路图10.2.2序列检测器之状态机设计序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0.由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新检测。【例10-4】Moore型序列器(双进程)检测数据1101_0011,高位在前LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSCHKISPORT(DIN,CLK,RST:INSTD_LOGIC;SOUT:OUTSTD_LOGIC);ENDSCHK;ARCHITECTUREbehavOFSCHKISTYPEstatesIS(s0,s1,s2,s3,s4,s5,s6,s7,s8);--定义各状态SIGNALST,NST:states:=s0;
BEGIN
接下页10.2.2序列检测器之状态机设计--接上页COM:PROCESS(ST,DIN)BEGINCASESTIS----1101_0011WHENs0=>IFDIN=‘1’THENNST<=S1;ELSENST<=S0;ENDIF;WHENs1=>IFDIN=‘1’THENNST<=S2;ELSENST<=S0;ENDIF;WHENs2=>IFDIN=‘0’THENNST<=S3;ELSENST<=S0;ENDIF;WHENs3=>IFDIN=‘1’THENNST<=S4;ELSENST<=S0;ENDIF;WHENs4=>IFDIN=‘0’THENNST<=S5;ELSENST<=S0;ENDIF;WHENs5=>IFDIN=‘0’THENNST<=S6;ELSENST<=S0;ENDIF;WHENs6=>IFDIN=‘1’THENNST<=S7;ELSENST<=S0;ENDIF;WHENs7=>IFDIN=‘1’THENNST<=S8;ELSENST<=S0;ENDIF;WHENs8=>IFDIN=‘0’THENNST<=S3;ELSENST<=S0;ENDIF;WHENOTHERS=>NST<=s0;ENDCASE;ENDPROCESSCOM;
接下页10.2.2序列检测器之状态机设计此处进入s3,是因为这时测出的数据110恰好与原序列数的头三位相同--接上页REG:PROCESS(CLK,RST)BEGIN--时序进程
IFRST=‘1’THENST<=s0;ELSIF(CLK'EVENTANDCLK='1')THENST<=NST;ENDIF;ENDPROCESSREG;
SOUT<=‘1’WHENST=s8ELSE‘0’;
ENDbehav;
10.2.2序列检测器之状态机设计.2.2单进程Moore型有限状态机由于以上状态机的输出信号是由组合电路发出的,所以在一些特定情况下难免出现毛刺现象,如果这些输出用于特殊控制,极易产生错误的操作,这是要尽力避免的。单进程Moore状态机比较容易构成能避免出现毛刺现象的状态机。.2.2单进程Moore型有限状态机【例-4】LIBRARYIEEE;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
接下页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;接上页CASE语句处于时钟上升沿的ELSIF语句中,对Q的赋值必然能引入对Q锁存的锁存器图7-7例7-4状态机综合后的RTL电路模块图.2.2单进程Moore型有限状态机.2.2单进程Moore型有限状态机图7-8例7-4单进程状态机工作时序7.2.2单进程Moore型有限状态机图7-9对应于例7-4的2进程状态机工作时序图10.3Mealy型有限状态机的设计
Mealy机的组合进程结构中的输出信号是当前状态和当前输入的函数。与Moore型状态机相比,Mealy机的输出变化要领先一个周期即一旦输入信号或状态发生变化,输出信号即刻发生变化。
10.3Mealy型有限状态机的设计【例10-5】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMEALY1ISPORT(CLK,DIN1,DIN2,RST:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDMEALY1;ARCHITECTUREbehavOFMEALY1ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALPST:states;BEGINCOMREG:PROCESS(CLK,RST,PST,DIN1)BEGIN--决定转换状态的进程
IFRST='1'THENPST<=ST0;ELSIFCLK'EVENTANDCLK='1'THENCASEPSTISWHENst0=>IFDIN1='1'THENPST<=st1;ENDIF;WHENst1=>IFDIN1=‘1'THENPST<=st2;ENDIF;WHENst2=>IFDIN1='1'THENPST<=st3;ENDIF;WHENst3=>IFDIN1=‘1'THENPST<=st4;ENDIF;WHENst4=>IFDIN1=‘0'THENPST<=st0;ENDIF;WHENOTHERS=>PST<=st0;ENDCASE;ENDIF;ENDPROCESSCOMREG;接下页COM:PROCESS(PST,DIN2)BEGIN--输出控制信号的进程
CASEPSTISWHENst0=>IFDIN2='1'THENQ<="10000";ELSEQ<="01010";ENDIF;WHENst1=>IFDIN2='0'THENQ<="10111";ELSEQ<="10100";ENDIF;WHENst2=>IFDIN2='1'THENQ<="10101";ELSEQ<="10011";ENDIF;WHENst3=>IFDIN2='0'THENQ<="11011";ELSEQ<="01001";ENDIF;WHENst4=>IFDIN2='1'THENQ<="11101";ELSEQ<="01101";ENDIF;WHENOTHERS=>Q<="00000";ENDCASE;ENDPROCESSCOM;ENDbehav;图10-10例10-5之双进程状态机工作时序图【例10-6】MEALY2LIBRARYIEEE;--MEALYFSMUSEIEEE.STD_LOGIC_1164.ALL;ENTITYMEALY2ISPORT(CLK,DIN1,DIN2,RST:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDMEALY2;ARCHITECTUREbehavOFMEALY2ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALPST:states;BEGINPROCESS(CLK,RST)--决定转换状态的进程BEGINIFRST='1'THENPST<=ST0;ELSIFRISING_EDGE(CLK)THENCASEPSTISWHENst0=>IFDIN1='1'THENPST<=st1;ELSEPST<=st0;ENDIF;IFDIN2=‘1’THENQ<="10000";ELSEQ<="01010";ENDIF;接下页WHENst1=>IFDIN1='1'THENPST<=st2;ELSEPST<=st1;ENDIF;IFDIN2='0'THENQ<="10111";ELSEQ<="10100";ENDIF;WHENst2=>IFDIN1='1'THENPST<=st3;ELSEPST<=st2;ENDIF;IFDIN2='1'THENQ<="10101";ELSEQ<="10011";ENDIF;WHENst3=>IFDIN1='1'THENPST<=st4;ELSEPST<=st3;ENDIF;IFDIN2='0'THENQ<="11011";ELSEQ<="01001";ENDIF;WHENst4=>IFDIN1=‘0'THENPST<=st0;ELSEPST<=st4;ENDIF;IFDIN2='1'THENQ<="11101";ELSEQ<="01101";ENDIF;WHENOTHERS=>PST<=st0;Q<="00000";ENDCASE;ENDIF;ENDPROCESSCOM;ENDbehav;图10-11例10-6之单进程状态机工作时序图【例10-7】Mealy型序列检测器(单进程)
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSCHKISPORT(DIN,CLK,RST:INSTD_LOGIC;SOUT:OUTSTD_LOGIC);ENDSCHK;ARCHITECTUREbehavOFSCHKISTYPEstatesIS(s0,s1,s2,s3,s4,s5,s6,s7,s8);--定义各状态SIGNALST:states:=s0;
BEGIN接下页--接上页PROCESS(ST,DIN)BEGINIFRST=‘1’THENST<=s0;
ELSIFCLK’EVENTANDCLK=‘1’THENCASESTIS----1101_0011WHENs0=>IFDIN=‘1’THENST<=S1;ELSEST<=S0;ENDIF;WHENs1=>IFDIN=‘1’THENST<=S2;ELSEST<=S0;ENDIF;WHENs2=>IFDIN=‘0’THENST<=S3;ELSEST<=S0;ENDIF;WHENs3=>IFDIN=‘1’THENST<=S4;ELSEST<=S0;ENDIF;WHENs4=>IFDIN=‘0’THENST<=S5;ELSEST<=S0;ENDIF;WHENs5=>IFDIN=‘0’THENST<=S6;ELSEST<=S0;ENDIF;WHENs6=>IFDIN=‘1’THENST<=S7;ELSEST<=S0;ENDIF;WHENs7=>IFDIN=‘1’THENST<=S8;ELSEST<=S0;ENDIF;WHENs8=>IFDIN=‘0’THENST<=S3;ELSEST<=S0;ENDIF;WHENOTHERS=>ST<=s0;ENDCASE;IF(ST=s8)THENSOUT<=‘1’;ELSESOUT<=‘0’;ENDIF;ENDIF;ENDPROCESS;ENDbehav;
图10-13例10-7之单进程状态机工作时序图10.4状态编码10.4.1直接输出型编码表10-1控制信号状态编码表每一位的编码值都赋予了实际的控制功能,即:
START=SOUT(4);ALE=SOUT(3);OE=SOUT(2);LOCK=SOUT(1)。状态状态编码功能说明START
ALE
OELOCKBST00
0
0
0
0初始态ST1
1
1
0
0
0启动转换ST2
0
0
0
0
1若测得EOC=1时,转下一状态ST3
ST3
0
0
1
0
0输出转换好的数据
ST4
0
0
1
1
0利用LOCK的上升沿将转换好的数据锁存【例10-8】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYADC0809ISPORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);CLK,EOC:INSTD_LOGIC;ALE,START,OE,ADDA:OUTSTD_LOGIC;c_state:OUTSTD_LOGIC_VECTOR(4DOWNTO0);Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDADC0809;ARCHITECTUREbehavOFADC0809ISSIGNALcs,SOUT:STD_LOGIC_VECTOR(4DOWNTO0);CONSTANTst0:STD_LOGIC_VECTOR(4DOWNTO0):=“00000";CONSTANTst1:STD_LOGIC_VECTOR(4DOWNTO0):=“11000";CONSTANTst2:STD_LOGIC_VECTOR(4DOWNTO0):="00001";CONSTANTst3:STD_LOGIC_VECTOR(4DOWNTO0):="00100";CONSTANTst4:STD_LOGIC_VECTOR(4DOWNTO0):="00110";SIGNALREGL:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLOCK:STD_LOGIC;BEGINADDA<=‘1’;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度项目成本控制与结算合同2篇
- 糖尿病压疮护理分享
- 废钢铁购销简单合同
- 碧桂园员工培训
- 人口普查培训
- 铝合金军用装备结构件制造合同
- 《数据恢复技术概述》课件
- 《如何确定教学目标》课件
- 数字金融解决方案
- 市场推广话术培训
- 钢结构课设钢结构平台计算书哈工大威海最终终
- PFMEA表格(范例)
- 前列腺增生的护理查房ppt课件
- 酒店前台专业术语常见缩写及解释
- 新教科版三年级上册科学 1.2《水沸腾了》 教案
- 潮州市乡镇信息技术教育的现状和对策
- 一体化净水设备安装、调试、运行操维护说明
- tpe、tpr-SGS检测报告(共4页)
- 行政执法程序流程图
- 士林SC系列变频器使用说明书
- 菜籽油生产加工建设项目可行性研究报告
评论
0/150
提交评论