рандомизация 32-битного значения в системном логе с xilinx vivado 2018.2 - PullRequest
0 голосов
/ 06 июля 2018

Я написал тестовый стенд для моего параметризованного проекта, в котором мне нужно рандомизировать входные данные. Я был очень удивлен, когда узнал, что если я запускаю следующий код, я получаю хорошее случайное число для моего 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.

1 Ответ

0 голосов
/ 06 июля 2018

Подтверждено с помощью 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

Я думаю, вы должны отправить сообщение об ошибке.

...