• Vivado_8位流水灯


    Design

    代码中的计数器设置是因为我的开发板的时钟是100MHZ的,也就是1秒完成了100_000_000次时钟信号,所以我设置计数器为100_000_000次。

    也就是说,我让流水灯的变化周期为1 s。

    counter == 32'd100_000_000

    代码

    verilog
    `timescale 1ns / 1ps
    module flow_led(
        clk, 
        reset, 
        led 
    );
    input clk;
    input reset;
    output [7:0] led;
    
    reg [7:0] led;
    reg [31:0] counter; 
    reg [1:0] state; 
    
    
    always @(posedge clk or negedge reset)
        begin
            if(!reset) 
                begin
                    counter <= 32'd0;
                end
            else if ( counter == 32'd100_000_000) //change T
                begin
                    counter <= 32'd0;
                end
            else 
                begin
                    counter <= counter + 32'd1;
                end
            end
            
    
    always @(posedge clk or negedge reset)
        begin
            if(!reset) 
                begin
                    state <= 1'd0;
                end
            else if( counter == 32'd0 )
                begin
                state <= 1'd1;
                end
            else
                begin
                state <= 1'd0;
                end
            
        end
        
    
    always @(posedge clk or negedge reset)
        begin
            if(!reset) 
                begin
                    led <= 8'b1111_1111;
                end
            else 
                begin
                    if(state == 1'd1)
                    begin
                        if(led == 8'b1111_1111)
                        begin
                            led <= 8'b0000_0001;
                        end
                        else if(led == 8'b1000_0000)
                        begin
                            led <= 8'b0000_0001;
                        end
                        else
                        begin
                            led <= led << 1'b1;
                        end
                    end
                end
        end
    
    endmodule
    

    Simulation

    若在波形仿真中,我们想让与模拟的时钟信号也是100MHZ,让流水灯的周期也为1s,那样的话仿真是跑不完的。

    所以我们先修改刚刚的计数周期:

    counter == 32'd1_000_000

    仿真中让时钟周期为1000 ns

    parameter T=1000;

    这样就可以很轻松的看到流水灯全周期的波形图了。

    代码

    verilog
    `timescale 1ns/1ns
    module sim_dev1();
    parameter T=1000;
    reg clk;
    reg reset;
    wire [7:0] led;
    
    initial 
    begin
    clk=1'b0;
    reset=1'b0;
    #(T+1) reset=1'b1;
    end
    
    always #(T/2) clk=~clk;
    flow_led u1(
    .clk(clk),
    .reset(reset),
    .led(led)
    );
    
    endmodule
    

    波形图

    参考资料


    __EOF__

  • 本文作者: 江水为竭
  • 本文链接: https://www.cnblogs.com/Az1r/p/16857029.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    【【萌新的SOC学习之SD卡DMA回路读写大数据的实验】】
    搜索排序技术简介
    CPU占用过高/内存占用过高分析
    怎样才能批量查询网站的谷歌PR权重?把手教你批量查询网站谷歌PR权重值
    git命令之追溯文件修改记录:git blame 和 git show【笔记】
    C#开发的OpenRA游戏之金钱系统(5)
    癫痫脑电信号基础知识
    【Docker】Dockerfile构建镜像
    Linux内存映射函数mmap与匿名内存块
    Zookeeper技术精华带领深入详细了解
  • 原文地址:https://www.cnblogs.com/Az1r/p/16857029.html