|
- module pwm_8bit( //8位PWM发生器模块
- input clk, //时钟输入
- input [7:0] pwm, //占空比 0:低电平 255:高电平
- output out //PWM波输出 PWM频率:时钟频率/256
- );
- reg [7:0] spwm;
- reg [7:0] i;
- assign out = (i < spwm) ? 1'b1 : 1'b0;
- always @(posedge clk) begin
- if(!i) begin
- spwm <= pwm;
- end
- i = i + 8'd1;
- if(&i) begin
- i = 8'd0;
- end
- end
- endmodule
- module sawtooth_8bit( //8位锯齿波发生器模块
- input clk, //时钟输入
- output reg [7:0] pwm //PWM值输出 锯齿波频率:时钟频率/256
- );
- always @(posedge clk) begin
- pwm <= pwm + 8'd1;
- end
- endmodule
- module main(
- input clk,
- output out
- );
- wire [7:0] pwm;
- integer i;
- reg j;
- always @(posedge clk) begin
- i = i + 1;
- if(i >= 50000000/256/2/1000) begin
- i = 0;
- j <= !j;
- end
- end
- sawtooth_8bit m1(
- .clk(j),
- .pwm(pwm)
- );
- pwm_8bit m2(
- .clk(clk),
- .pwm(pwm),
- .out(out)
- );
- endmodule
复制代码 |
|