2013-01-21 34 views
2

我希望LED在任何隨機時間內都能在15秒內打開。例如,按下按鈕後,它應該在4秒或7秒後隨機打開。如何在給定的時間內選擇一個隨機數?

我想出了代碼產生15秒的延遲,但我不能找出一種方法來選擇一個隨機時間之間。

下面是我的15秒的延遲代碼:

always @ (posedge clock or posedge reset) 
begin 
if(reset) 

    ticker <= 0; 

else if(ticker == 750000000) //if it reaches the desired max value that equates 15 second reset it 
    ticker <= 0; 
else if(start) //only start if the input is set high 
    ticker <= ticker + 1; 
end 

assign click = ((ticker == 750000000)?1'b1:1'b0); //click to be assigned high every 0.1 second 

而且我希望有一個綜合的解決方案,請。

+0

http://en.wikipedia.org/wiki/Linear_feedback_shift_register – e19293001

回答

2

您需要一種硬件方式來創建一個隨機數。你有$隨機模擬,但不是硬件。

我建議建立它運行,當按下一個按鈕,你捕捉你算到目前的價值,或預設櫃臺,如果您需要一個隨機數倒計時到0

+0

謝謝。我一直在研究LFSR的建議,並對選擇水龍頭非常困惑。什麼決定了哪些反饋位必須被使用?另外我可以找到一個一致的例子。謝謝 – ipunished

+1

這可能是最好的開始另一個問題。您需要決定您需要多少個隨機數(反饋條款),或者可能只是隨機數的(位)寬度。一個例子[Verilog lfsr](https://github.com/rcastle/verilog_lfsr/blob/master/fibonacci_lfsr.v)[選擇水龍頭](http://www.ece.cmu.edu/~koopman/lfsr/ index.html)確保你有一個最大的LFSR。 – Morgan

+0

謝謝。我只需要一個30位寬的僞隨機數就可以了,我不在乎它開始重複之前的隨機項數。我試圖理解你發佈的鏈接,我明白每個值的迭代「''在開始重複之前顯示隨機數。我對嗎?但是起點和終點的價值是什麼?因爲它沒有顯示水龍頭的安排。我可以只使用任何水龍頭安排並擺脫它嗎?謝謝 – ipunished

2

的線性反饋移位寄存器在硬件中,您可以使用線性反饋移位寄存器(LFSR)電路來生成僞隨機數。

LFSR很容易實現,你可以在網上找到很多例子。

當您按下按鈕時,您可以將LFSR的當前值捕捉到寄存器(您可能需要以某種方式爲應用程序進行縮放),並使用該值計算秒數,直到您打開LED。

+0

謝謝。我一直在研究LFSR的建議,並對選擇水龍頭非常困惑。什麼決定了哪些反饋位必須被使用?謝謝 – ipunished

相關問題