HDLBitses Exams/ece241 2013 q4

1、这个题把题干翻译下来读懂还是挺简单的,害英语还是重点的啊。

 2、状态的话就跟表所示就四个状态,根据水位来判断,水位低的话进水就多一点。水位高的话就进水少一点。那四个输出其实就是进水的开关,当时看的时候这里弄晕了好久。还有就是那个dfr那里其实那个也简单只要上一个水位比现在的水位高那就开,比现在的低或者一样那就不开。(其实就是水位如果一直增加那就不开,水位减少那就开)

3、写的时候那三个还好说就是dfr没考虑上一个状态跟现在状态一样的情况。

4、仿真的时候说我会有lanch的情况,case语句一定要有default。这次没写了,下次注意。(主要是题干也没要求,应该不会有)。

完整代码如下:

module top_module (
    input clk,
    input reset,
    input [3:1] s,
    output fr3,
    output fr2,
    output fr1,
    output dfr
); 

    parameter A=3'd0,B=3'd1,C=3'd2,D=3'd3;
    
    reg [2:0]state,last_state,next_state;
    always@(*)begin //切换状态
        case(s)
            3'b000:next_state=A;
            3'b001:next_state=B;
            3'b011:next_state=C;
            3'b111:next_state=D; 
        endcase
    end
    always@(posedge clk)begin
        if(reset)begin
        state<=A; 
        end
        else begin
            last_state<=state;
            state<=next_state;
            
        end
        
    end
    
    always@(*)begin
        case(state)
           A:begin
               fr3=1'b1;
               fr2=1'b1;
               fr1=1'b1;
           end
           B:begin
               fr3=1'b0;
               fr2=1'b1;
               fr1=1'b1;
           end
           C:begin
               fr3=1'b0;
               fr2=1'b0;
               fr1=1'b1;
           end
           D:begin
               fr3=1'b0;
               fr2=1'b0;
               fr1=1'b0;
           end
       endcase
        
        //dfr=((last_state-state)>1)?1'b0:1'b1;//忽略了之前状态跟现在状态一样的情况
    end
     always @(*) begin
           if(state == A)
              dfr = 1'b1;
           else if(last_state > state)
               dfr = 1'b1;
           else if(last_state < state)
               dfr = 1'b0;
           else
               dfr = dfr;   //will generate latch        
       end
    
endmodule

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值