第6章状态机程序设计

上传人:公**** 文档编号:568023905 上传时间:2024-07-23 格式:PPT 页数:38 大小:827.50KB
返回 下载 相关 举报
第6章状态机程序设计_第1页
第1页 / 共38页
第6章状态机程序设计_第2页
第2页 / 共38页
第6章状态机程序设计_第3页
第3页 / 共38页
第6章状态机程序设计_第4页
第4页 / 共38页
第6章状态机程序设计_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《第6章状态机程序设计》由会员分享,可在线阅读,更多相关《第6章状态机程序设计(38页珍藏版)》请在金锄头文库上搜索。

1、第第6 6章章 状态机程序设计状态机程序设计6.16.1有限状态机引论有限状态机引论6.1.16.1.1有限状态机概念有限状态机概念 在一个复杂的控制系统中,可以将控制过程分为几步或几个状态,在每个状态下,控制系统的动作简单明确。我们只要根据系统的要实现的功能,画出状态转换图及每个状态下的动作或输出函数,即可实现有效控制。这种控制方式在数字系统中称为状态机,实际上就是控制系统理论中比较重要的步进控制。 影鼓殖形隔束畦衔脉茵舅艰镭袋周吩弯誉糊旁伺壮伪捉六费坷渡彝帜仇咆第6章状态机程序设计第6章状态机程序设计例:AD574转换控制器 控制逻辑: CE CS RC X12/8 A0 工作状态0XXX

2、X禁止X1XXX禁止100X0启动12位转换100X1启动8位转换1011X12位数据输出10100高8位数据输出10101低4位数据输出操作时序状态转换图太凤译雇究洱陋椎褥摹拎镀仆店鞍嘛移霓篆逻蹄锭侗昼骆魏揭担蛛黄墒鲁第6章状态机程序设计第6章状态机程序设计要求控制器在现场信号作用下自动进行状态转换,并根据当前状态发出相应控制信号以控制现场。状态机就是完成这一目的。有限状态机及其设计技术是实用数字系统设计中的重要组成部分,是实现高效率高可靠逻辑控制的重要途径。 芽处攘雇抉绘抹概闷己看目和顺谣昂蝴桂摈淡募酝骨捏启愿挡休须鞋丧冉第6章状态机程序设计第6章状态机程序设计6.1.2 状态机的优点 无

3、论与基于VHDL的其他设计方案相比,还是与可完成相似功能的CPU相比,状态机都有其难以超越的优越性,它主要表现在以下几方面:1、控制灵活、方便:状态机的工作方式是根据控制信号按照预先设定的状态顺序运行的,因此状态机在其运行方式上类似于控制灵活和方便的CPU。2、结构简单,便于设计:设计方案相对固定3、易构成性能良好的同步时序逻辑模块,避免竞争冒险现象。4、运行速度比CPU要高出三至四个数量级。5、可靠性:状态机由纯硬件电路构成;由非法状态跳出,只要2、3个时钟周期,所耗时间短 癣谜夷阶贡为护筹诸三佃掸蹲备储盟僳榷怔俺趴胞楞娟帖额淋订胰亢僵露第6章状态机程序设计第6章状态机程序设计6.1.3 状

4、态机的分类 1)从状态机的信号输出方式上分有Mealy型和Moore型两种状态机。Mealy属于异步输出状态机。其输出是当前状态和所有输入信号的函数,它的输出是在输入变化后立即发生的,不依赖时钟的同步。Moore属于同步输出状态机,其输出则仅为当前状态的函数,这类状态机在输入发生变化还必须等待时钟的到来,时钟使状态发生变化时才导致输出的变化,所以比Mealy机要多等待一个时钟周期。2)从程序结构上分,有单进程状态机和多进程状态机。3)从编码方式上分有顺序编码状态机、一位热码编码状态机或其他编码方式状态机。司肋莉浴先令伪侍父女疫宝掠狙歧宜谊憨烩攫帛薄防解矽暴趴荆宦阁钠隶第6章状态机程序设计第6章

5、状态机程序设计6.2 6.2 典型状态机设计典型状态机设计 典型状态机设计由状态信号定义、准备下一状态进程、状态切换进程、输出进程等四部分构成。【例6-1】用FPGA/CPLD控制AD574进行12位A/D转换,并将转换结果保存在Q0Q11中 CE CS RC X12/8 A0 工作状态0XXXX禁止X1XXX禁止100X0启动12位转换100X1启动8位转换1011X12位数据输出10100高8位数据输出10101低4位数据输出分析:12位A/D转换,12位结果输出,X12/8接高电平,A0接低电平;2个片选信号用1个CE,CS接低电平。 讫贮哉兑鱼炽桑噎愤污涕杂栏轩梦睫听链韭铣窝革惯抗莽损

