8.FPGA_Verilog 呼吸灯

功能:使led灯由亮灭到亮,由亮到灭

描述:定义cnt_us,cnt_ms,cnt_s三个计数器
通过cnt_ms和cnt_s比较来调节占空比
定义flag信号,实现等的亮灭反转

8.FPGA_Verilog 呼吸灯_第1张图片

代码:

module  breath_led(

input       wire                sclk            ,
input       wire                rst_n           ,

output      reg     [ 3:0]      led     

);

parameter   max_us  =           49              ;
parameter   max_ms  =           999             ;
parameter   max_s   =           999             ;

//cnt_us
reg         [ 5:0]              cnt_us          ;
always@(posedge sclk or negedge rst_n)
if(!rst_n)
    cnt_us          <=          0               ;
else if(cnt_us==max_us)
    cnt_us          <=          0               ;
else
    cnt_us          <=          cnt_us+1'b1     ;

//cnt_ms    
reg         [ 9:0]              cnt_ms          ;
always@(posedge sclk or negedge rst_n)
if(!rst_n)
    cnt_ms          <=          0               ;
else if(cnt_us==max_us&&cnt_ms==max_ms)
    cnt_ms          <=          0               ;
else if(cnt_us==max_us)
    cnt_ms          <=          cnt_ms+1'b1     ;

//cnt_s
reg         [ 9:0]              cnt_s           ;
always@(posedge sclk or negedge rst_n)
if(!rst_n)
    cnt_s           <=          0               ;
else if(cnt_us==max_us&&cnt_ms==max_ms&&cnt_s==max_s)
    cnt_s           <=          0               ;
else if(cnt_ms==max_ms&&cnt_us==max_us)
    cnt_s           <=          cnt_s+1'b1      ;

//flag
reg                             flag            ;
always@(posedge sclk or negedge rst_n)
if(!rst_n)
    flag            <=          0               ;
else if(cnt_us==max_us&&cnt_ms==max_ms&&cnt_s==max_s)
    flag            <=          ~flag          ;

//led   
always@(posedge sclk or negedge rst_n)
if(!rst_n)
    led             <=          0               ;
else if(flag==0&&cnt_s>=cnt_ms)
    led             <=          4'b1111         ;
else if(flag==1&&cnt_s<=cnt_ms)
    led             <=          4'b1111         ;
else
    led             <=          0               ;

endmodule

你可能感兴趣的:(8.FPGA_Verilog 呼吸灯)