led跑马灯多种方法(移位法,位拼接法,调用模块法,位移及位拼接语法,testbench的理解,源文件的存储路径,计数器的个数,调用模块的方式)

本文探讨了三种简化LED灯控制的方法:移位法避免冗余条件,位拼接法通过循环操作减少代码,以及利用4-16译码器模块实现高效控制。通过实例展示了这些技术如何优化代码并提高效率。

  跟着教程写了几种方法,才发现自己写的虽然能实现,但比较繁琐。教程有三种方法:

1.移位法,每次左移一位,相比我自己写的,优点是不用把每一种情况都写出来。但是需要考虑左移到最后一位时需要自己再写个赋值语句重新回到第一位。

2.位拼接法,循环左移,每一次都把最后一位放到第一位,其他六位左移一位,克服了移位法的问题,简化了代码。

3.调用已有模块法,调用4-16译码器刚好可以实现流水灯,需要额外的counter作为译码器的输入。

  • 移位法
module led_run1(    //移位法
    clk,
    reset,
    led  
    );
    input clk;
    input reset;
    output reg [7:0]led;
    
    reg [5:0]counter1;
    always@( posedge clk or negedge reset )begin
        if( reset == 1'd0)
        counter1 <= 1'd0;
        else if(counter1 == 4 )    这两个虽然赋值语句一样,但是不能把判断语句合并。
        counter1 <=1'd0;
        else
        counter1 <= counter1 + 1'd1;     
    end
    
    always@(posedge clk or negedge reset) begin
        if( reset == 1'd0)
        led <= 8'b0000_0001;
        else if(counter1 == 4 )begin
            if(led == 8'b1000_0000)
            led <= 8'b0000_0001;      //最后一位的处理
            else
            led <= led << 1'd1 ;    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值