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;

  always@(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

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

  always@(posedge clk)

    if(!rst)

      state<=idle;

    else

      state<=nextstate;

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

  always@(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的组合逻辑

  always@(state or rest or a)

    if(!rst)

      k1=0;

    else

      if(state==clear&&!a)

        k1=1;  

      else

        k1=0;

  //产生k2的组合逻辑

  always@(state or rst or a)

    if(!srt)

      k2=0;

    else

      if(state==stop&&a)

        k2=1;

      else

        k2=0;

4、总结    

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

二、有限状态机(FSM)的更多相关文章

  1. cocos2d-x 游戏开发之有限状态机(FSM) (二)

    cocos2d-x 游戏开发之有限状态机(FSM)  (二) 1 状态模式

  2. 有限状态机FSM(自动售报机Verilog实现)

    有限状态机FSM(自动售报机Verilog实现) FSM 状态机就是一种能够描述具有逻辑顺序和时序顺序事件的方法. 状态机有两大类:Mealy型和Moore型. Moore型状态机的输出只与当前状态有 ...

  3. Atitit. 有限状态机 fsm 状态模式

    Atitit. 有限状态机 fsm 状态模式 1. 有限状态机 1 2. "状态表"和"状态轮换表" 1 3. 有限状态机概念(状态(State)事件(Even ...

  4. cocos2d-x 游戏开发之有限状态机(FSM) (四)

    cocos2d-x 游戏开发之有限状态机(FSM) (四) 虽然我们了解了FSM,并且可以写自己的FSM,但是有更好的工具帮我们完成这个繁琐的工作.SMC(http://smc.sourceforge ...

  5. cocos2d-x 游戏开发之有限状态机(FSM) (三)

    cocos2d-x 游戏开发之有限状态机(FSM) (三) 有限状态机简称FSM,现在我们创建一个专门的FSM类,负责管理对象(Monkey)的状态.然后Monkey类就实现了行为与状态分离.Monk ...

  6. cocos2d-x 游戏开发之有限状态机(FSM) (一)

    cocos2d-x 游戏开发之有限状态机(FSM) (一) 参考:http://blog.csdn.net/mgphuang/article/details/5845252<Cocos2d-x游 ...

  7. 有限状态机FSM

    有限状态机(Finite-state machine)又称有限状态自动机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型.常用与:正则表达式引擎,编译器的词法和语法分析,游戏设计,网络 ...

  8. [原创][FPGA]有限状态机FSM学习笔记(一)

    1. 概述--何为有限状态机FSM? 有限状态机-Finite State Machine,简写为FSM,是表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用.通常 ...

  9. [转载][FPGA]有限状态机FSM学习笔记(二)

    1. Mealy和Moore状态机的互换 对于给定的时序逻辑功能,可以用Mealy机实现,也可以用Moore机实现.根据Moore机比Mealy机输出落后一个周期的特性,可以实现两种状态机之间的转换. ...

  10. Linux编程之有限状态机FSM的理解与实现

    有限状态机(finite state machine)简称FSM,表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用.FSM是一种逻辑单元内部的一种高效编程方法,在 ...

随机推荐

  1. codeforces 590A A. Median Smoothing(思维)

    题目链接: A. Median Smoothing time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  2. 数理方程:Fourier变换与卷积

    更新:1 APR 2016 关于傅里叶级数参看数理方程:Fourier级数 Fourier变换: 对于满足Dirichlet条件的函数\(f(t)\)在其连续点处定义 \(F(\omega)=\int ...

  3. 浅谈.NET Micro Framework性能优化 转自 软件中国

    .NET Micro Framework的可剪裁性,高定执行,和天生对硬件高集成度都让它的前途一片光明.当然,它现在还很年轻,就发布的SDK v3.0来看,它还有很长的路要走. 废话不说,就这几个月我 ...

  4. Part 15 Scalar user defined functions in sql server

    Scalar user defined functions in sql server Inline table valued functions in sql server Multi statem ...

  5. JQuery、js判断复选框是否选中状态

    JQuery: var $isChecked = $("#id").is(":checked"); alert($isChecked); JS: var $id ...

  6. 解决IE8打开默认弹出开发者工具的问题

    有一次开发用ie调试后再次打开总是自动弹出ie开发者工具,而且在网页的上一层弹出.点击X关闭后再次打开还是会弹出! 找ie的设置也没有找到关闭的选项. 在网上搜了很多资料才找到解决的办法,在这里分享一 ...

  7. css z-index属性

    原文地址:http://www.neoease.com/css-z-index-property-and-layering-tree/ CSS 中的 z-index 属性用于设置节点的堆叠顺序, 拥有 ...

  8. highcharts实现统计图效果

    highcharts实现统计图效果 ① 根据需求确定需要使用的案例图 把这个界面的html模板文件复制出来,放入./Application/Admin/View/User下改名为chart.html ...

  9. android 数据库的增删改查的另一种方式

    老师笔记 # 3 Android下另外一种增删改查方式         1.创建一个帮助类的对象,调用getReadableDatabase方法,返回一个SqliteDatebase对象 2.使用Sq ...

  10. IAR产生可烧录的镜像文件

    Technorati 标签: IAR 烧录镜像 在IAR中,产生能够使用烧录器烧写的hex文件的方法: 1. 只生成可烧写的hex文件:     1.1   在Project Option中的Link ...