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