Рандомизация 32-битного значения в системном логе с xilinx vivado 2018.2
Я написал тестовый стенд для моего параметризованного проекта, в котором мне нужно рандомизировать входные данные. Я был очень удивлен, когда узнал, что если я запускаю следующий код, я получаю хорошее случайное число для моего 16-битного val:
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.
1 ответ
Подтверждено с помощью Vivado 2017.2:
module tst_urandom;
reg [31:0] numb1,numb2,numb3;
integer i;
initial
begin
for (i=0; i<20; i=i+1)
begin
numb1 = $urandom_range(32'hFFFFFFFF,0);
numb2 = $urandom_range(32'hFFFFFFFE,1);
numb3 = $urandom();
#10;
$display("0x%08X 0x%08X 0x%08X",numb1,numb2,numb3);
end
end
endmodule
Производит:
Vivado Simulator 2017.2
Time resolution is 1 ps
0x00000000 0xffffffff 0x8484d609
0xffffffff 0x00000000 0x46df998d
0xffffffff 0xfffffffe 0x00f3e301
0x00000000 0x00000000 0x1e8dcd3d
0x00000000 0x00000001 0x7cfde9f9
0xffffffff 0xffffffff 0xd513d2aa
0x00000000 0xfffffffe 0x8932d612
0x00000000 0x00000001 0xe77696ce
0xffffffff 0xffffffff 0x2e58495c
0xffffffff 0xfffffffe 0xb2a72665
0xffffffff 0x00000000 0xc03b2280
0x00000000 0x00000001 0xcecccc9d
0xffffffff 0xfffffffe 0x86bc380d
0xffffffff 0x00000000 0xeaa62ad5
0xffffffff 0xffffffff 0x0effe91d
0xffffffff 0x00000000 0x0509650a
Я думаю, что вы должны подать отчет об ошибке.