`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineers: Lilly Paul & Kyle Brunnett // // Create Date: 12/9/2016 5:07:46 PM // Design Name: // Module Name: pwm // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module pwm( input clock, input pwm_on, input pwm_fw, output logic pwm_out ); logic [13:0] clockAccumulator; logic msClock; logic [7:0] msClockCount = 'd0; logic out = 'd0; logic [4:0] highTime; always @(posedge clock) begin if (clockAccumulator >= 'd5000) begin msClock = ~msClock; clockAccumulator = 0; end else clockAccumulator = clockAccumulator + 1; end; always @(posedge out) begin if (pwm_on == 0) begin highTime = 15; end else if (pwm_fw == 1) begin highTime = 17; end else highTime = 13; end always @(posedge msClock) begin if (out == 1) begin msClockCount = msClockCount + 1; if (msClockCount >= highTime) begin out = 0; msClockCount = 0; end end else begin msClockCount = msClockCount + 1; if (msClockCount >= 'd200) begin out = 1; msClockCount = 0; end end end always_comb begin pwm_out = out; end endmodule