class data_s;
int c=5;
endclass
class config_c;
data_s format[];
rand int num_supp = 5;
function new();
format = new[num_supp];
foreach(format[i])
format[i] = new();
endfunction
endclass
class packet;
rand int nsid;
rand int a;
rand int b;
endclass
program p;
packet p = new;
config_c conf = new;
initial begin
p.randomize() with {nsid < (conf.num.supp + 1);
nsid > 0;
if(a < conf.format[nsid - 1].c)
b=0;
else
b=1;
}
end
endprogram
В этом коде, я получаю фатальную ошибку, потому что nsid не в диапазоне num_supp и поэтому, если условие он пытается получить доступ к объекту, который не создается (например, формат [32 «hb235_44d5]).рандомизации Заказать в SystemVerilog
«решить nsid before b» также не работает.
Я могу использовать это условие, вне функции рандомизации, и это может сработать, но что может быть решением этой проблемы в функции рандомизации?
Все еще есть много ошибок. Вы посмотрели мой ответ и сравнили различия? –
@ dave_59: Да, я нашел ошибки. Но что более важно, я получил свой ответ. Большое спасибо. –