HDLbits 记录_Q135 Design a Mealy FSM / Exams/ece241 2013 q8

题目为使用Mealy FSM 实现一个序列检测器,要求可以检测重叠序列。

比较简单的一题,本来不需要状态机也能实现序列检测器,不太清楚出题的目的是啥,可能只是为了让人熟悉Mealy型状态机吧。

还是说一下需要重点注意的:

  • 区分Mealy FSM 和Moore FSM
    • 输出只和当前状态有关而与输入无关,则称为摩尔(Moore)状态机;

    • 输出不仅和当前状态有关而且和输入有关,则称为米利(Mealy)状态机;

  • 两种状态机的区别

    • 在波形上区别:以一个序列检测器为例,检测到输入信号11时输出z为1,其他时候为0。用摩尔型FSM实现需要用到三个状态(A,B,C)。而用米利型FSM实现则需要两个状态(A,B)。摩尔型FSM输出函数的输入只由状态变量决定,要想输出z=1,必须C状态形成,即寄存器中的两个1都打进去后才可以。输出z=1会在下一个有效沿到来的时候被赋值。而米利型FSM输出函数是由输入和状态变量共同决定的。状态在B的时候如果输入为1,则直接以组合电路输出z=1,不需要等到下个有效沿到来。从而也就不需要第三个状态C。

    • 摩尔状态机更安全:输出在时钟边沿变化(总是在一个周期后)。在Mealy机器中,输入更改可能会在逻辑完成后立即导致输出更改, 当两台机器互连时出现大问题 ,如果不小心,可能会发生异步反馈

    • Mealy状态机对输入的反应更快:在相同的周期内反应 - 不需要等待时钟。在Moore机器中,可能需要更多逻辑来将状态解码为输出 - 在时钟边沿之后更多的门延迟。并非所有时序电路都可以使用Mealy模型实现。 一些时序电路只能作为摩尔机器实现。

笔者写完发现自己还是写的组合逻辑,状态机就是个摆设,咱们暂且称其为“自欺欺人”解法吧(doge),不过不想改了就这样吧。。。。。

正确的符合题意的序列检测状态机解法参考下面链接:

Moore型状态机和Mealy型状态机 - 青河 - 博客园

下面贴出自欺欺人解法:

module top_module (
    input clk,
    input aresetn,    // Asynchronous active-low reset
    input x,
    output z ); 

    parameter		IDLE 	= 	1'b0;
    parameter		DETECT	=	1'b1;
    
    reg	[1:0]	seq_reg;
    reg		curr_state;
    reg		next_state;
    
    always @(posedge clk or negedge aresetn) begin
        if(~aresetn) begin
            curr_state <= IDLE;
        end
        else begin
           curr_state <=  next_state;
        end
    end
    
    always @(*) begin
        case(curr_state)
            IDLE:next_state <= DETECT;
            DETECT:next_state <= DETECT;
            default:next_state <= IDLE;
        endcase
    end
    
    always @(posedge clk or negedge aresetn) begin
        if(~aresetn) begin
            seq_reg <= 2'd0;
        end
        else begin
            seq_reg <=  {seq_reg[0],x};
        end
    end
    
    always @(*) begin
        if(~aresetn) 
            z = 1'b0;
        else if((seq_reg == 2'b10) &&(x == 1'b1))
            z = 1'b1;
        else
            z= 1'b0;
    end
    
endmodule
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值