PWM任意频率,任意占空比波形

本文介绍了一个使用Verilog编写的模块,用于生成PWM波形。它接受10Mhz时钟、使能信号、频率和占空比作为输入,确保输出的PWM频率不超过100kHz,占空比不超过100%,并通过计数器实现精确的周期和高电平时间控制。
摘要由CSDN通过智能技术生成
module  pwm_gen(

 input 	       clk,     //连接到10M
 input 	       pwm_en,  //连接到sys_on,使能信号,高电平使能输出,低电平输出为0
 input 	       rst_n,
 input  [23:0]  pwm_freq,    //输入波形的时钟频率       
 input  [7:0]   pwm_pct,     //输入波形的占空比
 
 output         pwm_out     //产生的PWM输出  最大时钟频率为100MHz,最大占空比为100%
);

 reg  [23:0]    pwm_cnt;
 
 reg  [23:0]    pwm_freq_para;        //要产生波形的时钟频率
 reg  [7:0]     pwm_pct_para;         //要产生波形的占空比
 
 wire [31:0]    pwm_period;          //PWM的周期,若主时钟96MHz,产生4MHz的波形,则period = 96/4
 wire [31:0]    pwm_pct_period;      //高电平的时间,如主时钟96M,产生4MHz,占空比25%的波形,则h_time=24*0.25 = 6
 
 assign    pwm_period     = 10_000_000/pwm_freq_para; //unit 0.1us
 assign    pwm_pct_period = 100_000*pwm_pct_para/pwm_freq_para;//unit 0.1us    占空比是按百分比算的,所以应该除以100,正好!!!
 
 
 //make sure pwm frequecy max 100khz
 always@(*)begin
  if(pwm_freq > 24'd100_000)         //确保PWM的最大时钟频率为100KHz
     pwm_freq_para <= 24'd100_000;
  else
     pwm_freq_para <= pwm_freq;
 end
 
  //make sure pwm high percent  max 100%
 always@(*)begin
  if(pwm_pct > 8'd100)             //确保PWM的最大占空比为100%
     pwm_pct_para <= 8'd100;
  else
     pwm_pct_para <= pwm_pct;	  
 end
 
 
 
 //pwm count from 0 to pwm period
 always@(posedge clk or negedge rst_n)begin   //单纯的计数器
	if(!rst_n)
		pwm_cnt<=24'b0;
	else if(pwm_en)begin
	   if(pwm_cnt>=(pwm_period-1))
			pwm_cnt<=24'b0;
		else
			pwm_cnt<=pwm_cnt+24'd1;
    end
   else
      pwm_cnt<=24'b0;
 end
 
 //pwm out signal generate 
 reg    pwm_sig;
 assign pwm_out = pwm_sig;
 
 always@(posedge clk or negedge rst_n)begin
	if(!rst_n)
		pwm_sig<=1'b0;
	else if(pwm_en)begin
		  if(pwm_cnt<pwm_pct_period)
			 pwm_sig<=1'b1;
		  else
			 pwm_sig<=1'b0;		 
   end
	else
	   pwm_sig<=1'b0;	  
 end
 
endmodule
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值