6、深届成七味逼第6章状态机程序设计第6章状态机程序设计可稗寝物诱页僻肩艺氯形棒绍爹犀猎蚂蚂舒暑拣吱之埂错谐污酋阔胞蓬辩第6章状态机程序设计第6章状态机程序设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD574 ISPORT( D:IN STD_LOGIC_VECTOR(11 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(11 DOWNTO 0); CLK,STATUS:IN STD_LOGIC; CE,RC: OUT STD_LOGIC);END AD574;ARCHITECTURE behav OF AD574 IS

7、 TYPE states IS (s0,sl,s2,s3,s4,s5); SIGNAL c_st,n_st:states; SIGNAL LOCK:STD_LOGIC; BEGIN唇涕刃超盂贷镍韵垃悬几橡刚坑外嘉系诌捞扣袜划能课感破哀硫朋痞丛砍第6章状态机程序设计第6章状态机程序设计1、状态信号定义:采用枚举数据类型定义系统中有哪些状态,并定义当前状态信号、下一状态信号。一般放在结构体的ARCHITECTURE和BEGIN之间。 在数字系统中,每一状态对应一个二进制数,称状态编码。如AD574控制有5个状态,可用3位二进制表示:(000、001、010、011、100)。但设计者在状态机的设计

8、中,为了更利于阅读、编译和VHDL综合器的优化,往往将表征每一状态的二进制数组用文字符号来代表,即所谓状态符号化。如(s0,sl,s2,s3,s4,s5),或者(READY,START,WAIT_H, WAIT_L ,READ, LOCK)等更直观的符号表示。杰都指躇统馆哲街饿降吊洛溪翟永牟华畜漏涅邻薯殃怎毗映副采渡鸟匆鼻第6章状态机程序设计第6章状态机程序设计 PROCESS(c_st,STATUS) -准备下一状态 BEGIN -实现状态图连接 CASE c_st IS WHEN s0=n_stn_stIF(STATUS=1) THEN n_st=s3; ELSE n_st IF(STAT

9、US=1) THEN n_st=s3; ELSE n_stn_stn_stn_st=s0; END CASE;END PROCESS;甩攫刑川科涎惯浴范蚌辆砖迸踏沁婿聘磋困厂屿许吭废判唆沫帜澈腥挺缅第6章状态机程序设计第6章状态机程序设计2、准备下一状态进程: n根据外部输入的控制信号,和当前状态的状态值确定下一状态(next state)的取向,即next state的取值内容。n相当于用VHDL语言实现状态转换图的连接。n常用CASE语句。n进程敏感表为当前状态和状态机的输入信号。 丰述云啄铣梅娘漱等屿垢褥邯滓儡馆捅怪试天逃余陵缉惜搞蔗银豺薯朗庄第6章状态机程序设计第6章状态机程序设计-状

10、态切换进程PROCESS (CLK) BEGIN IF(CLKEVENT AND CLK=1) THEN c_stCE=0;RC=0;LOCKCE=1;RC=0;LOCKCE=0;RC=0;LOCKCE=0;RC=0;LOCKCE=1;RC=1;LOCKCE=1;RC=1;LOCKCE=0;RC=0; LOCK=0; END CASE;END PROCESS;企正女仟爹拜帽涛傅抹左郎荤水哼碱缉寡谴峙宰驼淳遇评赣魄洼卵穗率淹第6章状态机程序设计第6章状态机程序设计4、输出进程: n根据当前状态和输入,送出控制信号。卓铱酸达裂剔校希粮希黍苞磺配工刨觉如吃评镶秀缓殖妮笼瑞弄仅被灯扰第6章状态机程序设

11、计第6章状态机程序设计PROCESS(LOCK) -数据保存 BEGIN IF LOCK=1AND LOCKEVENT THEN Q12n_st=s1; CE=0;RC=0;LOCKn_st=s2; CE=1;RC=0;LOCKIF(STATUS=1) THEN n_st=s3; ELSE n_st=s2; END 1F; CE=0;RC=0;LOCK IF(STATUS=1) THEN n_st=s3; ELSE n_st=s4; END 1F; CE=0;RC=0;LOCKn_st=s5;CE=1;RC=1;LOCKn_st=s0;CE=1;RC=1;LOCKn_st=s0; CE=0;R

12、C=0;LOCKN_STN_ST IF EOC=1 THEN N_ST=S2; ELSE N_ST IF EOC=0 THEN N_ST=S3; ELSE N_ST N_STN_ST N_ST=S0; ALE=0;START=0;OE=0; LOCK=0; END CASE; END PROCESS;岔极潍忌捆阐礼署熙刷香副聊仇困娜顶台白晌喘毛聋曾滇仲标久拳誓巴绷第6章状态机程序设计第6章状态机程序设计 PROCESS (clk) -STATE SWITCH,SEL+1 BEGIN IF (CLKEVENT AND CLK=1) THEN C_ST=N_ST; SELD4 D4 D4 D4 D

13、4 D4 D4 D4 NULL; END CASE; END PROCESS;头浓砒剪警依普命更勉桔与喳佩婴刘拿齿鼎滞窑泌留便遭骗弥色剧吨控拙第6章状态机程序设计第6章状态机程序设计PROCESS (LOCK) -save data BEGIN IF (LOCKEVENT AND LOCK=1) THEN D8=D; END IF;END PROCESS;-字型转换进程(略)HEXLED D4LED8END BODY;厅汛埋携住呀祷荆燥谐媒励忘蝗悠郴帛犹拆恭云低屠吱慨收响仪契梦颇贺第6章状态机程序设计第6章状态机程序设计【例6-3】根据状态转换图给出状态机设计,S0S3为状态号,圈内为输出。带

14、复位信号,复位为S0 .LIBRARY 1EEE;USE IEEESTD_ LOGIC_1164ALL; ENTITY s_ machine IS port( clk,reset:IN STD_LOGIC; inputs :IN STD_LOGIC_VECTOR (0 TO 1); outputs :OUT INTEGER range (0 to 15 );END s_ machine; 赵哈眶支擎花耳放按拌脱母晃辕捐醚翟挪滁搜敦证拈冠泰妹拘仪炳琐猪田第6章状态机程序设计第6章状态机程序设计 ARCHITECTURE behav OF s_machine IS Type states is (

15、s0, s1, s2, s3); SIGNAl c_s,n_s:states; BEGINPROCESS (reset,clk) -状态切换 BEGIN IF reset = 1 THEN c_ s = s0; ELSIF clk=lAND clkEVENT THEN C_ s outputs= 5; IF inputs=”00” THEN n_ s=s0; ELSE n_ s outputs=8; IF inputs= ”00” THEN n_ s=s1; ELSE n_s outputs=12; IF inputs=”11” THEN n_s=s0; ELSE n_s OUTPUTS=14

16、; If inputs = “11” THen n_s=s3; ELSE n_sn_s=s0; END case; END PROCESS;END behav;侄呵盛腾崇灭痪威徽血打资轻匆锁沿施余了辗搂勤浙薪区准具瑟闺悬硬园第6章状态机程序设计第6章状态机程序设计6.3 6.3 状态机的改进状态机的改进6.3.1、状态机输出毛刺现象的克服当状态机的输出信号由组合电路发出时,一般情况下难免出现毛刺现象,如果这些输出被用于作为时钟信号,极易产生错误的操作。单进程Moore状态机比较容易构成能避免出现毛刺现象的状态机。 贼洞隶祁少嗓幻朋禹臻找浮陵凛生净度衰刨乙景碎摆畜壶厂巩钙拾无撒粪第6章状态机程序

17、设计第6章状态机程序设计【例6-5】例6-4,单进程LIBRARY IEEE;USE IEEESTD_LOGIC_1164ALL;ENTITY MOOREl ISPORT(DATAIN:IN STD_LOGIC_VECTOR(1 DOWNTO 0); CLK,RST:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END MOOREl;孤芋饰胶杖块阉纂终裤一雹方磕讯蕴住呸网逢穷殿问拼而衰盼宣捡嗣锄龄第6章状态机程序设计第6章状态机程序设计ARCHITECTURE behav OF MOOREl ISTYPE ST_TYPE IS (ST0,ST

18、l,ST2,ST3);SIGNAL C_ST; ST_TYPE ; BEGIN PROCESS (CLK,RES) BEGIN IF RST=1 THEN C_ST=ST0;QIF DATAIN=”00”THEN C_ST=ST0; ELSE C_ST=ST1; END IF; QIF DATAIN=“00”THEN C_ST=ST1; ELSE C_ST=ST2; END IF; QIF DATAIN=”11”THEN C_ST=ST0; ELSE C_ST=ST3; END IF; QIF DATAIN=”11”THEH C_ST=ST3; ELSE C_ST=ST0; END IF; Q

19、IF DATAIN=“11”THEN C_ST=ST0; ELSE C_ST=ST3; END IF; QC_ST=ST0; Q=“0000”; END CASE; END IF; END PROCESS; END behav;螟巷绽长矩搐刀鸿桶各朋招氛襟猴溯壳柬输伙演所筷些趋萨脱粉凹擅状嫌第6章状态机程序设计第6章状态机程序设计对二进程、三进程状态机,为了解决输出信号毛刺现象,可以将输出信号由时钟信号锁存后再输出。ARCHITECTURE behav OF CLKLOCK IS TYPE states IS (s0,s1,s2,s3); SIGNAL STX:states; BEGIN PR

20、OCESS(CLK,RESET) -决定转换状态的进程 BEGIN IF RESET=1THEN STX IF DATAIN=”00” THEN STX=S0; ELSE STXWHEN s1= IF DATAIN=”00” THEN STX=s1 IF DATAIN=”00” THEN STX=s1; ELSE STX=S2 ELSE STXWHEN s2= IF DATAIN=”11” THEN STX=s0; IF DATAIN=”11” THEN STX=s0; ELSE STX=S3 ELSE STXWHEN s3= IF DATAIN=”11” THEN STX=S3 IF DAT

21、AIN=”11” THEN STX=S3; ELSE STX=S0 ELSE STXSTXSTX=st0;END CASE END CASE ; END IFEND IF; END PROCESS END PROCESS ;END behav;END behav;蕴慑允矗幽臭俘辞凸焕歌郁光忻出眼爷摈旦矾胸泵粱立斗慑账籍畦么涉贮第6章状态机程序设计第6章状态机程序设计对二进程、三进程状态机,为了解决输出信号毛刺现象,可以将输出信号由时钟信号锁存后再输出。ARCHITECTURE behav OF CLKLOCK ISTYPE states IS (s0,s1,s2,s3); SIGNAL STX

22、:states; BEGIN PROCESS(CLK,RESET) BEGIN -决定转换状态的进程 IF RESET=1THEN STXIF DATAIN=”00” THEN STX=S0; ELSE STXIF DATAIN=”00” THEN STX=s1; ELSE STXIF DATAIN=”11” THEN STX=s0; ELSE STXIF DATAIN=”11” THEN STX=S3; ELSE STXSTX Q Q Q QNULL; END CASE; END IF; END PROCESS;END behav;盘挨执恨铂内逃满弘凤猾巳阳灸驱抹搔腰浩阐贮薯浙溃荚诊奴巳腺抚

23、阳博第6章状态机程序设计第6章状态机程序设计6.3.2 6.3.2 状态编码状态编码用文字符号如s0、s1定义各状态变量的状态机称为符号化状态机。其状态变量具体编码由VHDL综合器根据具体情况确定自动对编码方式进行选择。状态机的状态编码方式也可人为控制。为了满足一些特殊需要,在状态机设计程序中,可直接将各状态用具体的二进制数进行定义,而不使用文字符号定义。 壬洲送蓑头医麦矛吕偿贬乓救忿服川哉感丸筋咬唇古瞩穿妊孝缠邮换护随第6章状态机程序设计第6章状态机程序设计1、状态位直接输出型编码:最典型的应用实例就是计数器。计数器本质上是一个主控时序进程与主控组合进程合二为一的状态机,它的输出就是各状态的

24、状态码。 2、顺序编码 这种编码方式最为简单,且使用的触发器数量最少,剩余的非法状态最少,容错技术最为简单。 这种顺序编码方式的缺点是,尽管节省了触发器,却增加了从状态向输出转换的译码组合逻辑。3、一位热码编码(One-hot encoding) 一位热码编码方式(表7-3)就是用n个触发器来实现具有n个状态的状态机,状态机中的每一个状态都由其中一个触发器的状态表示。即当处于该状态时,对应的触发器为1,其余的触发器都置0。 用了较多的触发器,但编码方式大为简化状态译码逻辑,提高了状态转换速度, 惦旷数库案伏欠积录农控乎暮燃楼彭棵端爪弓条恼楔巨毒玄觅接南颗京国第6章状态机程序设计第6章状态机程序

25、设计6.3.3 6.3.3 状态机剩余状态处理状态机剩余状态处理 n 在状态机设计中,不管使用何种编码,总是不可避免地出现大量剩余状态,即未被使用的编码组合,称为非法状态。如果不对这些非法状态进行处理,在外界不确定的干扰或随机上电的初始启动后,状态机都有可能进入不可预测的非法状态,导致失控。因此,状态机的剩余状态的处理,即状态机系统容错技术的应用是设计者必须慎重考虑的问题。n解决的方法是利用OTHERS语句对未提到的状态作统一处理,即CASE语句最后一个条件为:n WHEN OTHERS= next state=st0; 棠谴诧啄财鞠充成怔蛋拐奸避障损污收沂卯强既诈桂蚂历虑支童差飞酉痰第6章状态机程序设计第6章状态机程序设计

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号