模拟电子状态机基础设计

上传人:第*** 文档编号:56445639 上传时间:2018-10-12 格式:PPT 页数:82 大小:682.50KB
返回 下载 相关 举报
模拟电子状态机基础设计_第1页
第1页 / 共82页
模拟电子状态机基础设计_第2页
第2页 / 共82页
模拟电子状态机基础设计_第3页
第3页 / 共82页
模拟电子状态机基础设计_第4页
第4页 / 共82页
模拟电子状态机基础设计_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《模拟电子状态机基础设计》由会员分享,可在线阅读,更多相关《模拟电子状态机基础设计(82页珍藏版)》请在金锄头文库上搜索。

1、模拟电子状态机基础设计 有限状态机及其设计技术是数字系统设计的重要组成部分,采用硬件描述语言设计状态机使状态机设计更简单与实用。可编程逻辑器件、硬件描述语言与状态机设计技术三者的结合可以解决很多工业控制问题。,状态就是一个事物的状况或处境,在某种状态出现的时候,该事物就满足某些条件、实行某些活动或等待某些事件,状态可以由一组属性来描述。例如,信誉卡账号的状态与资金平衡和支付历史有关,而传真机的状态是等待、发送和接收。 状态表、状态图、状态的文字描述就是对一个事物在某个事件发生后从一个源状态到另外一个目的状态转移的说明。 一个状态描述需要五个要素:状态、输入信号、输出信号、状态转移函数、输出函数

2、。 如果在一个状态中包含着另一个状态序列,则称该状态为复合状态。 状态机就是能够根据状态转移条件进行状态转换和输出状态活动的自动机。如果状态数量有限、输入数量有限、输出数量有限,则称为有限状态机。 状态机可以用硬件描述语言描述、数字电路实现,也可以C语言描述,单片机实现。,状态机的一般模型如图2-1所示。,1.1 时钟同步有限状态机 如果一个状态机的状态变化需要和时钟信号同步,则称为同步状态机。在同步状态机中时钟是状态变化的必要条件。 1. 结构,2. 输出逻辑 如果一个时序电路的输出与现在状态和输入有关,则称为梅里状态机。如果状态机的输出只与现在状态有关,则称摩尔状态机。,与输入无关,在某状

3、态下才有的输出,称为摩尔输出。摩尔输出一定和状态变化同步。,3. 管道输出 具有管道输出的状态机如图12-4所示。该种状态机的输出可以与时钟同步。,1.2 时钟同步状态机设计 1. 传统设计步骤 传统的设计方法就是使用中小集成电路设计状态机的方法,在设计中没有硬件描述语言支持。 (1)根据实际问题的文字说明建立状态/输出表或是状态图,状态可以使用文字表示。 (2)通过化简,使状态最小化。 (3)确定状态变量,进行状态编码。 (4)将变量和编码的状态代入状态/输出表,建立现态/输入-次态/输出表以表明现态/输入与次态/输出之间的关系。 (5)选择触发器类型 (6)建立驱动表 (7)从驱动表得到驱

4、动方程 (8)从现态/输入-次态/输出表中得到输出方程 (9)画逻辑图 在这些步骤中,第一步最重要,,2. 硬件描述语言支持下的设计步骤 由于硬件描述语言支持状态机设计,所以只要把实际问题转换成状态表或是状态图,则很容易使用硬件描述语言描述。也就是说,在硬件描述语言支持下的状态机设计,只需要传统设计方法的前三步。 3. 状态编码 具有n个状态变量的状态机具有2n个状态。究竟一个状态用什么样的二进制数表示,就是状态编码问题。 在状态编码时应该考虑的一些因素: (1)选择初始状态的编码与状态机的复位状态相同,这样就会使状态机复位时就回到状态机的初始状态。 (2)每一次状态变化,应该使变化的状态变量

5、最少。 (3)如果有未使用的状态,则尽量选择可以达到简化逻辑设计的状态编码。设计中应该保证从未使用状态一定可以进入初始状态。,4. 主从状态机 一个大的状态机设计是非常复杂的,一般情况下,最好将大的状态机分解成小状态机的集合。一般划分的原则是按照功能划分,主要输入、输出和控制算法由主状态机完成,而辅助的、在主状态机控制下的算法由子状态机完成,就是说主状态机完成顶层算法,子状态机完成底层算法。 最常见的状态机划分就是将计数器作为子状态机,这时,主状态机只要发出启动信号,而等待计数器返回的计数完成信号。,5. 状态转移条件 状态转移的条件和输入的信号数有关,n个输入信号,将有2n个转移条件,这些条

