Column sum constraint for an 2D array

lass testClass;
  rand int arr[][];
  
  constraint arr_size {
    arr.size() inside {[3:5]}; //Rows
    foreach(arr[i]) arr[i].size() == arr.size(); //For square matrix
  }
 
    constraint array_value {
      foreach(arr[i,j]) arr[i][j] inside {[1:10]};
  }
constraint max_row_sum10 {
     foreach(arr[i])
       arr[i].sum() ==10;
  };

constraint col_sum {
//Column sum constraint
}




  function void display_size();
    $display("size of array : %0d x %0d ", arr.size(),arr[0].size());
  endfunction
                       
  function void display_array();
    foreach(arr[i]) begin
      $write("Row %0d:",i);
      foreach(arr[i][j])
        $write("%2d",arr[i][j]);
    $display("");
    end
 endfunction
  
endclass

module tb;
  
  initial begin
    testClass obj = new();
    
    obj.randomize();
    obj.display_size();
    obj.display_array();
  end
endmodule

How do i constrain the column sum to sum value.

constraint max_col_sum10 {
     foreach(arr[i])
       arr.sum() with (arr[item.index][i])==10;
  };
1 Like

Can someone check why the sum of column does not equal 10 here.

@rajt
Try

constraint c1 {

      foreach(arr[i]) {
        arr.sum() with ( int'(arr[item.index][i]) ) == 10;
      }       
    }

Thanks! What does casting do here?

1 Like