Hi,

I tried to generate the bath-tub curve distribution using the constraint posted on this verification academy page but got run-time error from the constraint used in it.

Here is the constraint used in the page

int a[5] = '{1, 11, 21, 31, 41};
int b[5] = '{10, 20, 30, 40, 50};
int c[5] = '{30, 15, 10, 15, 30};
constraint c_value { foreach (a[i])
value dist { [a[i]:b[i]] :/ c[i] };
}

And during runtime, I got the following errors.

"

Solver failed when solving following set of constraints

integer a[2] = 21;

integer b[2] = 30;

integer c[2] = 10;

integer a[3] = 31;

integer b[3] = 40;

integer c[3] = 15;

rand integer value; // rand_mode = ON

constraint c_value // (from this) (constraint_mode = ON) (testbench.sv:10)

{

(value dist {[a[2]:b[2]] :/ c[2]});

(value dist {[a[3]:b[3]] :/ c[3]});

}

=======================================================

"

Then I manually unrolled the foreach distribution and it worked as expected.

constraint c_value{
value dist{
[1:11]:/30,
[11:20]:/15,
[21:30]:/10,
[31:40]:/15,
[41:50]:/30
};
}

Thus I wonder why the first distribution constraints that use "foreach" will cause the solver to fail?

Thanks in advance for your help!