копировать поля из одного класса в другой внутри элемента последовательности

У меня есть два дескриптора класса внутри моего элемента последовательности. Один из классов содержит дескриптор другого класса. псевдокод выглядит так:

class seq_item extends uvm_sequence_item;
    rand class_a a;
    rand class_b b;
endclass// seq_item  

class class_a extends uvm_object;
    rand bit field_1;
    rand bit field_2; 
endclass//class_a

class class_b extends uvm_object;
    class_a a_handle;
    rand bit field_3;
    rand bit field_4;
endclass // class_b

Итак, когда я рандомизирую; Я бы хотел, чтобы a_handle имел значения field_1 и field_2, как у «a» из seq_item. Я пробовал клонировать ($cast(b.a_handle, a.clone()) внутри post_randomize seq_item, но это не работает. Как убедиться, что значения b.a_handle.field_1, b.a_handle.field_2 совпадают как у a.field_1, a.field_2?


person Pri    schedule 12.08.2018    source источник
comment
Это помогло бы объяснить, что означает Это не работает. Ошибка компилятора или результаты отличаются от ожидаемых?   -  person dave_59    schedule 12.08.2018
comment
У меня есть доступ к a_handle.field_1 внутри метода class_b. Во время выполнения я получаю «Ошибку доступа к нулевому объекту» в a_handle.field_1 из этого метода.   -  person Pri    schedule 12.08.2018
comment
Мне удалось исправить ошибку «Доступ к нулевому объекту». Я пытался «новый» class_b.a_handle внутри метода pre_randomize seq_item, что, я думаю, было неправильным. Я переместил его в «новый» метод class_b.   -  person Pri    schedule 12.08.2018


Ответы (1)


У вас может быть ограничение, которое сделает это за вас внутри seq_item

constraint fields {
  a.field_1 == b.a_handle.field_1;
  a.field_2 == b.a_handle.field_2;
}

Вам также необходимо объявить a_handle как rand в class_b

person dave_59    schedule 12.08.2018
comment
В порядке. Я попробую это. Но просто хотел узнать, есть ли другой способ сделать это, так как у меня около 30 полей в class_a. В противном случае мне придется ограничивать их одного за другим. И не могли бы вы сказать, почему клон не будет работать в этом случае? Это потому, что поля имеют тип «ранд»? - person Pri; 12.08.2018
comment
Я не уверен, что вы пытаетесь сделать, поэтому не могу больше помочь. Зачем вам нужно разделять объекты class_a? Могут ли они указывать на один и тот же объект. - person dave_59; 12.08.2018
comment
Мне не нужны отдельные объекты class_a. Но, не делая этого, как я могу получить доступ к полям объекта a (из seq_item) внутри методов объекта b? - person Pri; 12.08.2018
comment
После построения b, b.a_handle = a; - person dave_59; 12.08.2018
comment
В идеале то, что вы упомянули, должно работать, но как-то внутри class_b я все равно не вижу field_1, field_2 из class_a. Нужно больше отлаживать. Спасибо за ваш вклад. - person Pri; 13.08.2018