Verilog:使用 PWM 控制 LED 的亮度
Verilog: Using PWM to control the brightness of an LED
我正在尝试理解找到的这个示例代码 here
module LED_PWM(clk, PWM_input, LED);
input clk;
input [3:0] PWM_input; // 16 intensity levels
output LED;
reg [4:0] PWM;
always @(posedge clk) PWM <= PWM[3:0]+PWM_input;
assign LED = PWM[4];
endmodule
首先,它创建 4 位寄存器 PWM_input 和 5 位寄存器 PWM。然后它继续在每个时钟周期将 PWM 设置为自身的 3 位加上 PWN_input。
这里究竟发生了什么?为什么 PWM 的 5 位中只有 4 位被使用,PWM_input 的值是多少?
实际控制LED时,是将LED设置为PWM[4]。与 PWM[4:0] 一样吗?还是独立值?
PWM[4]
本质上是 4 位 adder/accumulator 的进位位,该位用于打开 on/off LED。 PWM_input 的值决定 LED 打开和关闭的速度。如果示例写成
可能会更清楚
module LED_PWM( input clk,
input [3:0] PWM_input, // 16 intensity levels
output reg LED);
reg [3:0] PWM; // internal accumulator
always @(posedge clk) {LED,PWM} <= PWM + PWM_input;
endmodule
我正在尝试理解找到的这个示例代码 here
module LED_PWM(clk, PWM_input, LED);
input clk;
input [3:0] PWM_input; // 16 intensity levels
output LED;
reg [4:0] PWM;
always @(posedge clk) PWM <= PWM[3:0]+PWM_input;
assign LED = PWM[4];
endmodule
首先,它创建 4 位寄存器 PWM_input 和 5 位寄存器 PWM。然后它继续在每个时钟周期将 PWM 设置为自身的 3 位加上 PWN_input。
这里究竟发生了什么?为什么 PWM 的 5 位中只有 4 位被使用,PWM_input 的值是多少?
实际控制LED时,是将LED设置为PWM[4]。与 PWM[4:0] 一样吗?还是独立值?
PWM[4]
本质上是 4 位 adder/accumulator 的进位位,该位用于打开 on/off LED。 PWM_input 的值决定 LED 打开和关闭的速度。如果示例写成
module LED_PWM( input clk,
input [3:0] PWM_input, // 16 intensity levels
output reg LED);
reg [3:0] PWM; // internal accumulator
always @(posedge clk) {LED,PWM} <= PWM + PWM_input;
endmodule