6、件之间应该是互斥的,只能有一个转移条件有效。也就是只能转移到另外一个状态,而不是一个以上的状态。 一个状态只向另外一个状态转移的状态机是最简单的状态机,因为只有一个状态转移条件。 有些状态图或表只给出本状态向外状态的转移条件,而向本状态转移的条件未给出,这种情况可以理解为只要不向外状态转移就保持在本状态不动。,6. 状态机的输入信号 状态机的输入信号常常是按钮信号,既然是按钮信号,则按下去的时间长短是随机的,可能是一个或几个状态机时钟脉冲的时间,如果状态机的状态转移是在某输入信号的作用之下连续转移,例如,在状态1,当按钮第一次为0时,转移到状态2,第二次为0时转移到状态1,则会因为按钮一直保持

7、在0,引起状态不断的转换,不能实现每按一次按钮,转换一次状态的目的。 。,解决的方法是使一个按钮按下后,只在状态变化的时钟沿输出一个时钟周期低电平的电路。图12-6是实现该功能的微分电路。输出波形如图12-7所示,图中,anniu是按钮信号,output是输出信号。,图12-8是对脉冲的上升沿、下降沿和上升下降沿进行的微分电路。图12-9是该电路的输出波形,在该波形图中,anniu是按钮信号,up是上升沿微分信号、down是下降沿微分信号,up_down是上升下降沿信号,图12-10是另外一种消除抖动电路,该电路可以输出电平信号,从消除抖动的角度来说,也需要按钮抖动的时间小于一个脉冲周期,图1

8、2-11是该电路的输出波形。,用增加状态的方法禁止按键按下1次状态多次转换的情况如图12-14所示,当按键key按下(key=0)时,从状态S0进入S1,只要按键按下,就在S1状态,直到按键抬起(key=1),到达稳定状态S2。这样就可以消除由于按键按下时间长,状态机时钟周期短造成的多状态转移的情况。,7. 上电初始状态问题 在状态机上电时,无论为何种输入条件,都应该进入到一个确定的状态,该状态称为上电初始状态。有些状态机可以在上电时,自动进入上电初始状态,称为自启动。 8. 状态机的时钟 同步状态机的状态转换是在时钟的上升沿或是下降沿发生的,所以时钟的频率就决定了状态机状态转换的速度。状态转

9、换速度经常受到输入信号的制约,只要输入信号不抖动,而且在状态转换时钟沿前出现,则状态机时钟频率越快越好。,状态表是描述状态机现态、次态、转移条件和输出之间关系的表格。 设计状态表是一个创造性过程,这也是状态机设计中最难的一步。虽然具有输入和输出量的详细列表,但是它们之间的关系却是不能一眼能够看透的,一般情况下,对于状态数量以及何种输入条件下进入何种状态,以及在某状态下输出何种输出量不是完全清楚。在设计中要仔细辨认和处理实际问题文字说明中隐含的条件。 在做状态表时,首先确定控制器的初始状态,根据实际问题的叙述,确定该初始状态下的输出、状态转移条件和要转移的次态。然后将前述的次态定为现态,再根据实

10、际问题的叙述,确定该状态下的输出、状态转移条件和转移的次态。如此直至所有情况都叙述完毕。,例1 设计一个电子秒表的控制器。该控制器输入信号为二个按钮,一个按钮A用于启动和停止秒表,另一个按钮B用来复位秒表。控制器的输出为 一个启动和停止计数器的电平信号以及一个计数器复位信号。秒表控制器框图如图12-16所示。根据按钮电路可知,信号A与B低电平有效。,在停止状态时,当复位按钮B按下,计数器就复位;当启动/停止按钮A按下时,计数器开始计数,当启动/停止按钮A再次按下时,计数器停止计数,再按下时,再开始计数。,按钮A信号应该加微分电路,保证按下1次,只更换一个状态。,例2 试设计一个按钮开关,该按钮

