二、状态机

1、状态机的作用?是什么?

  状态机,顾名思义就是用来描述状态的。完善一点就是在同一的时钟下。更准确说是一种verilogHDL编程思想。

  例如我们每一个系统都可以分为好几种状态,如:开始,初始化,运行,状态1,状态2,状态3,状态4,结束。

2、状态机结构

  1)输出  <=  输入有关+当前状态

  2)输出  <=  当前状态

  3)流水线寄存器 <= 输出  <=  输出+当前状态

3、状态机verilog程序

  一个系统或者一个物体的行为或者一个器件的状态,我们都可以分成好几种状态,那么就可以画出如下图的状态图,当然不可能所有的状态都是这样,但是大穹小异。这里的输出是用k1,k2来表示的,也就是代表当这种状态的时候,我们系统会实行什么行为。

  

  1)一般形式的状态机程序(使用Gray编码)

  module fsm(clk,rst,a,k1,k2,state);

  input clk,rst,a;

  output k1,k2;

  output[1:0] state;

  reg k1,k2;

  reg[1:0] state;

  parameter  idle=2‘b00,//空闲的

         start=2‘b01,

         stop=2‘b10,

         clear=2‘b11;

  [email protected](posedge clk)

     if(!rst)

      begin

        state<=idle;

        k2<=0;

        k1<=0;

       end

    case(state)

      idle:

        if(a) begin state<=start;k1<=0;end

        else begin state<=idle;k2=0;k1=0;end

      start:

        if(!a) state<=stop;

        else state<=stop;

      stop:

        if(a) begin state<=clear; k2<=1;end

        else begin stste<=stop;k2<=0;k1<=0;end

      clear:

        if(!a) begin state<=idle;k2<=0;k1<=1;end

        else  begin state<=clear;k2<=0;k1<=1;end

      default:

        state<=2‘bxx;

    endcase

  endmodule

  2)用独热码表示的状态机

  parameter  idle=4‘b0000,

         start=4‘b0100,

         stop=4‘b0010,

         clear=4‘b0001;

  这叫独热码,你懂的。

  3)输出<= 状态值 (把状态值直接作为输出) 适用于高速状态机,因为节省时间,节省器件,延迟时间小

  state<=start;  ………………  state<=stoptoclear;  ……………………  state=idle; 

  4)适用于大型复杂设计的多输入状态机,使用always

  //每一个时钟产生一个状态的改变

  [email protected](posedge clk)

    if(!rst)

      state<=idle;

    else

      state<=nextstate;

  //产生下一状态的组合逻辑

  [email protected](state or a)

    case(state)

      idle:

        if(a) nextstate=start;

        else nextstate=idle;

      start:

        if(!a) nextstate=stop;

        else nextstate=start;

      stop:

        if(a) nextstate=clear;

        else nextstate=stop;

      clear:

        if(!a) nextstate=idle;

        else nextstate=clear;

      default:

        nextstate=2‘bxx;

    endcase

  //产生输出k1的组合逻辑

  [email protected](state or rest or a)

    if(!rst)

      k1=0;

    else

      if(state==clear&&!a)

        k1=1;  

      else

        k1=0;

  //产生k2的组合逻辑

  [email protected](state or rst or a)

    if(!srt)

      k2=0;

    else

      if(state==stop&&a)

        k2=1;

      else

        k2=0;

4、总结    

  不同类型的状态机有不同的优势。

时间: 2024-08-02 07:01:05

二、状态机的相关文章

软件设计之状态机

============================================================================ 原创作品.同意转载. 转载时请务必以超链接形式标明原始出处.以及本声明. 请注明转自:http://yunjianfei.iteye.com/blog/ ============================================================================ 一.状态机简介 软件设计中的状态机概念

3.5【OSPF】NP十二班第四天-OSPF接口状态机及DR和BDR选举-1

OSPF接口状态机及DR和BDR选举 OSPF协议:<TCP/IP协议卷一><OSPF和IS-IS详解>   研究OSPF这本书好,建议读, 比卷一还好:   通过上课入门,课后探讨,多 动手实验:自学重要   通过什么方式以什么方式记得更牢? 1.隔一段时间经常复习 2.当个讲师把理论知识好好沉淀 华为面试一次5000块钱 什么情况下一边down一边Init状态? Init状态:初始化状态:收到hello报文并且检测通过了 通过ACL可以过滤IP包,一端拒绝所有的接收报文但是可以

