Я столкнулся с проблемой ограничения данных в UVM `uvm_do_with. У меня есть такой фрагмент кода:
а) сначала я определил элемент данных:
class eth_item_data extends uvm_sequence_item;
...
rand int tx_len;
rand logic [7:0] txd[0:1500];
...
constraint txd_range_c { foreach (txd[i]) txd[i] <=255;
foreach (txd[i]) txd[i] >=0;
}
endclass
б) затем я сгенерировал данные в последовательности:
class base_seq extends uvm_sequence #(eth_item_data);
...
virtual task body();
...
data_obj = eth_item_data::type_id::create("data_obj");
`uvm_do_with (data_obj, {...
txd[0][7:0]==8'h11;
txd[1][7:0]==8'h22;
txd[2][7:0]==8'h33;
txd[3][7:0]==8'h44;
...
txd[109][7:0]==8'hff;
}
)
endtask
endclass
Очень странно, что: Q1): с кодом выше он показывает, что вызов метода randomize не удался. Симулятор подразумевает, что ограничение uvm_do_with конфликтует с этими:
Эти переменные участвуют в наборе конфликтующих ограничений: переменные rand: txd [1501] ......
Q2): если я генерирую данные только с небольшим числом, например, могут быть сгенерированы данные
`uvm_do_with (data_obj, {...
txd[0][7:0]==8'h11;
txd[1][7:0]==8'h22;
txd[2][7:0]==8'h33;
txd[3][7:0]==8'h44;
txd[4][7:0]==8'h55;
txd[5][7:0]==8'h66;
txd[6][7:0]==8'h77;
txd[7][7:0]==8'h88;
}
)
. Это смутило меня. Кто-нибудь может помочь мне понять, почему я не могу генерировать данные с большим количеством данных? спасибо.