Verilog:使用PWM控制LED的亮度

时间:2016-09-14 12:23:14

标签: verilog pwm

我正在尝试理解找到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。

这到底发生了什么?为什么只使用5位PWM中的4位,PWM_input的值是多少?

实际控制LED时,将LED设置为PWM [4]。这与PWM [4:0]相同吗?或者它是一个独立的价值?

1 个答案:

答案 0 :(得分:1)

PWM[4]本质上是4位加法器/累加器的进位,该位用于打开/关闭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