呼吸灯设计
需求分析
- 设计一个2s的呼吸灯,从全暗到全里亮需要2s。系统时钟为50MHz。
设计思想
- 将2s划分为1000个2ms作为呼吸灯的变化周期:
- 2ms又分为1000个2us作为呼吸灯的变化单元;
- 第一个2ms周期内,1000个2us为全暗;
- 第二个2ms周期内,第一个2us为亮,其余的999个2us为暗;
- 第三个2ms周期内,前两个2us为亮,其余的998个2us为暗;
- 以此类推
- 十进制99转为二进制:110 0011,需要在程序中定义7位宽寄存器;
- 十进制999转为二进制:11 1110 0111,需要在程序中定义10位宽寄存器。
时序图
程序编写
// project name : breath led
// Date : 2021/12/15
// By : Coucher
// Module function : ***
module bln(
input clk, // system clock, 50MHz
input rst_n, // 系统复位信号,低电平有效
output reg [3:0] led // 4个LED灯
);
// 定义 2us, 2ms, 2s寄存器
reg [6:0] cnt_2us;
reg [9:0] cnt_2ms;
reg [9:0] cnt_2s;
// 定义一个标志信号
reg flag;
// cnt_2us: 系统时钟50MHz,定义2us的计数,即计数100次(0~99)
always@(posedge clk or negedge rst_n)
begin
if(rst_n==1'b0