-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpwm_generator.v
More file actions
75 lines (71 loc) · 1.92 KB
/
pwm_generator.v
File metadata and controls
75 lines (71 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: UdS
// Engineer: Peter Jose
//
// Create Date: 10:40:20 09/13/2022
// Design Name: Experiment III
// Module Name: pwm_generator
// Project Name: PWM Module
// Target Devices: Artix 7
// Tool versions: ISE P.68d
// Description: Module to generate PWM
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module pwm_generator #(parameter PWM_RES = 10)(
input clk, // clock
input reset, // reset pin
input sync_signal, // sync_signal to resync the PWM value
input [PWM_RES-1:0] pwm_value, // pwm_value
input [11:0] t_lsb, // t_lsb to syn with the clock
output reg pwm_signal // pwm signal output
);
// Registers
reg [11:0] clk_cycle_counter;
reg [PWM_RES-1:0] pwm_bit_counter;
reg [PWM_RES:0] pwm_current_set_value;
// Initial block
initial
begin
clk_cycle_counter = 0;
pwm_bit_counter = 1;
pwm_signal = 0;
pwm_current_set_value = pwm_value;
end
// always block works with positive clock
always @(posedge clk)
begin
// when reset or sync button is pressed
if (reset == 1 || sync_signal == 1)
begin
pwm_bit_counter <= 0;
clk_cycle_counter <= 0;
pwm_signal <= 0;
// when sync button is pressed
if (sync_signal == 1)
pwm_current_set_value <= pwm_value;
end
else
begin
// count the clock cycles
clk_cycle_counter <= clk_cycle_counter + 1;
if(clk_cycle_counter == t_lsb)
begin
// Reset clk cycle count to zero
clk_cycle_counter <= 0;
if (pwm_bit_counter < 10'd1023)
pwm_bit_counter <= pwm_bit_counter +1;
else
pwm_bit_counter <= 1;
// Ton Toff control section
pwm_signal <= (pwm_bit_counter <= pwm_current_set_value);
end
end
end // @always end
endmodule