`timescale 1ns / 1ps
module PWM_generator #(
parameter CLK_IN = 50000000,
parameter CLK_OUT = 100,
parameter DUTY = 50
)(
input clk_i,
input nrst_i,
output sig_o
);
localparam CNT_MAX = CLK_IN / CLK_OUT;
localparam TRIG = CNT_MAX * DUTY / 100;
reg [31:0] count;
always @(posedge clk_i) begin
if (!nrst_i)
count <= 0;
else if (count > CNT_MAX)
count <= 0;
else
count <= count + 1;
end
assign sig_o = (count < TRIG) ? 1 : 0;
endmodule