3.2.5.21 Q3a:FSM

考虑一个具有输入s和w的有限状态机。假设 FSM 以称为A的复位状态开始,如下所示。只要s = 0, FSM 就保持在状态A ,当s = 1 时,它移动到状态 B。一旦处于状态B,FSM在接下来的三个时钟周期内检查输入w的值。如果w = 1 在恰好两个时钟周期中,则 FSM 必须 在下一个时钟周期中将输出z设置为 1。否则z必须为 0。FSM 继续检查w接下来的三个时钟周期,依此类推。下面的时序图说明了不同w值所需的z值。

使用尽可能少的状态。请注意,s输入仅用于状态A,因此您只需要考虑w输入。

module top_module (
    input clk,
    input reset,   // Synchronous reset
    input s,
    input w,
    output z
);
	parameter A=1'b0,B=1'b1;
    reg state,next_state;
    reg [3:0]num;
    reg [3:0] z1;
    always@(posedge clk)begin
        if(reset)
            state<=A;
        else 
            state<=next_state;
    end
    always@(*)begin
        case(state)
            A:next_state=s?B:A;
            B:begin
                next_state=B;
            end
        endcase
    end
    always@(posedge clk)begin//num记录第几个周期,z1作为中间量,对三个周期内有几个1计数,在第三个周期中根据z1对z赋值
        if(reset)begin
        	num<=0;
            z1<=0;
            z<=0;
        end
        else if(state==B&num==4'd2)begin
            num<=0;
            if(z1+w==4'd2)
                z<=1;
            else
                z<=0;
            z1<=0;
            
        end
        else if(state==B&num<4'd2)begin
            num<=num+1;
            z<=0;
            if(w)
                z1=z1+1;
            else
                z1<=z1;
        end
    end
    
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值