如何在给定时间内选择一个随机数?

时间:2013-01-21 16:12:00

标签: hardware verilog fpga hdl

我希望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

我也想要一个可综合的解决方案。

2 个答案:

答案 0 :(得分:2)

您需要一种硬件方式来创建随机数。你有$ random用于模拟而不是硬件。

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

答案 1 :(得分:2)

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

LFSR易于实施,您可以在线找到许多示例。

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