Почему не работает ограничение суммы в System Verilog Dynamic Array?(Запуск на детской площадке EDA (Aldec Tool Riviera Pro 2017) - PullRequest
0 голосов
/ 03 марта 2019

Почему не работает ограничение суммы в System Verilog Dynamic Array?(Запуск на детской площадке EDA (Aldec Tool Riviera Pro 2017) ///////////////////////////////////////

/////========================

class c ;

string name;

rand logic [4:0] len;

rand logic [4:0] duty_cycles[];

constraint c1 { duty_cycles.size()==len; len inside {[2:5]}; solve len before duty_cycles;};

constraint c2 { duty_cycles.sum() with (int'(item)) == 20;};

function new(string name="randcreater”)

this.name=name;

endfunction

function void post_randomize ();

$display ("New rand of len %d, sum=%d",duty_cycles.size, duty_cycles.sum());

foreach(duty_cycles[i])begin $display("%d",duty_cycles[i]); end

endfunction

endclass

/////=====================

module testbench ();

c obj;

initial begin

obj = new;

repeat (10) begin

obj.randomize();

 #10;

end

end
endmodule


/////////////////////////////////////

Результат:

KERNEL: Новый ранд len 2, сумма = 6

KERNEL: 6

KERNEL: 0

KERNEL: новый ранд len 2, sum = 4

KERNEL: 2

KERNEL: 2

1 Ответ

0 голосов
/ 03 марта 2019

Причина в том, что в вашем инструменте есть ошибка.Версии программного обеспечения на EDAPlayground старые.Попробуйте другой симулятор.

Кроме того, нет необходимости в solve len before duty_cycles;, потому что размер массива всегда выбирает значение перед любыми ограничениями на его элементы.

...