【问题标题】:Verilog: Using PWM to control the brightness of an LEDVerilog:使用 PWM 控制 LED 的亮度
【发布时间】:2016-09-14 12:23:13
【问题描述】:

我试图理解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] 一样吗?还是它是一个独立的值?

【问题讨论】:

    标签: verilog pwm


    【解决方案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
    

    【讨论】:

    • 好的,如果我想显示一个特定的强度级别(1-16),我该怎么做呢?我一直在尝试将 PWM_input 设置为 [3:2] 之类的值,但我无法达到特定的亮度水平。更具体地说,将 PWM + PWM_input 更改为 PWM + PWM_input[3:3] 会达到 16 的亮度级别吗? 15 点怎么样,会是 [3:2] 吗?
    • 亮度级别为 1-15 或 4'b001 到 4'b1111。对于这个特定的设计,没有可预测的方法来将 LED 设置为恒定开启或关闭。我不知道您所说的值 [3:2] 是什么意思。那是一个位范围。你的意思是 4'b1100 还是 12,即设置位 [3] 和 [2] 为 1。
    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    相关资源
    最近更新 更多