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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值