版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七讲状态机设计7.1一般有限状态机设计
7.1.1数据类型定义语句
TYPE语句的用法如下:
TYPE数据类型名
IS数据类型定义
OF基本数据类型
;或
TYPE数据类型名
IS数据类型定义
;TYPEst1ISARRAY(0TO15)OFSTD_LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);7.1一般有限状态机设计
7.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';SUBTYPE子类型名
IS基本数据类型
RANGE约束范围;
SUBTYPEdigitsISINTEGERRANGE0to9;
7.1一般有限状态机设计
7.1.2为什么要使用状态机
状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点
状态机可以定义符号化枚举类型的状态状态机容易构成性能良好的同步时序逻辑模块状态机的VHDL表述丰富多样、程序层次分明,易读易懂在高速运算和控制方面,状态机更有其巨大的优势高可靠性7.1一般有限状态机设计
7.1.3一般有限状态机的设计
1.说明部分ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;...7.1一般有限状态机设计
7.1.3一般有限状态机的设计
2.主控时序进程图7-1一般状态机结构框图
7.1一般有限状态机设计
KX康芯科技7.1.3一般有限状态机的设计
3.主控组合进程4.辅助进程【例7-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)--主控时序进程
(接下页)KX康芯科技BEGINIFreset='1'THENcurrent_state<=s0;--检测异步复位信号
ELSIFclk='1'ANDclk'EVENTTHENcurrent_state<=next_state;ENDIF;ENDPROCESS;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;7.1一般有限状态机设计
7.1.3一般有限状态机的设计
图7-2a例7-1状态机的工作时序
4.辅助进程7.1一般有限状态机设计
7.1.3一般有限状态机的设计
图7-2c例7-1的状态图
4.辅助进程7.2Moore型有限状态机设计7.2.1多进程有限状态机
图7-3ADC0809工作时序
7.2Moore型有限状态机设计
7.2.1多进程有限状态机
图7-4控制ADC0809采样状态图
7.2.1多进程有限状态机
图7-5采样状态机结构框图
【例7-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',则进入通道IN1Q<=REGL;LOCK0<=LOCK;COM:PROCESS(current_state,EOC)BEGIN--规定各状态转换方式
CASEcurrent_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<='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;【例7-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;
7.2Moore型有限状态机设计
7.2.1多进程有限状态机
图7-6ADC0809采样状态机工作时序
7.2Moore型有限状态机设计
KX康芯科技7.2.2单进程Moore型有限状态机
【例7-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;7.2Moore型有限状态机设计
7.2.2单进程Moore型有限状态机
图7-8例7-4单进程状态机工作时序
7.3Mealy型有限状态机设计
KX康芯科技【例7-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;WHENst1=>IFDATAIN='0'THENSTX<=st2;ENDIF;
(接下页)KX康芯科技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;7.3Mealy型有限状态机设计
图7-10例7-5状态机工作时序图7.3Mealy型有限状态机设计
图7-11例7-6状态机工作时序图
7.3Mealy型有限状态机设计
KX康芯科技【例7-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;7.4状态编码
7.4.1状态位直接输出型编码
状态
ST000000初始态ST111000启动转换ST200001若测得EOC=1时,转下一状态ST3ST300100输出转换好的数据ST400110利用LOCK的上升沿将转换好的数据锁存STARTALEOELOCKB功
能
说
明状
态
编
码表7-1控制信号状态编码表
7.4状态编码
KX康芯科技【例7-7】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYAD0809IS...PORT(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));ENDAD0809;ARCHITECTUREbehavOFAD0809ISSIGNALcurrent_state,next_state: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);SIGNALREGL:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLOCK:STD_LOGIC;(接下页)KX康芯科技BEGINADDA<='1';Q<=REGL;START<=current_state(4);ALE<=current_state(3);OE<=current_state(2);LOCK<=current_state(1);c_state<=current_state;COM:PROCESS(current_state,EOC)BEGIN--规定各状态转换方式
CASEcurrent_stateISWHENst0=>next_state<=st1;--0809初始化
WHENst1=>next_state<=st2;--启动采样
WHENst2=>IF(EOC='1')THENnext_state<=st3;--EOC=1表明转换结束
ELSEnext_state<=st2;--转换未结束,继续等待
ENDIF;WHENst3=>next_state<=st4;--开启OE,输出转换好的数据
WHENst4=>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;7.4状态编码
图7-12例7-7状态机工作时序图
7.4.1状态位直接输出型编码
7.4状态编码
7.4.2顺序编码
表7-2编码方式
状
态顺序编码一位热码编码STATE0000100000STATE1001010000STATE2010001000STATE3011000100STATE4100000010STATE51010000017.4状
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宜昌市宜都市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 湛江市坡头区2025-2026学年第二学期四年级语文第六单元测试卷(部编版含答案)
- 德阳市绵竹市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 黔西南布依族苗族自治州晴隆县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 怀化市中方县2025-2026学年第二学期四年级语文期中考试卷(部编版含答案)
- 滨州地区惠民县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 纪委监委巡视工作制度
- 网点消防安全工作制度
- 高中生心理压力释放
- 2025年山东医学高等专科学校辅导员考试真题
- 工贸企业全员安全责任制考核试卷及答案(2026年)
- 2026年云南省能源投资集团有限公司校园招聘笔试备考题库及答案解析
- 2026北师大版小学数学二年级下册第三单元综合测试卷及答案(3套)
- 2026年及未来5年市场数据中国红外热成像芯片行业市场调查研究及投资前景展望报告
- 医院宣传工作方案
- 浙江省舟山市2026年中考三模数学试题附答案
- 2026年高考二轮生物复习备考策略
- 《常用分析仪器使用与维护》配套教学课件
- 新湘教版四年级下册美术全册教案(直接打印)
- 生活垃圾卫生填埋场建设与运行评价标准
- R语言基础培训第一讲R语言入门
评论
0/150
提交评论