每隔10msled开始变化,形成呼吸灯,灯在2秒内变亮后逐渐变暗再变亮
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 18:14:01 08/12/2020
// Design Name:
module huxi_light(
input wire clk,
input wire rst_n,
output led
);
parameter CNT_2S=400;
parameter CNT_1S=200;
parameter CNT_10MS=500_000;
parameter PWM_NUM=5000;
reg [23:0] cnt_10ms;
reg [10:0] cnt_2s;
reg led_r;
reg [28:0] cycle_duty;
reg led_flag;//为1代表变亮,为0代表变暗
always@(posedge clk or negedge rst_n)
if(rst_n==0)
cnt_10ms<=0;
else if(cnt_10ms==CNT_10MS-1)
cnt_10ms<=0;
else
cnt_10ms<=cnt_10ms+1;
/* 计时2秒 */
always@(posedge clk or negedge rst_n)
if(rst_n==0)
cnt_2s<=0;
else
if(cnt_2s==CNT_2S-1)
cnt_2s<=0;
else if(cnt_10ms==CNT_10MS-1)
cnt_2s<=cnt_2s+1;
/* led_flag */
always@(posedge clk or negedge rst_n)
if(rst_n==0)
led_flag<=0;
else if(cnt_2s<=CNT_1S)
led_flag<=1;
else if((cnt_2s<=CNT_2S-1)&&(cnt_2s>CNT_1S))
led_flag<=0;
else
led_flag<=led_flag;
/* cycle_duty */
always@(posedge clk or negedge rst_n)
if(rst_n==0)
cycle_duty<=0;
else if(cnt_10ms==CNT_10MS-1&&led_flag==1)
cycle_duty<=cycle_duty+PWM_NUM;
else if(cnt_10ms==CNT_10MS-1&&led_flag==0)
cycle_duty<=cycle_duty-PWM_NUM;
else
cycle_duty<=cycle_duty;
always@(posedge clk or negedge rst_n)
if(rst_n==0)
led_r<='d0;
else
if(cnt_10ms<=cycle_duty)
led_r<=1;
else
led_r<=0;
assign led=led_r;
endmodule