§ Код verilog
1module pwm
2(
3 input clock,
4 input [15:0] duty,
5 output reg en
6);
7
8reg [15:0] cnt;
9always @(posedge clock) begin
10
11 ena <= cnt < duty;
12 cnt <= cnt + 1;
13
14end
15
16endmodule
Поскольку тут ширина cnt 16 бит, то частота будет рассчитана так: 100000000 / 2^16 = 762 Гц.
1pwm Pwm1
2(
3 .duty (1024),
4 .clock (CLK100MHZ),
5 .en (LED_en)
6);
Объявление на toplevel.
§ Более короткий вариант
1reg [15:0] pwm_led;
2wire pwm_en = 1024 < pwm_duty;
3always @(posedge clock_50) pwm_led <= pwm_led + 1;