Как выбрать случайное число в течение заданного времени?


Я хочу, чтобы светодиод включался в любое случайное время в течение 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 2

2 ответа:

Вам нужен аппаратный способ создания случайного числа. У вас есть $random для моделирования, но не аппаратное обеспечение.

Я бы предложил создать lfsr, который работает, и когда кнопка нажата, вы захватываете текущее значение, которое вы считаете до, или заранее устанавливаете счетчик и отсчитываете до 0.

Если вам нужно случайное число в аппаратном обеспечении, вы можете использовать линейный регистр сдвига обратной связи (LFSR) для генерации псевдослучайного числа.

LFSR легко реализовать, и вы найдете много примеров в интернете.

Когда вы нажимаете кнопку, Вы можете записать текущее значение LFSR в регистр (возможно, Вам потребуется масштабировать его каким-то образом для вашего приложения) и использовать это значение для отсчета секунд до включения светодиода.