Найти тему

Функция random() в Verilog

В Verilog существует системная функция $random, применяемая для генерации псевдослучайных данных размером до 32-х бит. Например, если в TestBench проинициализировать 2 регистра и обработать их функцией $random:

reg a;
reg [31:0] b;
a = $random;
b = $random;
$monitor("a = %d | b = %d");

То результат будет похожим на:

a = -152 | b = 2302104082

Т.е. функция $random возвращает новое 32-битное значение при каждом вызове в диапазоне от -(2^32 – 1) до +(2^32). Однако, такой диапазон редко когда бывает необходимым, поэтому можно указать желаемый диапазон возвращаемых значений с помощью оператора %.

integer a = $random % 10;

В данном примере функция возвращает диапазон значений от 0 до 10. Однако, необходимо помнить, что функция также вернет и отрицательные числа. Чтобы этого избежать, необходимо использовать функцию $unsigned.

integer a = $unsigned($random) % 10;

Все предыдущие примеры возвращали от 0 до какого-то значения. Чтобы начать генерацию не от нулевого значения, можно воспользоваться записью MIN + {$random} % (MAX – MIN).

integer a = 10 + {$random} % (20 - 10);

Данный пример вернет числа в диапазоне от 10 до 20.

#verilog