我希望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 :(得分:2)
您需要一种硬件方式来创建随机数。你有$ random用于模拟而不是硬件。
我建议创建一个运行的lfsr,当按下一个按钮时,你会捕获你计算到的当前值,或者预设一个计数器并倒数到0。
答案 1 :(得分:2)
如果您需要硬件中的随机数,可以使用线性反馈移位寄存器(LFSR)电路来生成伪随机数。
LFSR易于实施,您可以在线找到许多示例。
当您按下按钮时,您可以将LFSR的当前值捕获到寄存器(您可能需要以某种方式缩放到您的应用程序)并使用该值计算秒数,直到您打开LED。 / p>