§ Код verilog
module pwm ( input clock, input [15:0] duty, output reg en ); reg [15:0] cnt; always @(posedge clock) begin ena <= cnt < duty; cnt <= cnt + 1; end endmoduleПоскольку тут ширина cnt 16 бит, то частота будет рассчитана так: 100000000 / 2^16 = 762 Гц.
pwm Pwm1
(
.duty (1024),
.clock (CLK100MHZ),
.en (LED_en)
);
Объявление на toplevel.§ Более короткий вариант
reg [15:0] pwm_led; // Частота 50'000'000 / 65536 = 762 Гц wire pwm_en = 1024 < pwm_duty; // Например 1024/65536 = 1.5% always @(posedge clock_50) pwm_led <= pwm_led + 1;
9 окт, 2020
© 2007-2023 Гнал лажовый восток