初级会员 
  
	- 积分
 - 149
 
        - 金钱
 - 149 
 
       - 注册时间
 - 2015-3-12
 
      - 在线时间
 - 170 小时
 
 
 
 | 
 
 
 楼主 |
发表于 2021-11-6 18:47:44
|
显示全部楼层
 
 
 
我在网上找到了另外一个程序,做了些修改,原地址是:https://mp.weixin.qq.com/s/1pmkaKHoeINP6caTRBzCBg 
 
`timescale 1ns / 1ps 
module pwm_gen( 
 
input rst_n, 
input sysclk, 
input [15:0] period,//周期 最大65535 
input [15:0] duty_cycle_buf,//占空比 
output reg pwm1,//PWM输出引脚 
); 
reg [16:0] cnt_cycle; 
//计数器电路,cnt_cycle就是计数器输出计数结果                                                               
always@(posedge sysclk)  
begin  
 
    cnt_cycle <= (cnt_cycle == (period-1)) ? 0 : cnt_cycle + 1;         
 
end    
 
/*比较器电路   ,pwm_buf  为输出PWM结果,红色字为计数器输入,绿色字为比较器比较线*/ 
 
always@(posedge sysclk)  
 
begin  
 
    pwm1 <= (cnt_cycle < duty_cycle_buf) ? 1'b1 : 1'b0; 
 
end    
 
//只有在cnt_cycle计数一个周期T的时候,占空比值才会更新,也就是比较线才会移动! 
//因为输入占空比可以不断改变,也就是第一张图的比较线是会上下移动的,为了不影响我们在计数的过程中突然采集到突变的值最终导致,不平滑的占空比,所以占空比输入在每个计数周期完成后才会去采集。 
always@(posedge sysclk)  
 
begin  
 
      if(cnt_cycle == (period-1)) 
                duty_cycle_buf <= (duty_cycle > period-1) ? period-1 : duty_cycle;  
 
end 
 
endmodule 
 
不明白的是,后面这一句,因为我的占空比和周期是通过串口发送给FPGA,那么我这样写有什么问题?? 
最后一句,cnt_cycle计数一个周期T的时候,如果为真,占空比值duty_cycle_buf=周期,如果为假占空比duty_cycle_buf=计数值,是这样理解码?? |   
 
 
 
 |