原创 cpld pwm

2009-10-5 18:47 2217 7 7 分类: FPGA/CPLD

// 等脉宽pwm波。用pwm_dat控制占空比


module IntermediateFrequencyWeld(
   clk,rst_n,
   PWM_dat,     
   IGBT_1,IGBT_2
  );


input clk;  //50MHz
input rst_n; //低电平复位信号
input[3:0] PWM_dat;
output IGBT_1,IGBT_2;


//---------------------------------------------------
//reg[14:0] cnt; //分频计数器    1.6k
reg[3:0] cnt;
reg us600_r;
always @ (posedge clk or negedge rst_n) //异步复位
 if(!rst_n) cnt <= 4'd0;
 else   cnt = cnt+1'b1;         //寄存器cnt 0.6ms循环计数
//-------------------------------------------------------- 
reg t1;
always @ (posedge clk or negedge rst_n) //异步复位
 if(!rst_n) t1 <= 1'b0;
 else if (cnt == 4'b1110) t1 <= 1'b1;  
 
reg[3:0] pwm_r;
always @(posedge clk or negedge rst_n)
  if (!rst_n) pwm_r <= 1'b0;
  else if (t1) pwm_r <= PWM_dat;   //在每个周期的开始,才将变化的值采集进来,不然可能出现尖峰杂波。
  
//---------------------------------------------------------------------------- 
always @ (negedge clk or negedge rst_n) //比较时用下降延,防止出现竞争。让clk在上升沿把cnt数值稳定后,再用来与pwm_r进行比较。


 if (!rst_n) us600_r<= 1'b0;
 else if(pwm_r > cnt) us600_r <= 1'b1; //
 else  us600_r <= 1'b0;
   


//----------------------------------------------------


assign IGBT_1 = us600_r;
assign IGBT_2 = ~us600_r;


endmodule


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条