HDLBits问题--Exams/ece241 2013 q4

 这个题表基本上给了状态和输出的FR1,2,3的思路,即input [3:1]s,output [3:1]fr。

简单的说就是水位在S1以下全开阀门,随着逐渐升高减少阀门用量。虽然提到了一嘴当当前水量大于之前的水量才用FR1,2,3但是其实只用考虑反向的dfr就行。

Dfr的用法这道题少说了一句当水量变化不足以改变状态s的时候,DFR保持不变。

其他情况的DFR无非 1、直接reset 2、小于最低点位 3、之前的水量大于现在的水量

上代码的话就是:

module top_module (
    input clk,
    input reset,
    input [3:1] s,
    output fr3,
    output fr2,
    output fr1,
    output dfr
); 
    wire [1:0]state;
    wire [1:0]next_state;
    wire [1:0]p_state;
    parameter A=0, B=1, C=2, D=3;
    always@(*)
        begin
            casez(s)
                3'b zz0:next_state=A;
                3'b z01:next_state=B;
                3'b 011:next_state=C;
                3'b 111:next_state=D;
            endcase
        end
                
    always@(posedge clk)
        begin
            if(reset) begin
                p_state=state;
                state=A;
                dfr=1;
            end
            else 
                begin
                    p_state=state;
                    state=next_state;
                    if(p_state==state) dfr=dfr;
                    else dfr=(p_state>state||state==A)?1:0;
                end
        end
    assign fr3=(state==A)?1:0;
    assign fr2=(state==A||state==B)?1:0;
    assign fr1=(state==A||state==B||state==C)?1:0;
endmodule

因为个人是软件转硬件可能一些逻辑比较奇怪,轻喷家人们

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值