Я написал тестовый стенд для моего параметризованного проекта, в котором мне нужно рандомизировать входные данные. Я был очень удивлен, когда узнал, что если я запускаю следующий код, я получаю хорошее случайное число для моего 16-битного значения:
val = $urandom_range(16'hffff, 0);
Я использую следующий код для проверки моей конструкции с 32-битным числом (val [31: 0]):
val = $urandom_range(32'hffff_ffff, 0);
однако в этом случае я всегда получаю 0 или 32'hffff_ffff. Я не знаю, является ли это известной ошибкой в инструментах xilinx. Я сократил свой тестовый код до следующего, и я все еще получаю тот же результат:
initial begin
static print_verbosity verbosity = VERB_LOW;
static int unsigned num_tests = 1000;
int unsigned val;
for (int test_id=0; test_id<num_tests; test_id++) begin
val = $urandom_range(32'hffff_ffff, 0);
`test_print("INFO", $sformatf("val=%0d", val), verbosity)
end
$finish();
end
и вывод, который я получаю, следующий:
[ INFO] val=0
[ INFO] val=4294967295
[ INFO] val=4294967295
[ INFO] val=0
[ INFO] val=4294967295
[ INFO] val=0
[ INFO] val=4294967295
[ INFO] val=0
Я изменил верхнюю границу для urandom_range следующим образом:
val = $urandom_range(32'hefff_ffff, 0);
На этот раз я получил случайные числа. Мне интересно, может ли кто-нибудь помочь мне выяснить, где я совершаю ошибку. Я использую новейший симулятор Vivado 2018.2.