How to write constraint for generating a continuous mask

In reply to ben@SystemVerilog.us:

Another cut at the use of the function with more debug features.
Still an issue.


 function  bit mask_validation(bit [7:0]mask);
    bit a_one_occurred = 0;
    bit zero_after_one = 0;
    bit fail=0; 
    $display("Mask in call before loop  %8b, fail= %d",mask, fail);
    foreach(mask[i]) begin // Mask is 01110010::b=00011010 
        $display("i= %d", i);
        case({a_one_occurred, zero_after_one})
            2'b00: if(mask[i])  a_one_occurred=1'b1;            
            //2'b01: if(mask[i])  a_one_occurred=1'b1;   
            2'b10: if(mask[i]==1'b0) zero_after_one=1'b1; 
            2'b11: if(mask[i]) fail=1'b1; // mask[i]==1'b0; // must be 0
        endcase 
    end
    $display("Mask in call %8b, fail= %d",mask, fail);
    $display("a_one_occurred %d, zero_after_one %d", a_one_occurred, zero_after_one);
    return fail;
  endfunction
  constraint nonzero_b{b != 8'b00000000;}
  constraint nonzero_mask{mask!=8'b00000000;}
  constraint valid_maskF{mask_validation(mask) == 1;}
  // In above constraint we need a ==0, but that causes "No solutions exist"
  // The ==1 shows the displays for 1 randomize cal 
/* # Mask in call before loop  11001111, fail= 0
# i=           7
# i=           6
# i=           5
# i=           4
# i=           3
# i=           2
# i=           1
# i=           0
# Mask in call 11001111, fail= 1
# a_one_occurred 1, zero_after_one 1
# Mask is 11001111::b=11010000  */