Verilog:使用PWM来控制LED的亮度



我试图让这个示例代码在这里找到的意义

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设置为自身加上PWN_input的3位。

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

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

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

最新更新