verilog写的一个简洁实用的PWM模块

直接在value里面输入1-98就可以改变占空比,实现PWM调制。改变PRE_DIV参数,可以根据不同clk设置不同的PWM频率。
在此分享。
 

module pwm_ctlr#(parameter pre_div=1000)(

input clk,

input [6:0] value,

output reg  pwm

);

reg [20:0] delay_cntr ;always @ (posedge clk )delay_cntr <= (delay_cntr==(pre_div-1))?0:(delay_cntr +1);

reg [6:0] c;

always @(posedge clk) if (delay_cntr==0) c<=(c==99)?0:(c+1);

always @(posedge clk) if (c==0)pwm <=1;else if (c==value) pwm <=0;

endmodule

 

 

module test_fans_ctlr(

input clk,

output  pwm,pwm1

);

 

pwm_ctlr fans_ctlr(

.clk(clk),

.value(50),

.pwm(pwm)

);

 

assign pwm1=pwm;

 

endmodule

 

 

你可能感兴趣的:(VERILOG,总结和计划)