HDLBits Exams/ece241 2013 q8

1.原题复现

Exams/ece241 2013 q8
在这里插入图片描述

2.解题思路

可以看出题目本身还是比较简单的,但是要注意的是这题的要求是利用Meanly来做,当然通过这道题,也要寻找出Meanly和Moore的类型的不同。

利用Meanly思路来解题:
Meanly的输出的明显特点就是:输出不仅与当前的状态有关,而且也会受到当前输入的影响。如下图的上方状态图所示:
在本题中,当z=1的时候,要求为当前状态为s2而且满足同时x=1。
在这里插入图片描述
同时也可以看出,相比Moore思路来写的话,将会少一个状态S3。
给出相应的代码:

module top_module (
    input clk,
    input aresetn,    // Asynchronous active-low reset
    input x,
    output z ); 
    
    
    parameter IDLE=0,S1=1,S2=2'b10,S3=3'b101;
    reg [2:0]state,next_state;//一定要注意,reg的位数要与参数的赋值位宽相匹配。
    always@(*)begin
        case(state)
                IDLE:next_state = x?S1:IDLE;
                S1:next_state = x?S1:S2;
                S2:next_state = x?S3:IDLE;
            	S3:next_state = x?S1:S2;
        endcase
    end
    
    always@(posedge clk,negedge aresetn)begin
        if(~aresetn) begin
           state<=IDLE; 
        end
        else begin
           state<=next_state; 
        end
    end
    assign z = (next_state == S3);
    endmodule

Moore的解题思路:
Moore类型的输出与当前的输入是无关的,只与当前所处的状态相关。要注意,因为这里是要求Meanly类型来解题,因此输出时候的状态应该为进入状态S3的上一个时序(也就是说,在判断出下一个状态为S3的时候,就应该对输出置高了,因为这样才能体现出是一个Meanly型,与输入有关。)
给出相关的代码:

module top_module (
    input clk,
    input aresetn,    // Asynchronous active-low reset
    input x,
    output z ); 
    
    
    
	parameter IDLE=0,S1=1,S2=2;
    reg [1:0] state,next_state;
    always@(*)begin
        case(state)
            	IDLE: next_state = x?S1:IDLE;
                S1:   next_state = x?S1:S2;
                S2:   next_state = x?S1:IDLE;
        endcase
    end
    always@(posedge clk,negedge aresetn)begin
        if(~aresetn)begin
           state<=IDLE; 
        end
        else begin
            state<=next_state; 
        end
    end
    assign z = (state == S2) && (x==1);
    endmodule
    

总结一下别人的笔记:
1、Moore型的输出只与当前状态有关,而Meanly型的输出与输入、当前状态都相关
2.在实现相同功能的情况下,Meanly型状态机相对来说要比Moore型状态机的状态数目要少,而且Moore型需要等待状态稳定才能输出。
3.输出时序上,Moore状态机同步输出,Meanly状态机异步输出。
4.输出变化上,Mealy状态机比Moore状态机领先一个时钟周期。
摘自Exams/ece241 2013 q8——Mealy型和Moore型FSM的比较

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值