I just gave a try. Feel free to optimize this code as much you want
class test;
rand bit arr[8][8];
bit [8:0] N = 3;
constraint c1 {
foreach(arr[i,j])
arr[i][j] inside {[0:512]};}
constraint c2 {
foreach(arr[i]) { // begin of parent foreach loop
if((i==0) || (i==7)) {
foreach(arr[j])
if(j==3 || j==4)
arr[i][j] ==1;
else arr[i][j] ==0;
}
if((i==1) || (i==6)) {
foreach(arr[j])
if(j== 0 || j==1 || j==6 || j==7)
arr[i][j] ==0;
else arr[i][j] ==1;
}
if((i==2) || (i==5)) {
foreach(arr[j])
if(j== 0 || j==7)
arr[i][j] ==0;
else arr[i][j] ==1;
}
if((i==3) || (i==4)) {
foreach(arr[j])
arr[i][j]==1;
}
} // end of parent foreach loop
}
endclass
module top();
test c1;
initial begin
c1 =new();
repeat(5) begin
assert(c1.randomize());
$display("c1.arr=%p",c1.arr);
end
end
endmodule