设置约束随机求解器的起始位置

问题描述 投票:0回答:1
class square;
    
    rand bit arr [3][3];
    
    function void pre_randomize();
      arr[0][1] = 1;
      $display ("%p",arr);
    endfunction
       
    constraint ab_c {
    // Iterate over the 3x3 array
      foreach (arr[i,j]) {
        if (arr[i][j] == 1) {
      // If arr[i][j] == 1 and we are not at the boundaries
        if (i > 0 && j > 0 && j < 2 && i < 2) { arr[i-1][j+1] == 1;
      }
          else arr[i][j] == 0;
        }
          
      }
    }

我有一个 3x3 数组,我试图有一个模式,当 arr[0][1](起始位置)为 1 时,我想将 arr[2][0] 设为 1。这似乎是约束求解器在随机化后将 pre_randomized 值 arr[0][1] 设置为 0。这是预期的吗?

system-verilog
1个回答
0
投票

foreach
循环到达
arr[0][1]
时,第一个
if
条件为真。然而,第二个
if
条件为假,因为 i=0。 这意味着
else
条件被执行:

      else arr[i][j] == 0;

这会将

arr[0][1]
设置为 0:

      else arr[0][1] == 0;
© www.soinside.com 2019 - 2024. All rights reserved.