Хотя ответ Tudor будет работать технически, концептуально решение о том, какой из интерфейсов для запуска (num_if) является значением, которое не должно принадлежать транзакции, а последовательностью, которая его вызывает (что также должно быть рандомизированы). Транзакции должны содержать только представление значения, которое перемещается от А к В, и способ, которым он перемещается для этого протокола. Спецификация , которая A и B обычно не входит в компетенцию транзакции.
В этом случае, вариация на тему вашей сделки и последовательности Тюдора будет выглядеть следующим образом:
class my_transaction extends uvm_sequence_item;
rand logic data;
endclass
..и ..
class some_virtual_sequence extends uvm_sequence;
`uvm_declare_p_sequencer(virtual_seqr)
rand int num_if; constraint.....
task body();
my_transaction trans = my_transaction::type_id::create("my_transaction");
start_item(trans, , p_sequencer.seqrs[num_if]);
trans.randomize(); // randomization should be done after start_item()
finish_item(trans);
endtask
endclass
..running на виртуальном секвенсор, как говорит Tudor :
class virtual_seqr extends uvm_sequencer;
my_sequencer seqrs[10];
endclass
Вышеуказанный подход также позволяет рандомизировать в правильном месте: после start_item() ret урны и непосредственно перед вызовом finish_item(), который завершает элемент последовательности.
Я также согласен с тем, что параметр 'num_if' не относится к элементу транзакции« bus ». –