FPGA半天没搞懂刚问自己表哥说没问题,初学者有懂的大佬帮忙看看代码,感谢

     

用case来选择结果感觉cnt1一直等于0或者是case只选择了cnt==0

上板后只有case语句第一个状态有用,比如按下KEY1没有从左往右亮只有左面第一个亮

module beauey_led(
input clk,
input rst,
output reg[3:0]led,
input[3:0]key

);
reg    [27:0]cnt0;

reg    [1:0]cnt1;
wire  add_cnt1;
wire    end_cnt1;
wire    add_cnt0;
wire     end_cnt0;

//计数器计数2秒

always@(posedge clk or negedge rst)begin
    if(!rst)begin
        cnt0<=0;
    end
    else if(add_cnt0)begin
    if(end_cnt0)
        cnt0<=0;
    else
        cnt0<=cnt0+1;
    end
end
assign    add_cnt0=1;
assign    end_cnt0=add_cnt0&&cnt0==10_000_000-1;


//计数器用于流水灯状态选择四种状态
always@(posedge clk or negedge rst)begin
    if(!rst)begin
        cnt1<=1'd0;
    end
    else if(add_cnt1)begin
        if(end_cnt1)
            cnt1<=1'd0;
        else
            cnt1=cnt1+1'd1;
    end
       
end
assign add_cnd1 = end_cnt0;
assign end_cnd1 = add_cnt1 && (cnt1==1'd3);


//识别按键,切换模式
always@(posedge clk or negedge rst)begin
    if(!rst)begin
        led<=4'b0000;
    end
    else if(key[0]==0)//按下key0流水灯从左往右亮
        case(cnt1)
            2'd0:led<=4'b0001;
            2'd1:led<=4'b0010;
            2'd2:led<=4'b0100;
            2'd3:led<=4'b1000;
        endcase
    else if (key[1]==0)//按下key1流水灯从右往左亮
        case(cnt1)
            2'd0:led<=4'b1000;
            2'd1:led<=4'b0100;
            2'd2:led<=4'b0010;
            2'd3:led<=4'b0001;
        endcase
    else if(key[2]==0)//按下key3闪烁
        case(cnt1)
            2'd0:led<=4'b0101;
            2'd1:led<=4'b1010;
            2'd2:led<=4'b0101;
            2'd3:led<=4'b1010;
        endcase
    else if (key[3]==0)
            led<=4'b1111;
    else 
        led<=4'b0000;

end
endmodule

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值