2016-03-07 100 views
1

我想學習verilog之前做過C++的。作爲一種學習練習,我試着在看到10次按鍵後閃爍LED。我還有一個額外的重置按鈕,可以再次啓動10次計數。我試過的東西我不能編譯。任何人都可以將我指向正確的方向嗎?Verilog if語句賦值錯誤

我的代碼是:

module led_counter (button, nreset, led); 

input button, nreset; 
output led; 
reg counter[4:0];   // to hold the current count 

always @ (negedge nreset) begin 
    counter <= 0;   // Just reset counter 
end 

always @ (negedge button) begin 

    if (counter == 10) begin // see if the button has been pressed 10 times 
     led_state <= 1;  // turn the led on 
    end 

    else begin 
    led_state <= 0;   // the led is off 
    counter <= counter + 1; 
    end 

end 

assign led = led_state; 

endmodule 

回答

3

led_state未聲明,它應該是一個REG

爲了讓事情更簡潔,我還將這兩個過程重組爲一個。這將使它看起來像是一個異步復位的同步過程,即由時鐘觸發並在復位的下降沿復位。

always @ (posedge button or negedge nreset) begin 
    if(~nreset)  //reset counter when nreset is low 
     counter <= 0; 
    else begin  //do something on posedge of button 
     //Do something// 
end //end process 

它也更有可能被合成。

+0

感謝您的評論@ krouitch - 幫助。 我不認爲這就是我正在尋找的,因爲nreset輸入實際上是一個鎖定按鈕,而不是一個momentry按鈕。所以我真的只想檢測邊緣。 我相信,當nreset按鈕被鎖定爲低電平時,即使按鈕的邊沿觸發它,該代碼也會始終重置計數器。 是否可以修改以滿足這些新要求? – Martin