В тесте UVM я объявляю и начинаю последовательности, но вывод из отдельных последовательностей с одинаковыми параметрами каким-то образом «связан» (см. Пример внизу), поэтому, когда я занимаюсь только покрытием, я только охват 12,5% случаев, что вызывает это? Как я могу сделать вывод двух последовательностей независимыми и случайными?УФМ-последовательности, производящие связанные номера
//declare
ve_master_sequence#(8,`num_inputs) x_agent_sequence_inst;
ve_master_sequence#(8,`num_inputs) y_agent_sequence_inst;
//build_phase
x_agent_sequence_inst = ve_master_sequence#(8,`num_inputs)::type_id::create("x_seq");
y_agent_sequence_inst = ve_master_sequence#(8,`num_inputs)::type_id::create("y_seq");
//run_phase
x_agent_sequence_inst.start(multadd_env_inst.ve_x_agent_inst.sequencer);
y_agent_sequence_inst.start(multadd_env_inst.ve_y_agent_inst.sequencer);
Среда содержит 4 основных агента, два 32 бит, два 8 бит. Же параметризованная последовательность выполняется на всех агентах
// within the sequence
virtual task body();
`uvm_info("ve_master_sequence", $sformatf("begin body()"), UVM_MEDIUM);
for(int i=0; i<length; i++) begin
req = ve_seq_item#(data_width)::type_id::create("req");
start_item(req);
while(!req.randomize() with {
data <= (2**data_width)-1;
delay dist { [0:1] := 2, [2:6] := 1};
});
finish_item(req);
get_response(req);
end
#1000;
endtask
Я заменил req.randomize() с $ urandom_range, который работал, но это означает потерять все затрудненные случайные способности SystemVerilog.
Когда я запускаю код, и пересекают покрытие существует связь между выходом секвенато- которые имеют тот же размер,
when y = 0 is always x = 79 or 80
when y = 1 is always x = 80 or 81
when y = 2 is always x = 81 or 82
....
when y = 51 is always x = 130 or 131
when y = 52 is always x = 131 or 132
и т.д ..
Вопрос: Просьба уточнить. – Hida
Существуют ли какие-либо ограничения внутри класса ve_seq_item? Попробуйте отключить свой 'while (! Req.randomize() ...' с '' if (reg.randomize() ...) else 'uvm_error (...)' '. Это будет сообщать о любых ошибках вместо застревание в цикле while. – Hida
изменение «if» не сообщало о каких-либо ошибках, но, возможно, это ключ, если я изменяю имя переменной последовательности, соотношение между номерами, выводимыми с помощью последовательности изменений, спасибо за комментарии – StanOverflow