2016-09-14 129 views
0

我試圖使這個示例代碼感亮度發現here的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設置爲自己的3位加上PWN_input。

究竟發生了什麼?爲什麼PWM的5位中只有4位正在使用,PWM_input的值是多少?

當實際控制LED時,它將LED設置爲PWM [4]。這是否與PWM [4: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 
+0

好的,如果我想要顯示特定的強度等級(1-16),我該如何去做呢?我一直在嘗試將PWM_input設置爲[3:2],但我無法達到特定亮度級別。更具體地說,將PWM + PWM_input改爲PWM + PWM_input [3:3]的亮度等級爲16? 15點左右,會不會是[3:2]? – Broadway

+0

亮度級別爲1-15或4'b001至4'b1111。對於這個特定的設計,沒有可預測的方式來將LED設置爲常開或常閉。我不知道你的意思是[3:2]。這是一個有點範圍。你的意思是4'b1100或12,即將位[3]和[2]設置爲1。 –