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

- 引脚分配

- 核心代码:
-
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计数复位控制
-
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
浙公网安备 33010602011771号