状态机程序设计

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

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

1、第第6 6章章 状态机程序设计状态机程序设计6.16.1有限状态机引论有限状态机引论6.1.16.1.1有限状态机概念有限状态机概念 在一个复杂的控制系统中,可以将控制过程分为几步或几个状态,在每个状态下,控制系统的动作简单明确。我们只要根据系统的要实现的功能,画出状态转换图及每个状态下的动作或输出函数,即可实现有效控制。这种控制方式在数字系统中称为状态机,实际上就是控制系统理论中比较重要的步进控制。 睬嗓水城行椰勒搞年棋戮暑谢蔬掺累悸翻宋咎端闷衰绽夕当副墟雾蛊蒙绝状态机程序设计状态机程序设计例:AD574转换控制器 控制逻辑: CE CS RC X12/8 A0 工作状态0XXXX禁止X1X

2、XX禁止100X0启动12位转换100X1启动8位转换1011X12位数据输出10100高8位数据输出10101低4位数据输出操作时序状态转换图掣笑鲸埃俩疲迅佃嚼誉畏拉潘矿胡租吃际跪帚豹瞳汝酉送伯泼恶燕镊坍瓮状态机程序设计状态机程序设计要求控制器在现场信号作用下自动进行状态转换,并根据当前状态发出相应控制信号以控制现场。状态机就是完成这一目的。有限状态机及其设计技术是实用数字系统设计中的重要组成部分,是实现高效率高可靠逻辑控制的重要途径。 错栈肘耐景诌媒拈企逢责峰渴日茎磅交办掩琵肿闻佬疽剁绢政聘纱孕雏蠢状态机程序设计状态机程序设计6.1.2 状态机的优点 无论与基于VHDL的其他设计方案相比,

3、还是与可完成相似功能的CPU相比,状态机都有其难以超越的优越性,它主要表现在以下几方面:1、控制灵活、方便:状态机的工作方式是根据控制信号按照预先设定的状态顺序运行的,因此状态机在其运行方式上类似于控制灵活和方便的CPU。2、结构简单,便于设计:设计方案相对固定3、易构成性能良好的同步时序逻辑模块,避免竞争冒险现象。4、运行速度比CPU要高出三至四个数量级。5、可靠性:状态机由纯硬件电路构成;由非法状态跳出,只要2、3个时钟周期,所耗时间短 顶酱讳赠酱芽踌简博口吮掷惕遁踏轧率该钒顾讶缅斗讹婴窿菩数楚糜呕辜状态机程序设计状态机程序设计6.1.3 状态机的分类 1)从状态机的信号输出方式上分有Me

4、aly型和Moore型两种状态机。Mealy属于异步输出状态机。其输出是当前状态和所有输入信号的函数,它的输出是在输入变化后立即发生的,不依赖时钟的同步。Moore属于同步输出状态机,其输出则仅为当前状态的函数,这类状态机在输入发生变化还必须等待时钟的到来,时钟使状态发生变化时才导致输出的变化,所以比Mealy机要多等待一个时钟周期。2)从程序结构上分,有单进程状态机和多进程状态机。3)从编码方式上分有顺序编码状态机、一位热码编码状态机或其他编码方式状态机。硷逸蛆缩寅瞎硕锻橇瓦泅龙戏徊殊栽反览居胡接第推捡眩粘胖似厉依市汞状态机程序设计状态机程序设计6.2 6.2 典型状态机设计典型状态机设计

5、典型状态机设计由状态信号定义、准备下一状态进程、状态切换进程、输出进程等四部分构成。【例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、膜算歉或腋埠霹搁荫军炕谊以亡敞雷原赏膝羹链涵状态机程序设计状态机程序设计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 TYPE states IS (s0,sl,s2,s3,s4,s5); SIGNA

7、L c_st,n_st:states; SIGNAL LOCK:STD_LOGIC; BEGIN凰嫁池耙族逊孵眩哪详严酒兼钻陕撇卞们恭研搀黔黄霍副氓撂混厨玖遣盂状态机程序设计状态机程序设计1、状态信号定义:采用枚举数据类型定义系统中有哪些状态,并定义当前状态信号、下一状态信号。一般放在结构体的ARCHITECTURE和BEGIN之间。 在数字系统中,每一状态对应一个二进制数,称状态编码。如AD574控制有5个状态,可用3位二进制表示:(000、001、010、011、100)。但设计者在状态机的设计中,为了更利于阅读、编译和VHDL综合器的优化,往往将表征每一状态的二进制数组用文字符号来代表,

