class square;
rand bit arr [3][3];
function void pre_randomize();
arr[0][1] = 1;
$display ("%p",arr);
endfunction
constraint ab_c {
foreach (arr[i,j]) {
if (arr[i][j] == 1) {
if (i > 0 && j > 0 && j < 2 && i < 2) { arr[i+2][j-1] == 1;
}
else arr[i][j] == 0;
}
}
}
我有一个 3x3 数组,我想创建一个模式,当arr[0][1]
(起始位置) 为 1 时,我希望将其设置arr[2][0]
为 1。约束求解器似乎在随机化后将pre_randomize
值设置arr[0][1]
为 0。这是预期的吗?
当
foreach
循环到达时arr[0][1]
,第一个if
条件为真。但是,第二个if
条件为假,因为 i=0。这意味着条件else
被执行:设置
arr[0][1]
为 0:由于缩进和括号使用不一致,您的约束代码很难理解。