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

また、合成可能なソリューションが必要です。

4

2 に答える 2

2

ハードウェアで乱数が必要な場合は、リニア フィードバック シフト レジスタ (LFSR) 回路を使用して疑似乱数を生成できます。

LFSR は簡単に実装でき、オンラインで多くの例を見つけることができます。

ボタンを押すと、LFSR の現在の値をレジスタにキャプチャし (アプリケーションによっては何らかの方法でスケーリングする必要がある場合があります)、その値を使用して LED をオンにするまでの秒数をカウントできます。

于 2013-01-21T16:59:49.863 に答える
2

乱数を作成するには、ハードウェアの方法が必要です。シミュレーションには $random がありますが、ハードウェアにはありません。

実行される lfsr を作成し、ボタンが押されたときにカウントアップする現在の値をキャプチャするか、カウンターをプリセットして 0 までカウントダウンすることをお勧めします。

于 2013-01-21T16:59:02.187 に答える