11、开关在按钮第一次按下时,输出信号X和Y瞬时变为高电平,在第二次按钮按下时,输出信号X瞬时变为低电平,但是输出信号Y在延时90s后,才变为低电平。该控制器框图如图12-18所示。状态表如表12-3所示。该例的简化状态图如图12-19所示,图中没有画出向状态自己转换的条件。,3状态图 1. 状态(转换)图 状态图又称为状态转换图,它是用图形的方式描述现态、次态、输入和输出之间的关系。梅里型时序电路与摩尔时序电路画法不同,梅里型时序电路的画法是使用圆圈中的数字或字母表示时序电路的状态,使用箭头表示状态变化并且在箭头旁标记输入变量x和输出变量z,标记时将输入变量x与输出变量用斜杠隔开,如图12-20a

12、所示。,例3 图12-21是送料小车示意图,小车可以在A、B之间运动,在A、B点各有一个行程开关。小车从A点向B点前进,到达B点,停车10s后,从B点后退到A点,在A点停车20s后再向B点前进,如此往复不止。要求可以人为控制小车的前进起动和后退起动,并且能够任何时候都可以停止小车运行。根据题意,应该使用状态机加定时器(计数器)的方案实现,该状态机的框图如图12-22所示。,例4 设计一个顺序开关装置,该开关装置在按键k第一次按下时,三盏灯x、y和z同时点亮,当k 再次按下时,x灯立刻熄灭;y灯15s后熄灭,在y灯熄灭后18s后,z灯熄灭。该例题的原理框图如图12-24所示,状态图如图12-25

13、所示。,4 用VHDL语言描述状态机 状态机分为次态逻辑、状态寄存器和输出逻辑三部分,如图12-46所示,无论怎样编写VHDL程序,这三部分总是要有的。,1. 如何描述状态机 VHDL中没有专门描述状态机的语句,一般使用枚举类型定义状态数据类型,然后使用case语句进行状态转移的描述。 在结构体中,首先用type语句定义状态值,例如: type state_name is (init,s0,s1,s2,s3); -定义state_name为枚举数据类型, -其枚举值为init,s0,s1,s2,s3。 随后定义一个信号,该信号的数据类型是枚举数据类型,例如: signal sreg: stat

14、e_name; 信号定义后,就可以使用进程和case语句来描述状态机了。,process(clk) -clk为状态机的时钟 begin if clkevent and clk= 1 then -时钟上升沿 case sreg is when init = if 条件式1 then sreg if 条件式1 then sreg sreg =init; end case; end if; end process;,常用的状态机描述格式为: (1)次态逻辑与状态寄存器的进程及一组输出赋值语句(一个进程和一个赋值)。 (2)次态逻辑进程、状态寄存器进程和一组输出赋值语句(二个进程和一个赋值)。 (3)

15、包含摩尔输出的次态逻辑进程和状态寄存器进程(二个进程)。 (4)次态逻辑进程、状态寄存器进程和输出进程(三个进程)。,例13 试用VHDL语言描述状态图如图12-47所示的同步摩尔状态机,该状态机具有5个状态,输入a和b,输出为z。,例13-1 用一个进程、一个选择语句描述状态机。 本例采用一个状态寄存与次态进程、一个选择语句描述状态机输出。该状态机的VHDL描述如下。 library IEEE; use IEEE.std_logic_1164.all; entity fsm is port(clk,a,b: in std_logic; z: out std_logic); end; arch

16、itecture fsm_arch of fsm is type zt_type is (init,a0,a1,ok0,ok1); -定义数据类型 signal zhuangtai: zt_type; -定义信号zhuangtai begin,process(clk) -描述状态寄存器与次态逻辑的进程 begin if clkevent and clk=1 then case zhuangtai is when init = if a=0 then zhuangtai if a=1 then zhuangtai if b=0 then zhuangtai if b=1 then zhuangtai zhuangtai zhuangtai = init; end case; end if; end process;,with zhuangtai select -描述输出的选择型赋值语句 z = 0 when init | a0 | ok0, 1 when a1 | ok1, 0 when others; end fsm_arch;,

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

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 初中课件

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