呼吸灯实验一个比较重要的知识点就是PWM,PWM调节LED的亮度。PWM还不熟悉的同学们可以去补习一下,由于博主之前是做PWM变频器的,对这方面稍微熟悉一点,于是就不写PWM相关内容了。
系统框图:
代码:
`timescale 1ns / 1ps
module pwm_led(
input clk,
input rst_n,
output led
);
reg[15:0] period_cnt;// 周期计数器,1KHZ = 1ms = 100 0000ns 系统周期20ns 100 0000/20=50000 二进制为16位;
reg[15:0] duty_cycle;//占空比,用来与计数器比较,所以位宽相同;
reg inc_dec_flag;//0:inc递增 1:dec递减;
assign led = (period_cnt >= duty_cycle) ? 1'b1 : 1'b0;//占空会从0开始递增(暗),period_cnt一开始大于duty_cycle时间会很多,所以先拉高电平,让LED灭
always@ (posedge clk or negedge rst_n) begin
if(~rst_n)
period_cnt <= 16'd0;
else if(period_cnt == 16'd50000)
period_cnt <=16'