Как исправить «Ошибку: Недопустимый диапазон при выборе части»?

#system-verilog

Вопрос:

 bit[2:0] size; bit[2:0] num; bit[59:0] data; data = 60'h12345; num = 3'h1; size = 3'h1;  data = {(num 1){data[(size 1)*10-1:0]}};  

////Ошибка-[IRIPS] Недопустимый диапазон в части выбора

////Предупреждение-[WUIMCM] Неизвестно в множителе multiconcat

Как мне это исправить?

Ответ №1:

SystemVerilog не допускает переменной ширины в операндах. Вам нужно создать маску для выбора части data переменной и использовать for цикл aa для репликации.

 bit [59:0] data_select = data;  data_select amp;= (61'b1 lt;lt; (size 1)*10) - 1; for(int i=0;ilt;num 1;i  ) begin  data lt;lt;= (size 1)*10;  data |= data_select; end