流水呼吸灯-v1#DE10-Lite

  1. 现象:4个led间隔2s依次点亮并呼吸。
  2. 算法:结合之前设计的流水灯和呼吸灯设计,有2种方式实现流水呼吸灯,一是添加一个使能信号,控制每个led的计数模块;而是控制复位信号,不添加新的信号。第1个led默认计数点亮,第二个2s后开始点亮,第3个4s后开始点亮,第4个6s后点亮。

 

  1. 仿真结果:

 

image

 

 

 

  1. 引脚分配

 

image

 

  1. 核心代码:
  2. module led_breath_v3(
        input clk,rst_n,
        output [3:0] led
    );
    
        wire [3:0] ctrl_en;
        
        time_ctrl u0(
        .clk(clk),
        .rst_n(rst_n),
        .ctrl_en(ctrl_en)
        );
        
        led_breath_v2 L0(
        .clk(clk),
        .rst_n(ctrl_en[0]),
        .led(led[0])
        );
        led_breath_v2 L1(
        .clk(clk),
        .rst_n(ctrl_en[1]),
        .led(led[1])
        );
        led_breath_v2 L2(
        .clk(clk),
        .rst_n(ctrl_en[2]),
        .led(led[2])
        );
        led_breath_v2 L3(
        .clk(clk),
        .rst_n(ctrl_en[3]),
        .led(led[3])
        );
        
    endmodule

    led计数复位控制

  3. module time_ctrl(
        input clk,
        input rst_n,
        output reg [3:0] ctrl_en
        );
        
        parameter T1 = 100_000_000;    //2s
        parameter T2 = 200_000_000;    //4s
        parameter T3 = 300_000_000;    //6s
        
        reg [28:0] cnt;
        
        
        //counter
        always @(posedge clk,negedge rst_n)
            begin
                if(!rst_n)
                    cnt <= 0;
                else
                    if(cnt < T3 - 1)
                        cnt <= cnt + 1;
                    else
                        cnt <= cnt;
            end
            
        
        //turn on led 1 by 1
        always @(posedge clk,negedge rst_n)
            begin
                if(!rst_n)
                    ctrl_en <= 0;
                else
                    if(cnt == T3 - 1)
                        ctrl_en <= 4'b1111; //4 led all on
                    else
                        if(cnt >= T2 - 1)
                            ctrl_en <= 4'b0111; //3 led all on
                        else
                            if(cnt >= T1 - 1)
                                ctrl_en <= 4'b0011; //2 led both on
                            else
                                ctrl_en <= 4'b0001; //1 led  on
            end
        
    endmodule

     

posted on 2026-03-28 11:17  yf.x  阅读(2)  评论(0)    收藏  举报

导航