led流水灯练习

要求:每个流水灯依次闪烁0.5s

实现方法3种:

1.使用移位法实现

module led_run(
    clk,
    reset,
    led
    );
    input clk;
    input reset;
    output reg [7:0]led;
    reg [24:0]counter;
    always@(posedge clk or posedge reset)
    if (!reset)
        counter <= 0;
    //else if (counter==24999999)
    else if (counter==24999)
        counter<=0;
    else 
        counter<=counter+1'd1;//实现了计数器功能
    
    always@(posedge clk or posedge reset)
    if (!reset)
        led<=8'b0000_0001;
     //else if (counter==24999999)begin
     else if (counter==24999)begin
        if(led==8'b1000_0000)
            led<=8'b0000_0001;
        else
            led<=led<<1;
     
        end
        
        
        
        
endmodule

2.对位移位法

module led_run(
    clk,
    reset,
    led
    );
    input clk;
    input reset;
    output reg [7:0]led;
    reg [24:0]counter;
    always@(posedge clk or posedge reset)
    if (!reset)
        counter <= 0;
    //else if (counter==24999999)
    else if (counter==24999)
        counter<=0;
    else 
        counter<=counter+1'd1;
    
    always@(posedge clk or posedge reset)
    if (!reset)
        led<=8'b0000_0001;
     //else if (counter==24999999)begin
     else if (counter==24999)
        led<={led[6:0],led[7]}; //和上边不一样的地方,这里简化了代码
        
endmodule

3.调用3-8译码器模块法

module led_run(
    clk,
    reset,
    led
    );
    input clk;
    input reset;
    output  [7:0]led;
    reg [24:0]counter;
    reg [2:0]counter_2;
    always@(posedge clk or posedge reset)//计时器
    if (!reset)
        counter <= 0;
    else if (counter==24999999)//不是最大值所以要加counter==24999999来使counter<=0
        counter<=0;
    else 
        counter<=counter+1'd1;
    always@(posedge clk or posedge reset)//对应38译码器的一个计数器
    if(!reset)
        counter_2<=0;
//        else if(counter_2==7)
//        counter_2=0;这不用和上边计时器一样加这个,因为7是【2:0】的最大值,会自动回到0
    else if(counter_2==24999999)
        counter_2<=counter_2+1'b1;
     
    decoder_3_8(//调用3-8译码器模块
     .a(counter[2]),
     .b(counter[1]),
     .c(counter[0]),
     .out(led)
     )       
endmodule

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只准备起飞的小菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值