欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    有限状态机教学PPT.ppt

    • 资源ID:2971796       资源大小:509.50KB        全文页数:51页
    • 资源格式: PPT        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    有限状态机教学PPT.ppt

    有限状态机,众所周知,数字系统的基本结构由控制单元和数据处理单元两大部分组成。控制单元在统一的同步时钟控制下,严格地按照一定的时间关系输出控制信号;处理单元一步一 步地完成整个数字系统的操作。其中,控制单元我们常采用有限状态机(FSM)来实现,一、问题引入:停车场计数器,有一停车场,只有一个进出口,如图所示,有两个传感器A和B,可以测出车辆的进出状况,要求设计一个停车场计数器,能够对停车场内的车辆进行计数,使用两个LED数码管显示停车场中的车辆数。,分析:当有车出来时,首先A被挡住,接着A,B都被挡住,接着只有B被挡住,最后A、B都没被挡住。当有车进去时,首先B被挡住,接着A,B都被挡住,接着只有A被挡住,最后A、B都没被挡住。,停车场计数器模块图,A,B,RST,CLK,数码管,数码管,段码,段码,车进出判决模块,加减计数器,译码器,clk_en,Add/sub,车辆进入判决模块设计,A,B,1,1,STEP 1,车辆进入判决模块设计,A,B,1,0,STEP 2,车辆进入判决模块设计,A,B,0,0,STEP 3,车辆进入判决模块设计,A,B,0,1,STEP 4,车辆进入判决模块设计,A,B,1,1,STEP 5,车辆进出判决模块设计,设计这个模块的思想是:引入状态,代表上述的step1step5状态如何改变由输入决定模块的输出由状态来决定,step1,step4,step3,step2,step5,A=1B=0,A=0B=0,A=0B=1,A=1B=1,输出CLK和A/S,1.莫尔状态机模型,状态译码,状态寄存器,输出译码,clk,输入,现态,次态,输出,二.状态机模型,library ieee;use ieee.std_logic_1164.all;entity system isport(clock:in std_logic;input:in std_logic;output:out std_logic);end system;architecture moore of system istype state is(st0,st1,st2,.);signal next_state,current_state:state;beginF1:process(input,current_state)状态译码 beginnext_state=F1(input,current_state);end process;,莫尔状态机VHDL实现,F2:process(clock)状态寄存器 beginif rising_edge(clock)thencurrent_state=next_state;end if;end process;F3:process(current_state)输出译码 beginoutput=F3(current_state);end process;end moore;,莫尔状态机VHDL实现,状态机说明部分,用户自定义数据类型定义语句,TYPE语句用法如下:TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型;或TYPE 数据类型名 IS 数据类型定义;,以下列出了两种不同的定义方式:TYPE st1 IS ARRAY(0 TO 15)OF STD_LOGIC;TYPE week IS(sun,mon,tue,wed,thu,fri,sat);,状态机说明部分,用户自定义数据类型定义语句,TYPE m_state IS(st0,st1,st2,st3,st4,st5);SIGNAL present_state,next_state:m_state;,布尔数据类型的定义语句是:TYPE BOOLEAN IS(FALSE,TRUE);,TYPE my_logic IS(1,Z,U,0);SIGNAL s1:my_logic;s1=Z;,2米利状态机,状态译码,状态寄存器,输出译码,clk,输入,现态,次态,输出,library ieee;use ieee.std_logic_1164.all;entity system isport(clock:in std_logic;input:in std_logic;output:out std_logic);end system;architecture mealy of system istype state is(st0,st1,st2,.);signal next_state,current_state:state;beginF1:process(input,current_state)状态译码 beginnext_state=F1(input,current_state);end process;,米利状态机VHDL实现,Register:process(clock)状态寄存器 beginif rising_edge(clock)thencurrent_state=next_state;end if;end process;F2:process(input,current_state)输出译码 beginoutput=F2(input,current_state);end process;end mealy;,米利状态机VHDL实现,3onehot状态机,状态编码为独热码:只有一位是1,其他都是0。constant st0:std_logic_vector(2 downto 0):=”001”;constant st1:std_logic_vector(2 downto 0):=”010”;constant st2:std_logic_vector(2 downto 0):=”100”;.signal current_state:std_logic_vector(2 downto 0);signal next_state:std_logic_vector(2 downto 0);缺点:需要的硬件资源多于二进制编码状态机优点:1.输出译码简单;2.速度快;3.不必考虑最优问题;4.易于修改。,4.使用VHDL实现有限状态机的一般步骤,1)选择合适的状态机模型:对于Moore状态机来说,输出将在时钟触发信号到来后的 几个门后得到,同时在剩余的时钟周期内不变,即使输入 信号在这段时间内发生变化,输出信号也不会发生变化。因此,我们可以说将输入和输出部分隔开了,起到了隔离 的作用。而对于Mealy状态机来说,则不然,当输入变化时,输出 在一个时钟周期内也会发生变化。因此,mealy状态机比 Moore状态机的“实时性”要好,但是,也会把输入的噪声 引入输出。有时候,Moore状态机比Mealy状态机需要更多的状态。2)根据要求画出状态关系转换图3)用VHDL语言来描述,有限状态机,假设要设计一个AD控制器,ADC0809控制器功能图,有限状态机,步骤0,步骤1,步骤4,步骤3,步骤2,地址锁存选择通道,启动转换,等待转换结束,转换结束数据输出,初态,步骤5,等待EOC变低电平,EOC,EOC,三.状态机的应用举例,1.ADC0809控制器,选择莫尔机来实现,状态转移图如下,st0,st1,st2,st3,st4,st5,ALE=0START=0OE=0,ALE=1START=0OE=0,ALE=0START=1OE=0,ALE=0START=0OE=0,EOC0,EOC1,EOC1,ALE=0START=0OE=0,ALE=0START=0OE=1,EOC0,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ADCINT ISPORT(D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-0809的8位转换数据输出 CLK,EOC:IN STD_LOGIC;-CLK是转换工作时钟 ALE,START,OE:OUT STD_LOGIC;ADDA:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ADCINT;ARCHITECTURE behav OF ADCINT ISTYPE states IS(st0,st1,st2,st3,st4,st5);-定义各状态子类型 SIGNAL current_state,next_state:states:=st0;BEGIN ADDA=“000”;PROCESS(CLK)-状态寄存器 BEGIN IF(CLKEVENT AND CLK=1)THEN current_state=next_state;-在时钟上升沿,转换至下一状态 END IF;END PROCESS;-由信号current_state将当前状态值带出此进程,PRO:PROCESS(current_state,EOC)状态译码 BEGIN CASE current_state IS WHEN st0=next_state next_state next_state IF(EOC=1)THEN next_state IF(EOC=0)THEN next_state next_state next_state=st0;END CASE;END PROCESS PRO;,VHDL实现,PRO:PROCESS(current_state)译码输出 BEGIN CASE current_state IS WHEN st0=ALE ALE ALE ALE ALE ALE ALE=0;START=0;OE=0;END CASE;END PROCESS PRO;,VHDL实现,PRO:PROCESS(current_state,EOC)状态译码译码输出 BEGIN CASE current_state IS WHEN st0=ALE ALE ALE ALE ALE ALE ALE=0;START=0;OE=0;next_state=st0;END CASE;END PROCESS PRO;,VHDL实现:把状态译码和译码输出写在一个进程里,2.“11”序列检测器,选择莫尔机来实现,状态转移图如下,A/0,B/0,C/1,dout=0,dout=0,dout=1,din=1,din=1,din=0,din=0,din=1,din=0,library ieee;use ieee.std_logic_1164.all;entity system isport(clk:in std_logic;reset:in std_logic;din:in std_logic;dout:out std_logic);end system;architecture behave of system istype state is(A,B,C);signal next_state,current_state:state;Begin process(clk,reset)-State registersBeginIf reset=1 then current_state=A;Elsif clkevent and clk=1 thencurrent_state=next_state;end if;end process;,“11”序列的VHDL描述,“11”序列的VHDL描述,F1:process(din,current_state)-Next state logicBeginCase current_state is WHEN A=IF din=1 then next_state IF din=1 then next_state IF din=1 then next_state NULL;end case;end process;,F2:process(current_state)-Output logicbeginIf current_state=C then dout=1;Elsedout=0;end if;end process;end behave;,“11”序列的VHDL描述,2.“11”序列检测器,选择米利机来实现,状态转移图如下,A,B,dout=0,dout=1,din=1,din=0,din=0,din=1,dout=0,dout=0,library ieee;use ieee.std_logic_1164.all;entity system isport(clk:in std_logic;reset:in std_logic;din:in std_logic;dout:out std_logic);end system;architecture behave of system istype state is(A,B);signal next_state,current_state:state;BeginRegister:process(clk,reset)-State registersBeginIf reset=1 then current_state=A;Elsif clkevent and clk=1 thencurrent_state=next_state;end if;end process;,VHDL实现,F1:process(din,current_state)-Next state logicBeginCase current_state isWHEN A=IF din=1 then next_state IF din=0 then next_state NULL;end case;end process;,F2:process(clk,din,current_state)-Output logicbeginif clkevent and clk=1 thenIf din=1 and current_state=B then dout=1;Elsedout=0;end if;end if;end process;end behave;,one-hot状态机实现,constant A:std_logic_vector(2 downto 0):=”001”;constant B:std_logic_vector(2 downto 0):=”010”;constant C:std_logic_vector(2 downto 0):=”100”;signal current_state:std_logic_vector(2 downto 0);signal next_state:std_logic_vector(2 downto 0);,以上三种状态机的输出都是组合逻辑电路,所以会产生毛刺现象。解决毛刺有三种方法:1)改善电路结构,使得电路中信号延时一致。2)利用时钟将信号重新读取一遍。3)在电路中注入一信号将毛刺覆盖,但不影响正常的信号。这里采用第二种方法,在状态机的输出端加一个寄存器,使用系统时钟重新读一遍,就可以消除毛刺。,四.输出信号的同步,F2:process(clk,reset,current_state)-Output logicBeginIf reset=1 THENDout=0Elseif clkevent and clk=1 thenIf current_state=C then dout=1;Elsedout=0;end if;end if;end if;end process;,VHDL描述,五、状态编码,1 状态位直接输出型编码,控制信号状态编码表,每一位的编码值都赋予了实际的控制功能,即:START=current_state(4);ALE=current_state(3);OE=current_state(2);LOCK=current_state(1)。,【例7-7】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD0809 IS PORT(D:IN STD_LOGIC_VECTOR(11 DOWNTO 0);CLK,EOC:IN STD_LOGIC;ALE,START,OE,ADDA:OUT STD_LOGIC;c_state:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END AD574A;ARCHITECTURE behav OF AD0809 ISSIGNAL current_state,next_state:STD_LOGIC_VECTOR(4 DOWNTO 0);CONSTANT st0:STD_LOGIC_VECTOR(4 DOWNTO 0):=“00000;CONSTANT st1:STD_LOGIC_VECTOR(4 DOWNTO 0):=“11000;CONSTANT st2:STD_LOGIC_VECTOR(4 DOWNTO 0):=00001;CONSTANT st3:STD_LOGIC_VECTOR(4 DOWNTO 0):=00100;CONSTANT st4:STD_LOGIC_VECTOR(4 DOWNTO 0):=00110;SIGNAL REGL:STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL LOCK:STD_LOGIC;BEGIN ADDA=1;START=current_state(4);ALE=current_state(3);OE=current_state(2);LOCK=current_state(1);c_state=current_state;,2 顺序编码,表7-3 编码方式,【例7-8】.SIGNAL CRURRENT_STATE,NEXT_STATE:STD_LOGIC_VECTOR(2 DOWNTO 0);CONSTANT ST0:STD_LOGIC_VECTOR(2 DOWNTO 0):=000;CONSTANT ST1:STD_LOGIC_VECTOR(2 DOWNTO 0):=001;CONSTANT ST2:STD_LOGIC_VECTOR(2 DOWNTO 0):=010;CONSTANT ST3:STD_LOGIC_VECTOR(2 DOWNTO 0):=011;CONSTANT ST4:STD_LOGIC_VECTOR(2 DOWNTO 0):=100;,3 状态机剩余状态处理,剩余状态,【例7-9】.TYPE states IS(st0,st1,st2,st3,st4,st_ilg1,st_ilg2,st_ilg3);SIGNAL current_state,next_state:states;.COM:PROCESS(current_state,state_Inputs)-组合逻辑进程BEGIN CASE current_state IS-确定当前状态的状态值.WHEN OTHERS=next_state=st0;END case;,使用独热码状态机对其描述:,library ieee;use ieee.std_logic_1164.all;entity system isport(clock,reset,ena:in std_logic;q:out std_logic_vector(2 downto 0);end system;architecture moore of system istype state is(idle,first,second,.);constant A:std_logic_vector(2 downto 0):=”001”;constant B:std_logic_vector(2 downto 0):=”010”;constant C:std_logic_vector(2 downto 0):=”100”;signal current_state:std_logic_vector(2 downto 0);signal next_state:std_logic_vector(2 downto 0);,练习:,1.序列检测器(1110010)2.AD574采样控制器,CECS RC K12/8 A0工 作 状 态0XXXX禁止X1XXX禁止100X0启动12位转换100X1启动8位转换1011X12位并行输出有效10100高8位并行输出有效10101低4位加上尾随4个0有效,AD574逻辑控制真值表(X表示任意),AD574工作时序,AD574状态转移图,采样状态机结构框图,

    注意事项

    本文(有限状态机教学PPT.ppt)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开