Загрузка данных


`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