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

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

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

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 ;      //注意左移几位的语法,应该怎么写
        end
    end
endmodule
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » led跑马灯多种方法(移位法,位拼接法,调用模块法,位移及位拼接语法,testbench的理解,源文件的存储路径,计数器的个数,调用模块的方式)