Unity3D 学习笔记 - Garen Pick the Balls 捡球小游戏设计 (二) Macanim 动画状态机

注:本游戏开发环境为Unity3D 5.3.4 本星期要求: 模仿 AnimationEvent 编写一个 StateEvents 类 用户可以创建一个指定时间.指定状态触发的事件类 事件可以采用反射机制,调用调用客户的方法:或使用订阅发布方法调用客户的方法. 在你的动画控制程序中使用 StateEvents 类 我采用的是上星期的Garen Pick the Balls小游戏,将Legacy动画部分用Mecanim重写. 要点: 1. 初次状态机开发,尚未实现Run和Attack同时进行(Bl

3.2【OSPF】NP十二班第二天-OSPF邻居状态机及邻居建立1

OSPF邻居状态机及邻居建立 控制层面:RIB表 转发层面:FIB表 Hello报文的作用:发现建立和维护邻居关系 \\Hello报文里的字段 option选项在哪些报文中存在? 1.Hello    2.DBD   3.LSA OPtion选项: DN比特位 DN比特位(宕比特位)置位如何防环 运营商和客户路由重分发造成环路 把OSPF重分发进BGP很可能造成环路 通过DN位解决,如果DN位置位了,这条路由本地是不能做选路的,同时也不会重分发进其他的协议 DC位 按虚电路:需要的时候才建立虚电

unity3d5.0 SurvivalShooter(二) 动画状态机的添加

1,在工程目录下添加Animation文件夹,并在下面创建名为'PlayerAnimatorController'的AnimatorContrlller,并将此添加到Player的controller中 2,打开Animator面板,找到Player模型的三种动画,并将其拖到Animator面板(第一个拖进来的为默认状态,右击其他动画可切换默认) 3,Make Transition 将可进行转换的状态进行连接,其中AnyState 为任意状态,Entry连接的是默认的动画 4,在左边Parame

Unity Animator动画状态机 深入理解(二)IK控制

IK还是一个很神奇和实用的东西啊,起码可以用代码来控制人物骨骼位置还是很爽的.因为不是动画师~ 这篇可能跟Animator没啥关系了哈,都是代码层的. 看了一官方的案例,老的,有些问题,自己修改了一下,达到了效果. 官方建议把所有的IK操作放在OnAnimatorIK中进行. 如果我们要进行IK操作,先要绑定IK位置.IK能控制的官方都给了enum   然后我们要设置权重Weight,范围为0~1,这里都设成1 1 avatar.SetIKPositionWeight(AvatarIKGoal.

001-初识状态机

状态机 FPGA的灵魂 状态机的设计贯穿FPGA设计的始终 一.状态机的概念 1.状态机简述 状态机:描述状态变迁的状态转移图,体现系统对外界事件的反应和行为. 有限状态机(FSM):状态节点数和输入.输出范围有限的状态机. 2.状态机的组成六要素 (1)状态集合   (必备要素):包含了状态机所能达到的所有状态. (2)初态         (必备要素):是整个状态机开始工作的起点.初态是一个相对的参考态. (3)终态   () :状态机的结束状态.事实上,大部分运行在FPGA上的状态机是没有

【Android 多媒体开发】 MediaPlayer 状态机 接口 方法 解析

作者 : 韩曙亮 转载请著名出处 :  http://blog.csdn.net/shulianghan/article/details/38487967 一. MediaPlayer 状态机 介绍 Android MediaPlayer 状态即图例 : 1. Idle (闲置) 状态 和 End (结束) 状态 MediaPlayer 对象声明周期 : 从 Idle 到 End 状态就是 MediaPlayer 整个生命周期; -- 生命周期開始 : 进入 Idle (闲置) 状态; -- 生

状态机初识

有限状态机FSM思想广泛应用于硬件控制电路设计,也是软件上常用的一种处理方法(软件上称为FMM消息机).它把复杂的控制逻辑分解成有限个稳定状态,在每个状态上判断事件,变连续处理为离散数字处理,符合计算机的工作特点.同时,因为有限状态机具有有限个状态,所以可以在实际的工程上实现.但这并不意味着其只能进行有限次的处理,相反,有限状态机是闭环系统,有限但是无穷,可以用有限的状态,处理无穷的事件. 有限状态机的工作原理如1所示,发生事件(event)后,根据当前状态(curState),决定执行的动作(