элемент не найден для индекса ассоциативного массива в ограничении systemverilog

Я пытаюсь рандомизировать содержимое ассоциативного массива и столкнулся с ошибкой: элемент не найден для индекса ассоциативного массива в ограничении

Как мне инициализировать эти индексы, а затем рандомизировать их значения?

module top;

class TFoo;

typedef struct {
                rand byte element_id;
                rand byte length;
                rand byte body_val[int];
               } mgmt_info_ele;

rand mgmt_info_ele   tspec; 

constraint tspec_1                                //Constraints for tspec
   {
      tspec.element_id == 8'd13;
      tspec.length == 'd55;
      //tspec.body_val.num() == tspec.length;      
      {tspec.body_val[1][0],tspec.body_val[0][7]} inside {[1:3]};
      tspec.body_val[1][7:6] inside {0, 1, 3};
      tspec.body_val[2][7:1] == 7'b0;
   }
endclass

TFoo f = new;
int status;

initial begin
    for(int i = 0; i < 1000; i++) begin
        $display("i=%0d: %s", i, f.get_randstate());
                $display("NUM Return value = %0d", f.tspec.body_val.num());      
        status = f.randomize();
        $display(status);
        assert(status) else $fatal;
    end
end

endmodule

person lonely    schedule 19.05.2021    source источник


Ответы (1)


Вызов randomize не может изменить размер ассоциативного массива или любого из его индексных ключей. Индексы ассоциативного массива не обязательно идут последовательно. Вот почему люди иногда называют их разреженными массивами. Возможно, вместо этого вам следует использовать динамический массив.

person dave_59    schedule 19.05.2021