Exams/ece241 2013 q4(Design a Moore FSM) 答案详解

由题目意思可知:该有限状态机总共有6种状态即传感器(s3,s2,s1)状态,分别如下

A2:001->000

B1:000->001

B2:011->001

C1:001->011

C2:111->011

D1:011->111

其中000代表在水位s 1以下传感器(s3,s2,s1)均为0,111代表在水位s3以上传感器(s3,s2,s1)均置为1,其他依次类推。

然后分析FR3,FR2,FR1,dfr分别对应6种状态,其中dfr代表是否增加水量,dfr=1代表需水量增加,dfr=0代表需水量不变或者下降。

A2:由于该状态末尾为000所以水位在s1以下,所以(FR3,FR2,FR1)=(1,1,1)。该状态初为001,末尾为000。因此所需要的水量由001所需(FR3,FR2,FR1)=(0,1,1)变为了所需水量000的(FR3,FR2,FR1)=(1,1,1)所以需水量增加dfr=1;

B1:尾态为001在水位s2与s1之间,所以(FR3,FR2,FR1)=(0,1,1)。该状态初为000,尾为001。因此所需水量由000所需(FR3,FR2,FR1)=(1,1,1)变为了所需水量001的(FR3,FR2,FR1)=(0,1,1)所需水量减少了因此dfr=0;

D1:尾态为111水位在s3以上,所以(FR3,FR2,FR1)=(0,0,0)。该状态初为011,尾为111。因此所需水量由011所需(FR3,FR2,FR1)=(0,0,1)变为了所需水量111的(FR3,FR2,FR1)=(0,0,0)所需水量减少dfr=0;

同理分析B2,C1,C2

经上述分析可得代码如下

module top_module (
    input clk,
    input reset,
    input [3:1] s,
    output fr3,
    output fr2,
    output fr1,
    output dfr
); 
    // set parameter
    //A2:001->000,B1:000->001,B2:011->001,C1:001->011,C2:111->011,D1:011->111
    parameter A2=0, B1=1, B2=2, C1=3, C2=4, D1=5;
    wire[2:0] state, next;
    
    // state transition (combination logic)
    always@(*)begin
        case(state)
            A2: next = s[1]? B1:A2;
            B1: next = s[2]? C1:(s[1]? B1:A2);
            B2: next = s[2]? C1:(s[1]? B2:A2);
            C1: next = s[3]? D1:(s[2]? C1:B2);
            C2: next = s[3]? D1:(s[2]? C2:B2);
            D1: next = s[3]? D1:C2;
        endcase
    end
    
    always@(posedge clk)begin
        if(reset)
            state <= A2;
        else
            state <= next;
    end
    
    // output control()sequential logic
    always@(*)begin
        case(state)
            A2: {fr3,fr2,fr1,dfr} = 4'b1111;
            B1: {fr3,fr2,fr1,dfr} = 4'b0110;
            B2: {fr3,fr2,fr1,dfr} = 4'b0111;
            C1: {fr3,fr2,fr1,dfr} = 4'b0010;
            C2: {fr3,fr2,fr1,dfr} = 4'b0011;
            D1: {fr3,fr2,fr1,dfr} = 4'b0000;
        endcase
    end
endmodule

代码需注意always仅在同步复位时需要设置上升沿触发。其余时候每当状态变化,各输出相应变化。

状态转化分析:

当处在A2状态时,当s[1]等于1时表示下一状态由000->001即状态B2,当s[1]等于0时表示还处在当前状态001->000

当处在B1状态时,当s[2]等于1时表示下一状态由001->011即状态C1,当s[2]等于0并且s[1]等于1时保持000->001 B2,当s[2]等于0并且s[1]等于0时状态由001->000即A2.

以此类推。

猜你喜欢

转载自blog.csdn.net/weixin_43843289/article/details/129080923
FSM
Q4