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. Javascript -- toFixed()函数

    Javascript——toFiexed()函数 1. toFixed(n) 限制小数点后位数,四舍五入.n:0~20 . 2. 作用对象必须是number,不能为其他类型.如(8.001).toFi ...

  2. ASP.NET 状态的传递和保存

    1,HTTP协议是无状态的.服务器不会记住上次给浏览器的处理结果,如果需要上次处理结果(上次状态)就需要浏览器把处理结果值(上次状态)再次给服务器. 2,URL传值:通过URL参数或者通过Form表单 ...

  3. OGNL 对象视图导航语言

    [Object Graphics Navigate Language] 类似于EL(Expression Language)表达式, 可以帮助我们在配置文件.JSP中来获取对象的值 这门语言比EL功能 ...

  4. 【CSS3】---属性选择器

    在HTML中,通过各种各样的属性可以给元素增加很多附加的信息.例如,通过id属性可以将不同div元素进行区分. 在CSS2中引入了一些属性选择器,而CSS3在CSS2的基础上对属性选择器进行了扩展,新 ...

  5. SQL Server 添加登录账户配置权限

    一.新建登录名 1. 在登录名右侧的文本框中输入新建的管理员账号名称:2. 一对单选按钮组中,选择Sql Server 身份验证,并输入登录密码:3. 勾选强制实施密码策略复选框:(密码策略一般是指加 ...

  6. 北大ACM(POJ1007-DNA Sorting)

    Question:http://poj.org/problem?id=1007 问题点:逆序数及快排. Memory: 248K Time: 0MS Language: C++ Result: Acc ...

  7. C语言知识总结(5)

    预处理指令 C语言提供的预处理指令主要有:宏定义.文件包含.条件编译 宏定义 不带参数的宏定义 1>一般形式 #define 宏名 字符串 比如#define A 10 2>作用 它的作用 ...

  8. 【ASP.NET】获取网站目录的方法

         获取网站物理路径: HttpRuntime.AppDomainAppPath 获取网站虚拟路径: HttpRuntime.AppDomainAppVirtualPath

  9. .Net的基础概念

    1,参数传递. 默认都是按值传递(无论引用还是值类型),也就意味着传递参数的一个副本给方法.之后在方法体内对参数的更改,对原始参数没有影响. 使用ref/out可以按引用传递,直接影响原始参数变量.两 ...

  10. Myeclipse安装svn插件(link方式)

    Myeclipse安装svn插件(link方式) 优点:1.离线安装2.非侵入式 演示版本 myeclipse--myeclipse8.6 svn--subeclipse-site-1.6.5.zip ...