HDLBits Design a Moore FSM Examsece241 2013 q4

HDLBits Design a Moore FSM Exams/ece241 2013 q4

网址:https://hdlbits.01xz.net/wiki/Exams/ece241_2013_q4

题目大意是设计一个记录水位的状态机,可以设计六个状态表示表格中的water level,其中Between s3 and s2与between s2 and s3分别用两个表示上升至该水位或下降至该水位,Above S3和Below S1用两个状态表示。

module top_module (
    input clk,
    input reset,
    input [3:1] s,
    output fr3,
    output fr2,
    output fr1,
    output dfr
); 
    //A表示Below S1,B1表示上升到Between S1 and S2,C1表示S1-S2上升到S2-S3,
    //D表示Above S3,B2表示下降到Between S1 and S2,C2表示D下降到S2-S3。
    parameter A=0,B1=1,C1=2,D=3,C2=4,B2=5;
    reg [2:0] state,next_state;
    
    always @(posedge clk) begin
        if(reset) state<=A;
        else state<=next_state;
    end
    always @(*) begin
        case(state)
            A: next_state=s[1]?(s[2]?(s[3]?D:C1):B1):A;
            B1: next_state=s[1]?(s[2]?(s[3]?D:C1):B1):A;
            C1: next_state=s[1]?(s[2]?(s[3]?D:C1):B2):A;
            D: next_state=s[1]?(s[2]?(s[3]?D:C2):B2):A;
            C2: next_state=s[1]?(s[2]?(s[3]?D:C2):B2):A;
            B2: next_state=s[1]?(s[2]?(s[3]?D:C1):B2):A;
        endcase
        /*
        本题也可以不用判断所有s信号
        case(state)
        	A: next_state=s[1]?B1:A;
        	B1: next_state=s[1]?(s[2]?C1:B1):A;
        	C1: next_state=s[2]?(s[3]?D:C1):B2;
        	D: next_state=s[3]?D:C2;
        	C2: next_state=s[2]?(s[3]?D:C2):B2;
        	B2: next_state=s[1]?(s[2]?C1:B2):A;
        endcase
        */
    end
    //根据表格可以写出fr3,fr2,fr1
	assign fr3=(state==A);
    assign fr2=(state==A|state==B1|state==B2);
    assign fr1=(state==A|state==B1|state==B2)|(state==C2|state==C1);
    //B2,C2状态分别由下降得到,所以当处于这两个状态时dfr为1,
    //A状态为水位最低的状态,dfr为1
    assign dfr=(state==B2)|(state==C2)|(state==A);
endmodule
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值