zoukankan      html  css  js  c++  java
  • Mealy状态机的一点理解

          在Mealy状态机中,输出是由输入和现态决定的。而状态机的次态是由输入的变化和现态决定的。这个特点决定了再verilog中实现的方式。建议简单的状态机就使用两段式always结构。

           一个always中进行状态的转换,一个always中进行输出状态的变化。

           刚刚已经说过,状态的变化是有输入时钟和输入信号的状态决定的。这里输入信号不属于敏感信号变量,因为状态的转换只是在输入时钟信号的边沿发生变化。但是在always内部中会使用输入信号的状态,依据输入信号的状态进行转换。

           状态机的输出是输入信号和现态决定的。此时输入信号和现态均属于这个always的敏感信号。因为这个时候输出并不是只有在输入时钟信号的边沿发生变化,而是随着现态和输入信号的变化而变化。

           在书写always结构的时候,理解这点还是很重要的。下面就看看具体的代码吧。

    module mealy_state_machine(IN,CP,Y,CR);

    input IN,CP,CR;

    output Y;

    reg [1:0]state;

    parameter S0=2'b00,S1=2'b10,S2=2'b11;

    reg Y;

    always @(posedge CP or negedge CR)

    begin

    if(~CR)begin state<=0;end

    else

    begin

    case(state)

    S0:state<=S0;

    S1:

    begin

    if(IN)state<=S2;

    else state<=S0;

    end

    S2:begin

    if(IN)state<=S2;

    else state<=S0;

    end

    endcase

    end

    end

    always @(state or IN)

    begin

    case(state)

    S0:Y<=0;

    S1:Y<=0;

    S2:begin

    if(IN)Y<=0;

    else Y<=1;

    end

    endcase

    end

    endmodule

    下面是状态转移图,状态转移图和预定的状态转移图是一样的。这也说明代码描述的功能没错。

          上面的状态转移图是对应 康华光电子技术基础 数字部分(第五版)中P267。但是后面P307中代码描述这个电路图好像有点问题。最后综合出来的状态机和要求的状态机不一样。但是我一直没看出错误来,所以还请大家多多指导。

  • 相关阅读:
    mybatis+spring报错PropertyAccessException 1: org.springframework.beans.MethodInvocationException
    jQuery实现判断li的个数从而实现其他功能
    移动平台对 meta 标签的定义
    移动平台对 meta 标签的定义
    HTML5手机网站开发页面宽度解决方案
    HTML5手机网站开发页面宽度解决方案
    别做“不会思考的码农”
    别做“不会思考的码农”
    myeclipse+spket1.6+Extjs4.2开发环境搭建
    myeclipse+spket1.6+Extjs4.2开发环境搭建
  • 原文地址:https://www.cnblogs.com/farbeyond/p/5204573.html
Copyright © 2011-2022 走看看