I have a 2d array array[3][3], how do i write a constraint such that there is only one Max number in the array and the other entries can have duplicates. Thanks
In reply to raja7052:
int Max=15;
rand int unsigned array[3][3];
constraint c_only_1 { array.sum(d1) with (d1.sum(d2) with (int'(d2 == Max))) ==1;}
constraint c_le_Max { foreach (array[i,j]) array[i][j] <= Max; }
In reply to dave_59:
I tried with these constraints but for Aldec its giving error -->> Internal error has occurred. Assertion failed at ‘./sources/dag/dagcachedsymbols.cpp (96): r->use.ruse!=NULL’.
could you give a solution to this?
Thanks.
In reply to dave_59:
Hi Dave,
Would it be possible for you to breakdown and explain the c_only_1 constraint in a bit more detail ?
I’m trying to run this on EDA Playground, but I keep getting “Identifier not declared error for d2 variable” - (1) - EDA Playground
Thank You.
In reply to mavcdn:
The tools on EDA Playground are fairly old. You will have to expand the sum() method out manually.
Dave,
Can you explain what this line does
constraint c_only_1 { array.sum(d1) with (d1.sum(d2) with (int’(d2 == Max))) ==1;}
Thanks
In reply to raja7052:
it’s equivalent to
constraint c_only_1 { (
( int'(array[0][0]==Max) + int'(array[0][1]==Max) + int'(array[0][2]==Max) ) +
( int'(array[1][0]==Max) + int'(array[1][1]==Max) + int'(array[1][2]==Max) ) +
( int'(array[2][0]==Max) + int'(array[2][1]==Max) + int'(array[2][2]==Max) )
) == 1 ; }
It means only one of the equalities can be true
Can we just pick two random numbers in [0:2],
and in post randomized method set
constraint c_limit {
num1 inside [0:2];
num2 inside [0:2];
foreach (arrary[i, j]) arrary[i][j] < MAX;
};
function void post_randomzise();
array[num1][num2] = MAX;
endfunction
Not arguing, but debating pros and cons of this solution.
In reply to ankitks79:
If it’s not too much work, you should always try to express all your constraints without have to resort to post_randomize(). That makes it easer to add other constraints to be solved simultaneously. For example, if you needed the sum of all the elements to be a constraint as well.