8、即所谓状态符号化。如(s0,sl,s2,s3,s4,s5),或者(READY,START,WAIT_H, WAIT_L ,READ, LOCK)等更直观的符号表示。高甘郎纤坪帖臃初联韧有握玲冀涛泽作攒否瞄浚冒涂责阉孕魄弯赞揍聪艇状态机程序设计状态机程序设计 PROCESS(c_st,STATUS) -准备下一状态 BEGIN -实现状态图连接 CASE c_st IS WHEN s0=n_stn_stIF(STATUS=1) THEN n_st=s3; ELSE n_st IF(STATUS=1) THEN n_st=s3; ELSE n_stn_stn_stn_st=s0; END CASE

9、;END PROCESS;攫主教套瑞绸柏鞋贤霉魄回共陀溢属蝗硝军拿涂渝剪叹洋蛰巴您颇水捅万状态机程序设计状态机程序设计2、准备下一状态进程: n根据外部输入的控制信号,和当前状态的状态值确定下一状态(next state)的取向,即next state的取值内容。n相当于用VHDL语言实现状态转换图的连接。n常用CASE语句。n进程敏感表为当前状态和状态机的输入信号。 勒床乞跋历粕幽踪律团悲傈汗叼扛霹京痪糕玄饱消鄙合婿国嗽脊诞约童窗状态机程序设计状态机程序设计-状态切换进程PROCESS (CLK) BEGIN IF(CLKEVENT AND CLK=1) THEN c_stCE=0;RC=0

10、;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;反曝削雾肢姆闹焕萌她小宇责烬荒芍娶奴将镊船缩趾笼陈示苗辈芥塌齐抛状态机程序设计状态机程序设计4、输出进程: n根据当前状态和输入,送出控制信号。割肠因服实参辉婶跟莉哭水棘庇厌刀塞邦梦疙岿靖浩伯城灾锥闹碟湾休饵状态机程序设计状态机程序设计PROCESS(LOCK) -数据保存 BEGIN IF LOCK=1AND LOCKEVENT THEN Q12n_st=s1; C

11、E=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;RC=0;LOCKN_STN_ST IF EOC=1 THEN N_ST=S2; ELSE N_ST IF EOC=0 THEN N_ST=S3; ELSE

12、N_ST N_STN_ST N_ST=S0; ALE=0;START=0;OE=0; LOCK=0; END CASE; END PROCESS;念笛尾胞搬琴朵是估间锯钨饿曰咨辫啼毯影林兄蹄吱逻乎漓窑搭苍今烘籽状态机程序设计状态机程序设计 PROCESS (clk) -STATE SWITCH,SEL+1 BEGIN IF (CLKEVENT AND CLK=1) THEN C_ST=N_ST; SELD4 D4 D4 D4 D4 D4 D4 D4 NULL; END CASE; END PROCESS;琉革滋匀钱提借偶渤勒方洁赊给缸吮促嘶础比烬雷割潮萄褒吾淡糜防积浮状态机程序设计状态机程序设

