Рандомизация ассоциативного массива в System Verilog

У меня есть ассоциативный массив:

    rand uvm_reg_field array_assoc[string];

Массив содержит дескриптор полей регистра UVM для регистров в DUT и индексируется строкой (строка - это имя поля). Скажем, у меня есть 2 регистрационных поля с именами «reg_field_1» и «reg_field_2».

Как описано,

    array_assoc["reg_field_1"]= handle of field 1;
    array_assoc["reg_field_2"]= handle of field 2;

Мне нужно рандомизировать только одно из полей, поэтому я выборочно отключаю rand_mode для одного из полей, скажем "reg_field_1":

    array_assoc["reg_field_1"].rand_mode(0);

Теперь, если я рандомизирую ассоциативный массив, оба поля регистра будут рандомизированы.

Что еще более удивительно, если я объявлю нормальный массив с целочисленными индексами, например:

   rand uvm_reg_field array_normal[2];

   array_normal[0]= handle of field 1;
   array_normal[1]= handle of field 2;

а затем включите rand_mode для поля 1:

   array_normal[0].rand_mode(0);

Он работает нормально, и поле 1 не рандомизируется.

Возникает вопрос: почему поле регистра "reg_field_1" рандомизируется, даже если его rand_mode имеет значение 0 в случае ассоциативного массива?


person user5089054    schedule 06.06.2017    source источник


Ответы (1)


Возможность устанавливать rand_mode () для отдельных элементов ассоциативного массива, похоже, пользуется спорадической поддержкой. Следующее работает для меня в Questa и еще в одном симуляторе; дает мне «еще не поддерживается» в другом, и результаты, которые вы видите в еще одном. Так что я свяжусь с вашим поставщиком инструмента.

module top;
class B;
   rand byte m;
endclass 
class A;
   rand B a1[2];
   rand B a2[string];
   function void run;
      a2["0"]  = new;
      a2["1"]  = new;
      a1[0]    = new;
      a1[1]    = new;
      a1[0].rand_mode(0);
      a2["0"].rand_mode(0);
      void'(randomize());
      $display(a1[0].m, a1[1].m,,a2["0"].m,a2["1"].m);

      endfunction
endclass
   A a  = new();
   initial repeat(3) a.run();
endmodule
person dave_59    schedule 06.06.2017