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

您需要一种硬件方式来创建随机数。您有 $random 用于模拟,但没有硬件。

我建议创建一个运行的 lfsr,当按下按钮时,您会捕获您计数到的当前值,或者预设一个计数器并倒数到 0。

于 2013-01-21T16:59:02.187 回答
2

如果您需要硬件中的随机数,您可以使用线性反馈移位寄存器 (LFSR) 电路来生成伪随机数。

LFSR 很容易实现,您可以在网上找到许多示例。

当您按下按钮时,您可以将 LFSR 的当前值捕获到寄存器(您可能需要以某种方式为您的应用程序进行缩放)并使用该值来计算秒数,直到您打开 LED。

于 2013-01-21T16:59:49.863 回答