13、计PROCESS (LOCK) -save data BEGIN IF (LOCKEVENT AND LOCK=1) THEN D8=D; END IF;END PROCESS;-字型转换进程(略)HEXLED D4LED8END BODY;卵其补阀丁钩娱骂疲糕沏郎迷现锈盗掀粹好此禁虚馒哄趁胃窝骆串寡纶雇状态机程序设计状态机程序设计【例6-3】根据状态转换图给出状态机设计,S0S3为状态号,圈内为输出。带复位信号,复位为S0 .LIBRARY 1EEE;USE IEEESTD_ LOGIC_1164ALL; ENTITY s_ machine IS port( clk,reset:IN STD

14、_LOGIC; inputs :IN STD_LOGIC_VECTOR (0 TO 1); outputs :OUT INTEGER range (0 to 15 );END s_ machine; 殷牢设瞥蚤举暂钟讥盟怎枪张谦促奏汤宰拈尘现浸恶淹垛溉措弃化殴匪尘状态机程序设计状态机程序设计 ARCHITECTURE behav OF s_machine IS Type states is (s0, s1, s2, s3); SIGNAl c_s,n_s:states; BEGINPROCESS (reset,clk) -状态切换 BEGIN IF reset = 1 THEN c_ s =

15、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; If inputs = “11” THen n_s=s3; ELSE n_sn_s=s0; END case; END PROCESS;END behav;簿艺控祷勘弯崔现浦茧处扬锄隆满剩拷宇绢继忌死

16、源蹬抖冈叫炳垄率船腥状态机程序设计状态机程序设计6.3 6.3 状态机的改进状态机的改进6.3.1、状态机输出毛刺现象的克服当状态机的输出信号由组合电路发出时,一般情况下难免出现毛刺现象,如果这些输出被用于作为时钟信号,极易产生错误的操作。单进程Moore状态机比较容易构成能避免出现毛刺现象的状态机。 你诫消告厚绵拘泽楔逊瞳梭呼玖倔匠珊写伊却巴煌奥牲池趣徽饲疤聂锐颗状态机程序设计状态机程序设计【例6-5】例6-4,单进程LIBRARY IEEE;USE IEEESTD_LOGIC_1164ALL;ENTITY MOOREl ISPORT(DATAIN:IN STD_LOGIC_VECTOR(1

17、 DOWNTO 0); CLK,RST:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END MOOREl;募暴虽疤萝负训姻古洪航鸳乔非唁前初皱荚荒钳妻狡庆荣啥融档魁煤刨社状态机程序设计状态机程序设计ARCHITECTURE behav OF MOOREl ISTYPE ST_TYPE IS (ST0,STl,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; ELS

18、E 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; QIF 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;宝辐含肉丑藩

19、透坛涯隙猜仆捂嚼玻尹念然皋畔谤垫溃铆航廉星梳匿堆魏骚状态机程序设计状态机程序设计对二进程、三进程状态机,为了解决输出信号毛刺现象,可以将输出信号由时钟信号锁存后再输出。ARCHITECTURE behav OF CLKLOCK IS TYPE states IS (s0,s1,s2,s3); SIGNAL STX:states; BEGIN PROCESS(CLK,RESET) -决定转换状态的进程 BEGIN IF RESET=1THEN STX IF DATAIN=”00” THEN STX=S0; ELSE STXWHEN s1= IF DATAIN=”00” THEN STX=s1 I

20、F 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 DATAIN=”11” THEN STX=S3; ELSE STX=S0 ELSE STXSTXSTX=st0;END CASE END CASE ; END IFEND IF; END PROCESS END PROCESS ;END behav;END

21、behav;岸泅墒装呀腑疙茬捍茬倾丢爹舷膜体户滩磷捻脊夹吩箩是赫孵镁参吾氏熟状态机程序设计状态机程序设计对二进程、三进程状态机,为了解决输出信号毛刺现象,可以将输出信号由时钟信号锁存后再输出。ARCHITECTURE behav OF CLKLOCK ISTYPE states IS (s0,s1,s2,s3); SIGNAL STX:states; BEGIN PROCESS(CLK,RESET) BEGIN -决定转换状态的进程 IF RESET=1THEN STXIF DATAIN=”00” THEN STX=S0; ELSE STXIF DATAIN=”00” THEN STX=s1;

22、 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;窍询大监斯量哭再锚雪习牌瞧碟蓄额茄这探顷醋淫掳郧钳刚首叭质倾吐殷状态机程序设计状态机程序设计6.3.2 6.3.2 状态编码状态编码用文字符号如s0、s1定义各状态变量的状态机称为符号化状态机。其状态变量具体编码由VHDL综合器根据具体情况确定自动对编码方式进行选择。状态机的状态编码方式也可人为控制。为了满足一些特殊需要,

23、在状态机设计程序中,可直接将各状态用具体的二进制数进行定义,而不使用文字符号定义。 弛汪檀颖摩撞回涨娩窟荣丁醚秃腕辨妄佯沥嗣氦必琼绰陌福妆合铃砍论淋状态机程序设计状态机程序设计1、状态位直接输出型编码:最典型的应用实例就是计数器。计数器本质上是一个主控时序进程与主控组合进程合二为一的状态机,它的输出就是各状态的状态码。 2、顺序编码 这种编码方式最为简单,且使用的触发器数量最少,剩余的非法状态最少,容错技术最为简单。 这种顺序编码方式的缺点是,尽管节省了触发器,却增加了从状态向输出转换的译码组合逻辑。3、一位热码编码(One-hot encoding) 一位热码编码方式(表7-3)就是用n个触

24、发器来实现具有n个状态的状态机,状态机中的每一个状态都由其中一个触发器的状态表示。即当处于该状态时,对应的触发器为1,其余的触发器都置0。 用了较多的触发器,但编码方式大为简化状态译码逻辑,提高了状态转换速度, 备戮惟兹薄空抛类颗握漱斡塘棱晌赞侨屏届热逢作香煮笺楔洋证螟惹嘶显状态机程序设计状态机程序设计6.3.3 6.3.3 状态机剩余状态处理状态机剩余状态处理 n 在状态机设计中,不管使用何种编码,总是不可避免地出现大量剩余状态,即未被使用的编码组合,称为非法状态。如果不对这些非法状态进行处理,在外界不确定的干扰或随机上电的初始启动后,状态机都有可能进入不可预测的非法状态,导致失控。因此,状态机的剩余状态的处理,即状态机系统容错技术的应用是设计者必须慎重考虑的问题。n解决的方法是利用OTHERS语句对未提到的状态作统一处理,即CASE语句最后一个条件为:n WHEN OTHERS= next state=st0; 寸汁唉截狭矿瓣威恳岿孙袖烈仪赋王兹谣皖夜看幌茅便焚隘择液崭讼各孔状态机程序设计状态机程序设计

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

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

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