1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
module pwm (clk, data_in, load, pwm_out); input clk; input [9:0] data_in; input load; output pwm_out; reg [9:0] d; reg [9:0] count; reg pwm_out; always @ (posedge clk) if (load == 1'b1) d <= data_in; initial count = 10'b0; always @ (posedge clk) begin count <= count + 1'b1; if (count > d) pwm_out <= 1'b0; else pwm_out <= 1'b1; end endmodule