HDLbits:Exams/ece241 2013 q4

本题是一个实际的应用问题,一个水库,有三个传感器S1、S2、S3提供输入,经过控制电路,四个输出给到四个流量阀。也就是说,本题想让我们根据水位去控制流量阀。

问题的关键在于把什么抽象成state,答案是:水位的高低。根据题意,我们知道水位高低有四种状态,可以用传感器检测。

在第一个always块中,把三个传感器输入的值,作为next_state。

在第二个always块中,用next_state判断,输出什么信号给四个流量阀。

在第三个always块中,把next_state赋给state。

在第四个always块中,给dfr赋值。因为dfr第四个水阀判断条件比较特殊,所以不跟另外三个水阀写在一起判断。

判断

module top_module (
    input clk,
    input reset,
    input [3:1] s,
    output fr3,
    output fr2,
    output fr1,
    output dfr
); 
    reg [2:0] state, next_state;
    
    parameter A=3'b111, B=3'b011, C=3'b001, D=3'b000;
    
    //根据输入决定下一个状态
    always@(*)begin
        case(s)
            A: next_state = A;
            B: next_state = B;
            C: next_state = C;
            D: next_state = D;
            default: next_state = D;
        endcase
    end

     always@(posedge clk)begin
        if(reset)
        	{fr3,fr2,fr1} <= 3'b111;
        else
            case(next_state) //这里要想清楚判断条件是state还是next_state
                A : {fr3,fr2,fr1} <= 3'b000;
                B : {fr3,fr2,fr1} <= 3'b001;
                C : {fr3,fr2,fr1} <= 3'b011;
                D : {fr3,fr2,fr1} <= 3'b111;
            endcase
    end
    
            
    always@(posedge clk)begin
        if(reset)
            state <= D;
        else
            state <= next_state;
    end
    
    always@(posedge clk)begin
        if(reset)
            dfr <= 1;
        else if(next_state < state)
            dfr <= 1;
        else if(next_state > state)
            dfr <= 0;
        else
            dfr <= dfr;
    end
         
endmodule

你可能感兴趣的:(fpga开发)