赞
踩
呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。其广泛应用于手机之上,并成为各大品牌新款手机的卖点之一,起到一个通知提醒的作用。今天我们就用开发板实现一个呼吸灯。
module pwm( input wire clk, input wire rst_n, output wire led ); parameter COUNT1 = 6'd50; parameter COUNT2 = 10'd1000; parameter COUNT3 = 10'd1000; reg[5:0] cnt1; reg[9:0] cnt2; reg[9:0] cnt3; always @(posedge clk or negedge rst_n) begin if(~rst_n) begin cnt1 <=6'd0; end else if(cnt1 == COUNT1 - 1)begin cnt1 <= 6'd0; end else begin cnt1 <= cnt1 + 1; end end always @(posedge clk or negedge rst_n) begin if(~rst_n) begin cnt2 <= 10'd0; end else if(cnt1 == COUNT1 - 1)begin if(cnt2 == COUNT2 - 1) cnt2 <= 10'd0; else begin cnt2 <= cnt2 + 1; end end else begin cnt2 <= cnt2; end end always @(posedge clk or negedge rst_n) begin if(~rst_n) begin cnt3 <= 10'd0; end else if(cnt2 == COUNT2 - 1 && cnt1 == COUNT1 - 1)begin if(cnt3 == COUNT3 - 1) cnt3 <= 10'd0; else begin cnt3 <= cnt3 + 1; end end else begin cnt3 <= cnt3; end end assign led = cnt3>cnt2?1:0; endmodule
module pwm_tb(); reg clk; reg rst_n; wire led; parameter SYS_CLK = 20; parameter TIME_US = 5; parameter TIME_MS = 10; parameter TIME_S = 10; always #(SYS_CLK/2) clk = ~clk; initial begin clk<=1'b0; rst_n<=1'b0; #(SYS_CLK*2); rst_n<=1'b1; #(2*(TIME_S+1)*(TIME_MS+1)*(TIME_US+1)*SYS_CLK); $stop; end pwm #( .COUNT1(TIME_US), .COUNT2(TIME_MS), .COUNT3(TIME_S) ) inst_pwm ( .clk (clk), .rst_n (rst_n), .led (led) ); endmodule
verilog实现呼吸灯需要三个计数器来控制,达到呼吸灯的效果,总体来说不难
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。