У меня есть ассоциативный массив:
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 в случае ассоциативного массива?